Skip to content

Commit 6bfa812

Browse files
author
Mark
committed
changed java.java.time.Instant serialization
1 parent 0efabec commit 6bfa812

File tree

3 files changed

+38
-12
lines changed

3 files changed

+38
-12
lines changed

src/main/java/com/arangodb/internal/velocypack/VPackDeserializersAsync.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.time.ZoneId;
2727

2828
import com.arangodb.velocypack.VPackDeserializer;
29+
import com.arangodb.velocypack.internal.VPackDeserializers;
2930

3031
/**
3132
* @author Mark - mark at arangodb.com
@@ -34,13 +35,13 @@
3435
public class VPackDeserializersAsync {
3536

3637
public static VPackDeserializer<Instant> INSTANT = (parent, vpack, context) -> {
37-
return vpack.getAsDate().toInstant();
38+
return VPackDeserializers.DATE.deserialize(parent, vpack, context).toInstant();
3839
};
3940
public static VPackDeserializer<LocalDate> LOCAL_DATE = (parent, vpack, context) -> {
40-
return vpack.getAsDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
41+
return INSTANT.deserialize(parent, vpack, context).atZone(ZoneId.systemDefault()).toLocalDate();
4142
};
4243
public static VPackDeserializer<LocalDateTime> LOCAL_DATE_TIME = (parent, vpack, context) -> {
43-
return vpack.getAsDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
44+
return INSTANT.deserialize(parent, vpack, context).atZone(ZoneId.systemDefault()).toLocalDateTime();
4445
};
4546

4647
}

src/main/java/com/arangodb/internal/velocypack/VPackSerializersAsync.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.Date;
2828

2929
import com.arangodb.velocypack.VPackSerializer;
30+
import com.arangodb.velocypack.internal.VPackSerializers;
3031

3132
/**
3233
* @author Mark - mark at arangodb.com
@@ -35,13 +36,13 @@
3536
public class VPackSerializersAsync {
3637

3738
public static VPackSerializer<Instant> INSTANT = (builder, attribute, value, context) -> {
38-
builder.add(attribute, Date.from(value));
39+
VPackSerializers.DATE.serialize(builder, attribute, Date.from(value), context);
3940
};
4041
public static VPackSerializer<LocalDate> LOCAL_DATE = (builder, attribute, value, context) -> {
41-
builder.add(attribute, Date.from(value.atStartOfDay(ZoneId.systemDefault()).toInstant()));
42+
INSTANT.serialize(builder, attribute, value.atStartOfDay(ZoneId.systemDefault()).toInstant(), context);
4243
};
4344
public static VPackSerializer<LocalDateTime> LOCAL_DATE_TIME = (builder, attribute, value, context) -> {
44-
builder.add(attribute, Date.from(value.atZone(ZoneId.systemDefault()).toInstant()));
45+
INSTANT.serialize(builder, attribute, value.atZone(ZoneId.systemDefault()).toInstant(), context);
4546
};
4647

4748
}

src/test/java/com/arangodb/velocypack/VPackSerializeDeserializeTest.java

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import static org.hamcrest.Matchers.notNullValue;
2525
import static org.junit.Assert.assertThat;
2626

27+
import java.text.DateFormat;
28+
import java.text.SimpleDateFormat;
2729
import java.time.Instant;
2830
import java.time.LocalDate;
2931
import java.time.LocalDateTime;
@@ -40,6 +42,8 @@
4042
*/
4143
public class VPackSerializeDeserializeTest {
4244

45+
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");// ISO 8601
46+
4347
protected static class TestEntityDate {
4448
private Instant instant;
4549
private LocalDate localDate;
@@ -90,12 +94,12 @@ public void serializeDate() {
9094
final VPackSlice vpack = builder.build().serialize(new TestEntityDate(1474988621));
9195
assertThat(vpack, is(notNullValue()));
9296
assertThat(vpack.isObject(), is(true));
93-
assertThat(vpack.get("instant").isDate(), is(true));
94-
assertThat(vpack.get("instant").getAsDate(), is(new Date(1474988621)));
95-
assertThat(vpack.get("localDate").isDate(), is(true));
96-
assertThat(vpack.get("localDate").getAsDate(), is(new Date(70, 0, 18)));
97-
assertThat(vpack.get("localDateTime").isDate(), is(true));
98-
assertThat(vpack.get("localDateTime").getAsDate(), is(new Date(1474988621)));
97+
assertThat(vpack.get("instant").isString(), is(true));
98+
assertThat(vpack.get("instant").getAsString(), is(DATE_FORMAT.format(new Date(1474988621))));
99+
assertThat(vpack.get("localDate").isString(), is(true));
100+
assertThat(vpack.get("localDate").getAsString(), is(DATE_FORMAT.format(new Date(70, 0, 18))));
101+
assertThat(vpack.get("localDateTime").isString(), is(true));
102+
assertThat(vpack.get("localDateTime").getAsString(), is(DATE_FORMAT.format(new Date(1474988621))));
99103
}
100104

101105
@SuppressWarnings("deprecation")
@@ -118,6 +122,26 @@ public void deserializeDate() {
118122
is(LocalDateTime.ofInstant(Instant.ofEpochMilli(1475062216), ZoneId.systemDefault())));
119123
}
120124

125+
@SuppressWarnings("deprecation")
126+
@Test
127+
public void deserializeDateFromString() {
128+
final VPackBuilder builder = new VPackBuilder();
129+
builder.add(ValueType.OBJECT);
130+
builder.add("instant", DATE_FORMAT.format(new Date(1475062216)));
131+
builder.add("localDate", DATE_FORMAT.format(new Date(70, 0, 18)));
132+
builder.add("localDateTime", DATE_FORMAT.format(new Date(1475062216)));
133+
builder.close();
134+
135+
final VPack.Builder vpackBuilder = new VPack.Builder();
136+
VPackConfigureAsync.configure(vpackBuilder);
137+
final TestEntityDate entity = vpackBuilder.build().deserialize(builder.slice(), TestEntityDate.class);
138+
assertThat(entity, is(notNullValue()));
139+
assertThat(entity.instant, is(Instant.ofEpochMilli(1475062216)));
140+
assertThat(entity.localDate, is(Instant.ofEpochMilli(1475062216).atZone(ZoneId.systemDefault()).toLocalDate()));
141+
assertThat(entity.localDateTime,
142+
is(LocalDateTime.ofInstant(Instant.ofEpochMilli(1475062216), ZoneId.systemDefault())));
143+
}
144+
121145
@Test
122146
public void date() {
123147
final VPack.Builder builder = new VPack.Builder();

0 commit comments

Comments
 (0)