Skip to content

Commit 85089b9

Browse files
Created ISO8601InstantAdapter.java file
1 parent c57a583 commit 85089b9

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.segment.analytics.gson;
2+
3+
import com.google.gson.*;
4+
import com.google.gson.stream.JsonReader;
5+
import com.google.gson.stream.JsonWriter;
6+
7+
import java.io.IOException;
8+
import java.lang.reflect.Type;
9+
import java.time.Instant;
10+
11+
/**
12+
* A {@link JsonSerializer} that formats {@link Instant} objects into iso8601 formatted strings, and
13+
* {@link JsonDeserializer} that parses iso8601 formatted strings into {@link Instant} objects.
14+
*/
15+
public class ISO8601InstantAdapter extends TypeAdapter<Instant> implements JsonSerializer<Instant>, JsonDeserializer<Instant> {
16+
@Override
17+
public JsonElement serialize(Instant src, Type typeOfSrc, JsonSerializationContext context) {
18+
return new JsonPrimitive(Iso8601Utils.format(src));// ISO 8601 format
19+
}
20+
21+
@Override
22+
public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
23+
throws JsonParseException {
24+
return Instant.parse(json.getAsString());
25+
}
26+
27+
@Override
28+
public void write(JsonWriter out, Instant value) throws IOException {
29+
out.value(value == null ? null : value.toString());
30+
}
31+
32+
@Override
33+
public Instant read(JsonReader in) throws IOException {
34+
String str = in.nextString();
35+
return str == null ? null : Instant.parse(str);
36+
}
37+
}

analytics-core/src/main/java/com/segment/analytics/gson/Iso8601Utils.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package com.segment.analytics.gson;
1717

1818
import com.google.gson.JsonParseException;
19+
import java.time.Instant;
1920
import java.util.Calendar;
2021
import java.util.Date;
2122
import java.util.GregorianCalendar;
@@ -277,4 +278,10 @@ private static int indexOfNonDigit(String string, int offset) {
277278
}
278279
return string.length();
279280
}
281+
282+
/** Returns {@code date} formatted as yyyy-MM-ddThh:mm:ss.sssZ */
283+
static String format(Instant instant) {
284+
// Format the instant
285+
return String.valueOf(instant.getEpochSecond());
286+
}
280287
}

analytics/src/main/java/com/segment/analytics/Analytics.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
import com.google.gson.GsonBuilder;
55
import com.segment.analytics.gson.AutoValueAdapterFactory;
66
import com.segment.analytics.gson.ISO8601DateAdapter;
7+
import com.segment.analytics.gson.ISO8601InstantAdapter;
78
import com.segment.analytics.http.SegmentService;
89
import com.segment.analytics.internal.AnalyticsClient;
910
import com.segment.analytics.internal.AnalyticsVersion;
1011
import com.segment.analytics.messages.Message;
1112
import com.segment.analytics.messages.MessageBuilder;
13+
import java.time.Instant;
1214
import java.util.ArrayList;
1315
import java.util.Arrays;
1416
import java.util.Collections;
@@ -362,6 +364,7 @@ public Analytics build() {
362364

363365
gsonBuilder
364366
.registerTypeAdapterFactory(new AutoValueAdapterFactory())
367+
.registerTypeAdapter(Instant.class, new ISO8601InstantAdapter())
365368
.registerTypeAdapter(Date.class, new ISO8601DateAdapter());
366369

367370
Gson gson = gsonBuilder.create();

0 commit comments

Comments
 (0)