Thanks to visit codestin.com
Credit goes to github.com

Skip to content

chore: handle any Type with object datatype #858

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Jun 12, 2025
Merged
48 changes: 48 additions & 0 deletions src/main/java/com/twilio/converter/Converter.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,61 @@
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class Converter {

private static final ObjectMapper MAPPER = new ObjectMapper();

/**
* Convert a generic object to a JSON String.
*
* @param value object to convert
* @return converted JSON string
*/
public static String objectToJson(Object value) {
if (value == null) {
return "null";
}

// Primitive wrappers
if (value instanceof String || value instanceof Number || value instanceof Boolean || value instanceof Character) {
return value.toString();
}
// Arrays: handle any arrays (primitive or object)
if (value.getClass().isArray()) {
// For primitive arrays, handle differently
if (value instanceof int[]) return Arrays.toString((int[]) value);
if (value instanceof long[]) return Arrays.toString((long[]) value);
if (value instanceof double[]) return Arrays.toString((double[]) value);
if (value instanceof float[]) return Arrays.toString((float[]) value);
if (value instanceof boolean[]) return Arrays.toString((boolean[]) value);
if (value instanceof byte[]) return Arrays.toString((byte[]) value);
if (value instanceof short[]) return Arrays.toString((short[]) value);
if (value instanceof char[]) return Arrays.toString((char[]) value);
// Object array
return Arrays.deepToString((Object[]) value);
}

// Collection (List, Set, etc.)
if (value instanceof Collection || value instanceof Map) {
try {
return MAPPER.writeValueAsString(value);
} catch (JsonProcessingException e) {
return value.toString();
}
}
// Fallback: Try JSON, else toString
try {
return MAPPER.writeValueAsString(value);
} catch (JsonProcessingException e) {
return value.toString();
}
}

/**
* Convert a map to a JSON String.
*
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/twilio/rest/assistants/v1/Knowledge.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,10 @@ public static class AssistantsV1ServiceCreatePolicyRequest {
@JsonProperty("policy_details")
@Getter
@Setter
private Map<String, Object> policyDetails;
private Object policyDetails;

public String getPolicyDetails() {
return Converter.mapToJson(policyDetails);
return Converter.objectToJson(policyDetails);
}

@JsonInclude(JsonInclude.Include.NON_EMPTY)
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/twilio/rest/assistants/v1/Tool.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,10 @@ public static class AssistantsV1ServiceCreatePolicyRequest {
@JsonProperty("policy_details")
@Getter
@Setter
private Map<String, Object> policyDetails;
private Object policyDetails;

public String getPolicyDetails() {
return Converter.mapToJson(policyDetails);
return Converter.objectToJson(policyDetails);
}

@JsonInclude(JsonInclude.Include.NON_EMPTY)
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/com/twilio/rest/content/v1/Content.java
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ public static class CallToActionAction {
@JsonProperty("type")
@Getter
@Setter
private Content.CallToActionActionType type;
private CallToActionActionType type;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonProperty("title")
Expand Down Expand Up @@ -261,7 +261,7 @@ public static class QuickReplyAction {
@JsonProperty("type")
@Getter
@Setter
private Content.QuickReplyActionType type;
private QuickReplyActionType type;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonProperty("title")
Expand Down Expand Up @@ -313,7 +313,7 @@ public static class CardAction {
@JsonProperty("type")
@Getter
@Setter
private Content.CardActionType type;
private CardActionType type;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonProperty("title")
Expand Down Expand Up @@ -489,7 +489,7 @@ public static class CarouselAction {
@JsonProperty("type")
@Getter
@Setter
private Content.CarouselActionType type;
private CarouselActionType type;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonProperty("title")
Expand Down Expand Up @@ -769,7 +769,7 @@ public static class AuthenticationAction {
@JsonProperty("type")
@Getter
@Setter
private Content.AuthenticationActionType type;
private AuthenticationActionType type;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonProperty("copy_code_text")
Expand Down
7 changes: 3 additions & 4 deletions src/main/java/com/twilio/rest/iam/v1/ApiKeyUpdater.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,12 @@
import com.twilio.http.Response;
import com.twilio.http.TwilioRestClient;
import com.twilio.rest.Domains;
import java.util.Map;

public class ApiKeyUpdater extends Updater<ApiKey> {

private String pathSid;
private String friendlyName;
private Map<String, Object> policy;
private Object policy;

public ApiKeyUpdater(final String pathSid) {
this.pathSid = pathSid;
Expand All @@ -42,7 +41,7 @@ public ApiKeyUpdater setFriendlyName(final String friendlyName) {
return this;
}

public ApiKeyUpdater setPolicy(final Map<String, Object> policy) {
public ApiKeyUpdater setPolicy(final Object policy) {
this.policy = policy;
return this;
}
Expand Down Expand Up @@ -87,7 +86,7 @@ private void addPostParams(final Request request) {
request.addPostParam("FriendlyName", friendlyName);
}
if (policy != null) {
request.addPostParam("Policy", Converter.mapToJson(policy));
request.addPostParam("Policy", Converter.objectToJson(policy));
}
}
}
8 changes: 3 additions & 5 deletions src/main/java/com/twilio/rest/iam/v1/NewApiKeyCreator.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,13 @@
import com.twilio.http.Response;
import com.twilio.http.TwilioRestClient;
import com.twilio.rest.Domains;
import java.util.Map;
import java.util.Map;

public class NewApiKeyCreator extends Creator<NewApiKey> {

private String accountSid;
private String friendlyName;
private NewApiKey.Keytype keyType;
private Map<String, Object> policy;
private Object policy;

public NewApiKeyCreator(final String accountSid) {
this.accountSid = accountSid;
Expand All @@ -55,7 +53,7 @@ public NewApiKeyCreator setKeyType(final NewApiKey.Keytype keyType) {
return this;
}

public NewApiKeyCreator setPolicy(final Map<String, Object> policy) {
public NewApiKeyCreator setPolicy(final Object policy) {
this.policy = policy;
return this;
}
Expand Down Expand Up @@ -110,7 +108,7 @@ private void addPostParams(final Request request) {
request.addPostParam("KeyType", keyType.toString());
}
if (policy != null) {
request.addPostParam("Policy", Converter.mapToJson(policy));
request.addPostParam("Policy", Converter.objectToJson(policy));
}
}
}
4 changes: 2 additions & 2 deletions src/main/java/com/twilio/rest/knowledge/v1/Knowledge.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,10 @@ public static class KnowledgeV1ServiceCreatePolicyRequest {
@JsonProperty("policy_details")
@Getter
@Setter
private Map<String, Object> policyDetails;
private Object policyDetails;

public String getPolicyDetails() {
return Converter.mapToJson(policyDetails);
return Converter.objectToJson(policyDetails);
}

@JsonInclude(JsonInclude.Include.NON_EMPTY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,12 @@
import com.twilio.http.Response;
import com.twilio.http.TwilioRestClient;
import com.twilio.rest.Domains;
import java.util.Map;
import java.util.Map;

public class InstalledAddOnCreator extends Creator<InstalledAddOn> {

private String availableAddOnSid;
private Boolean acceptTermsOfService;
private Map<String, Object> configuration;
private Object configuration;
private String uniqueName;

public InstalledAddOnCreator(
Expand All @@ -58,9 +56,7 @@ public InstalledAddOnCreator setAcceptTermsOfService(
return this;
}

public InstalledAddOnCreator setConfiguration(
final Map<String, Object> configuration
) {
public InstalledAddOnCreator setConfiguration(final Object configuration) {
this.configuration = configuration;
return this;
}
Expand Down Expand Up @@ -130,7 +126,7 @@ private void addPostParams(final Request request) {
if (configuration != null) {
request.addPostParam(
"Configuration",
Converter.mapToJson(configuration)
Converter.objectToJson(configuration)
);
}
if (uniqueName != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,18 @@
import com.twilio.http.Response;
import com.twilio.http.TwilioRestClient;
import com.twilio.rest.Domains;
import java.util.Map;

public class InstalledAddOnUpdater extends Updater<InstalledAddOn> {

private String pathSid;
private Map<String, Object> configuration;
private Object configuration;
private String uniqueName;

public InstalledAddOnUpdater(final String pathSid) {
this.pathSid = pathSid;
}

public InstalledAddOnUpdater setConfiguration(
final Map<String, Object> configuration
) {
public InstalledAddOnUpdater setConfiguration(final Object configuration) {
this.configuration = configuration;
return this;
}
Expand Down Expand Up @@ -91,7 +88,7 @@ private void addPostParams(final Request request) {
if (configuration != null) {
request.addPostParam(
"Configuration",
Converter.mapToJson(configuration)
Converter.objectToJson(configuration)
);
}
if (uniqueName != null) {
Expand Down
16 changes: 7 additions & 9 deletions src/main/java/com/twilio/rest/messaging/v2/ChannelsSender.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@
import java.io.InputStream;
import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.Map;
import java.util.Objects;
import lombok.Getter;
import lombok.Setter;
Expand All @@ -58,7 +56,7 @@ public static class MessagingV2ChannelsSenderConfiguration {
@JsonProperty("verification_method")
@Getter
@Setter
private ChannelsSender.VerificationMethodEnum verificationMethod;
private VerificationMethodEnum verificationMethod;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonProperty("verification_code")
Expand Down Expand Up @@ -96,7 +94,7 @@ public static class MessagingV2ChannelsSenderWebhook {
@JsonProperty("callback_method")
@Getter
@Setter
private ChannelsSender.CallbackMethodEnum callbackMethod;
private CallbackMethodEnum callbackMethod;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonProperty("fallback_url")
Expand All @@ -108,7 +106,7 @@ public static class MessagingV2ChannelsSenderWebhook {
@JsonProperty("fallback_method")
@Getter
@Setter
private ChannelsSender.FallbackMethodEnum fallbackMethod;
private FallbackMethodEnum fallbackMethod;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonProperty("status_callback_url")
Expand Down Expand Up @@ -164,10 +162,10 @@ public static class MessagingV2ChannelsSenderProfile {
@JsonProperty("emails")
@Getter
@Setter
private Map<String, Object> emails;
private Object emails;

public String getEmails() {
return Converter.mapToJson(emails);
return Converter.objectToJson(emails);
}

@JsonInclude(JsonInclude.Include.NON_EMPTY)
Expand All @@ -186,10 +184,10 @@ public String getEmails() {
@JsonProperty("websites")
@Getter
@Setter
private Map<String, Object> websites;
private Object websites;

public String getWebsites() {
return Converter.mapToJson(websites);
return Converter.objectToJson(websites);
}

public static MessagingV2ChannelsSenderProfile fromJson(
Expand Down
Loading