-
Notifications
You must be signed in to change notification settings - Fork 455
Expand file tree
/
Copy pathSerializer.java
More file actions
100 lines (87 loc) · 3.67 KB
/
Serializer.java
File metadata and controls
100 lines (87 loc) · 3.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package com.twilio.converter;
import tools.jackson.core.JacksonException;
import tools.jackson.databind.DatabindException;
import tools.jackson.databind.ObjectMapper;
import com.twilio.constant.EnumConstants.ParameterType;
import com.twilio.exception.ApiConnectionException;
import com.twilio.exception.ApiException;
import com.twilio.http.Request;
import java.io.IOException;
import java.time.LocalDate;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;
import java.util.Objects;
public class Serializer {
public static <T> void toString(Request request, String key, T value, ParameterType parameterType) {
if (value == null) return;
String stringValue = convertToString(value);
addParamToRequest(request, key, stringValue, parameterType);
}
public static <T> void toString(Request request, ObjectMapper mapper, T value) {
if (value == null) return;
if (mapper == null) {
throw new IllegalArgumentException("ObjectMapper is required for JSON serialization");
}
String stringValue = toJson(value, mapper);
request.setBody(stringValue);
}
public static String toJson(Object object, ObjectMapper mapper) {
try {
return mapper.writeValueAsString(object);
} catch (JacksonException e) {
throw new ApiException(e.getMessage(), e);
}
}
private static <T> String convertToString(T value) {
if (value instanceof Map) {
return Converter.mapToJson((Map<String, ? extends Object>) value);
} else if (value instanceof ZonedDateTime) {
return ((ZonedDateTime) value).format(
DateTimeFormatter.ofPattern(Request.QUERY_STRING_DATE_TIME_FORMAT));
}
else {
return String.valueOf(value);
}
}
private static void addParamToRequest(Request request, String key, String value, ParameterType parameterType) {
Objects.requireNonNull(parameterType, "ParameterType cannot be null");
switch (parameterType) {
case HEADER:
request.addHeaderParam(key, value);
break;
case QUERY:
request.addQueryParam(key, value);
break;
case URLENCODED:
request.addPostParam(key, value);
break;
case JSON:
request.setBody(value);
default:
throw new IllegalArgumentException("Unsupported ParameterType: " + parameterType);
}
}
/*
Inequality fields are only supported in Query parameters.
dateBefore is upperBound and dateAfter is lowerBound
*/
public static void toString(final Request request, final String key, LocalDate date, LocalDate dateBefore, LocalDate dateAfter) {
if (date != null) {
request.addQueryParam(key, date.format(DateTimeFormatter.ofPattern(Request.QUERY_STRING_DATE_FORMAT)));
} else if (dateAfter != null || dateBefore != null) {
request.addQueryDateRange(key, dateAfter, dateBefore);
}
}
/*
Inequality fields are only supported in Query parameters.
dateBefore is upperBound and dateAfter is lowerBound
*/
public static void toString(final Request request, final String key, ZonedDateTime date, ZonedDateTime dateBefore, ZonedDateTime dateAfter) {
if (date != null) {
request.addQueryParam(key, date.format(DateTimeFormatter.ofPattern(Request.QUERY_STRING_DATE_TIME_FORMAT)));
} else if (dateAfter != null || dateBefore != null) {
request.addQueryDateTimeRange(key, dateAfter, dateBefore);
}
}
}