You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by jo...@apache.org on 2018/12/18 10:44:09 UTC
[tinkerpop] branch TINKERPOP-1942 updated: Use a consistent
behavior for TypeSerializerRegistry and document it
This is an automated email from the ASF dual-hosted git repository.
jorgebg pushed a commit to branch TINKERPOP-1942
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/TINKERPOP-1942 by this push:
new 3b35601 Use a consistent behavior for TypeSerializerRegistry and document it
3b35601 is described below
commit 3b35601bad43ceeb0a6e5d5c2e857132a6dc2315
Author: Jorge Bay Gondra <jo...@gmail.com>
AuthorDate: Tue Dec 18 11:44:06 2018 +0100
Use a consistent behavior for TypeSerializerRegistry and document it
---
.../driver/ser/binary/TypeSerializerRegistry.java | 153 ++++++++++++---------
.../ser/binary/TypeSerializerRegistryTest.java | 105 ++++++++++++++
.../driver/ser/binary/types/sample/SamplePair.java | 55 --------
.../binary/types/sample/SamplePairSerializer.java | 82 -----------
.../ser/binary/types/sample/SamplePairTests.java | 29 ----
5 files changed, 191 insertions(+), 233 deletions(-)
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistry.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistry.java
index cc8b42a..c29902c 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistry.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistry.java
@@ -71,6 +71,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
@@ -80,82 +81,93 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
public class TypeSerializerRegistry {
- public static final TypeSerializerRegistry INSTANCE = build().create();
public static Builder build() {
return new Builder();
}
+ private static final RegistryEntry[] defaultEntries = new RegistryEntry[] {
+ new RegistryEntry<>(Integer.class, SingleTypeSerializer.IntSerializer),
+ new RegistryEntry<>(Long.class, SingleTypeSerializer.LongSerializer),
+ new RegistryEntry<>(String.class, new StringSerializer()),
+ new RegistryEntry<>(Date.class, DateSerializer.DateSerializer),
+ new RegistryEntry<>(Timestamp.class, DateSerializer.TimestampSerializer),
+ new RegistryEntry<>(Class.class, new ClassSerializer()),
+ new RegistryEntry<>(Double.class, SingleTypeSerializer.DoubleSerializer),
+ new RegistryEntry<>(Float.class, SingleTypeSerializer.FloatSerializer),
+ new RegistryEntry<>(List.class, new ListSerializer()),
+ new RegistryEntry<>(Map.class, new MapSerializer()),
+ new RegistryEntry<>(Set.class, new SetSerializer()),
+ new RegistryEntry<>(UUID.class, new UUIDSerializer()),
+ new RegistryEntry<>(Edge.class, new EdgeSerializer()),
+ new RegistryEntry<>(Path.class, new PathSerializer()),
+ new RegistryEntry<>(VertexProperty.class, new VertexPropertySerializer()), // needs to register before the less specific Property
+ new RegistryEntry<>(Property.class, new PropertySerializer()),
+ new RegistryEntry<>(Graph.class, new GraphSerializer()),
+ new RegistryEntry<>(Vertex.class, new VertexSerializer()),
+ new RegistryEntry<>(SackFunctions.Barrier.class, EnumSerializer.BarrierSerializer),
+ new RegistryEntry<>(Bytecode.Binding.class, new BindingSerializer()),
+ new RegistryEntry<>(Bytecode.class, new ByteCodeSerializer()),
+ new RegistryEntry<>(VertexProperty.Cardinality.class, EnumSerializer.CardinalitySerializer),
+ new RegistryEntry<>(Column.class, EnumSerializer.ColumnSerializer),
+ new RegistryEntry<>(Direction.class, EnumSerializer.DirectionSerializer),
+ new RegistryEntry<>(Operator.class, EnumSerializer.OperatorSerializer),
+ new RegistryEntry<>(Order.class, EnumSerializer.OrderSerializer),
+ new RegistryEntry<>(TraversalOptionParent.Pick.class, EnumSerializer.PickSerializer),
+ new RegistryEntry<>(Pop.class, EnumSerializer.PopSerializer),
+ new RegistryEntry<>(Lambda.class, new LambdaSerializer()),
+ new RegistryEntry<>(P.class, new PSerializer<>(DataType.P, P.class)),
+ new RegistryEntry<>(AndP.class, new PSerializer<>(DataType.P, AndP.class)),
+ new RegistryEntry<>(OrP.class, new PSerializer<>(DataType.P, OrP.class)),
+ new RegistryEntry<>(TextP.class, new PSerializer<>(DataType.TEXTP, TextP.class)),
+ new RegistryEntry<>(Scope.class, EnumSerializer.ScopeSerializer),
+ new RegistryEntry<>(T.class, EnumSerializer.TSerializer),
+ new RegistryEntry<>(Traverser.class, new TraverserSerializer()),
+ new RegistryEntry<>(BigDecimal.class, new BigDecimalSerializer()),
+ new RegistryEntry<>(BigInteger.class, new BigIntegerSerializer()),
+ new RegistryEntry<>(Byte.class, SingleTypeSerializer.ByteSerializer),
+ new RegistryEntry<>(ByteBuffer.class, new ByteBufferSerializer()),
+ new RegistryEntry<>(Short.class, SingleTypeSerializer.ShortSerializer),
+ new RegistryEntry<>(Boolean.class, SingleTypeSerializer.BooleanSerializer),
+ new RegistryEntry<>(TraversalStrategy.class, new TraversalStrategySerializer()),
+ new RegistryEntry<>(BulkSet.class, new BulkSetSerializer()),
+ new RegistryEntry<>(Tree.class, new TreeSerializer()),
+
+ // MapEntrySerializer is a TransformSerializer implementation
+ new RegistryEntry<>(Map.Entry.class, new MapEntrySerializer()),
+
+ new RegistryEntry<>(Character.class, new CharSerializer()),
+ new RegistryEntry<>(Duration.class, new DurationSerializer()),
+ new RegistryEntry<>(InetAddress.class, new InetAddressSerializer()),
+ new RegistryEntry<>(Inet4Address.class, new InetAddressSerializer<>()),
+ new RegistryEntry<>(Inet6Address.class, new InetAddressSerializer<>()),
+ new RegistryEntry<>(Instant.class, new InstantSerializer()),
+ new RegistryEntry<>(LocalDate.class, new LocalDateSerializer()),
+ new RegistryEntry<>(LocalTime.class, new LocalTimeSerializer()),
+ new RegistryEntry<>(LocalDateTime.class, new LocalDateTimeSerializer()),
+ new RegistryEntry<>(MonthDay.class, new MonthDaySerializer()),
+ new RegistryEntry<>(OffsetDateTime.class, new OffsetDateTimeSerializer()),
+ new RegistryEntry<>(OffsetTime.class, new OffsetTimeSerializer()),
+ new RegistryEntry<>(Period.class, new PeriodSerializer()),
+ new RegistryEntry<>(Year.class, SingleTypeSerializer.YearSerializer),
+ new RegistryEntry<>(YearMonth.class, new YearMonthSerializer()),
+ new RegistryEntry<>(ZonedDateTime.class, new ZonedDateTimeSerializer()),
+ new RegistryEntry<>(ZoneOffset.class, new ZoneOffsetSerializer()) };
+
+ public static final TypeSerializerRegistry INSTANCE = build().create();
+
public static class Builder {
- private final List<RegistryEntry> list = new LinkedList<>(Arrays.<RegistryEntry>asList(
- new RegistryEntry<>(Integer.class, SingleTypeSerializer.IntSerializer),
- new RegistryEntry<>(Long.class, SingleTypeSerializer.LongSerializer),
- new RegistryEntry<>(String.class, new StringSerializer()),
- new RegistryEntry<>(Date.class, DateSerializer.DateSerializer),
- new RegistryEntry<>(Timestamp.class, DateSerializer.TimestampSerializer),
- new RegistryEntry<>(Class.class, new ClassSerializer()),
- new RegistryEntry<>(Double.class, SingleTypeSerializer.DoubleSerializer),
- new RegistryEntry<>(Float.class, SingleTypeSerializer.FloatSerializer),
- new RegistryEntry<>(List.class, new ListSerializer()),
- new RegistryEntry<>(Map.class, new MapSerializer()),
- new RegistryEntry<>(Set.class, new SetSerializer()),
- new RegistryEntry<>(UUID.class, new UUIDSerializer()),
- new RegistryEntry<>(Edge.class, new EdgeSerializer()),
- new RegistryEntry<>(Path.class, new PathSerializer()),
- new RegistryEntry<>(VertexProperty.class, new VertexPropertySerializer()), // needs to register before the less specific Property
- new RegistryEntry<>(Property.class, new PropertySerializer()),
- new RegistryEntry<>(Graph.class, new GraphSerializer()),
- new RegistryEntry<>(Vertex.class, new VertexSerializer()),
- new RegistryEntry<>(SackFunctions.Barrier.class, EnumSerializer.BarrierSerializer),
- new RegistryEntry<>(Bytecode.Binding.class, new BindingSerializer()),
- new RegistryEntry<>(Bytecode.class, new ByteCodeSerializer()),
- new RegistryEntry<>(VertexProperty.Cardinality.class, EnumSerializer.CardinalitySerializer),
- new RegistryEntry<>(Column.class, EnumSerializer.ColumnSerializer),
- new RegistryEntry<>(Direction.class, EnumSerializer.DirectionSerializer),
- new RegistryEntry<>(Operator.class, EnumSerializer.OperatorSerializer),
- new RegistryEntry<>(Order.class, EnumSerializer.OrderSerializer),
- new RegistryEntry<>(TraversalOptionParent.Pick.class, EnumSerializer.PickSerializer),
- new RegistryEntry<>(Pop.class, EnumSerializer.PopSerializer),
- new RegistryEntry<>(Lambda.class, new LambdaSerializer()),
- new RegistryEntry<>(P.class, new PSerializer<>(DataType.P, P.class)),
- new RegistryEntry<>(AndP.class, new PSerializer<>(DataType.P, AndP.class)),
- new RegistryEntry<>(OrP.class, new PSerializer<>(DataType.P, OrP.class)),
- new RegistryEntry<>(TextP.class, new PSerializer<>(DataType.TEXTP, TextP.class)),
- new RegistryEntry<>(Scope.class, EnumSerializer.ScopeSerializer),
- new RegistryEntry<>(T.class, EnumSerializer.TSerializer),
- new RegistryEntry<>(Traverser.class, new TraverserSerializer()),
- new RegistryEntry<>(BigDecimal.class, new BigDecimalSerializer()),
- new RegistryEntry<>(BigInteger.class, new BigIntegerSerializer()),
- new RegistryEntry<>(Byte.class, SingleTypeSerializer.ByteSerializer),
- new RegistryEntry<>(ByteBuffer.class, new ByteBufferSerializer()),
- new RegistryEntry<>(Short.class, SingleTypeSerializer.ShortSerializer),
- new RegistryEntry<>(Boolean.class, SingleTypeSerializer.BooleanSerializer),
- new RegistryEntry<>(TraversalStrategy.class, new TraversalStrategySerializer()),
- new RegistryEntry<>(BulkSet.class, new BulkSetSerializer()),
- new RegistryEntry<>(Tree.class, new TreeSerializer()),
-
- new RegistryEntry<>(Map.Entry.class, new MapEntrySerializer()),
-
- new RegistryEntry<>(Character.class, new CharSerializer()),
- new RegistryEntry<>(Duration.class, new DurationSerializer()),
- new RegistryEntry<>(InetAddress.class, new InetAddressSerializer()),
- new RegistryEntry<>(Inet4Address.class, new InetAddressSerializer<>()),
- new RegistryEntry<>(Inet6Address.class, new InetAddressSerializer<>()),
- new RegistryEntry<>(Instant.class, new InstantSerializer()),
- new RegistryEntry<>(LocalDate.class, new LocalDateSerializer()),
- new RegistryEntry<>(LocalTime.class, new LocalTimeSerializer()),
- new RegistryEntry<>(LocalDateTime.class, new LocalDateTimeSerializer()),
- new RegistryEntry<>(MonthDay.class, new MonthDaySerializer()),
- new RegistryEntry<>(OffsetDateTime.class, new OffsetDateTimeSerializer()),
- new RegistryEntry<>(OffsetTime.class, new OffsetTimeSerializer()),
- new RegistryEntry<>(Period.class, new PeriodSerializer()),
- new RegistryEntry<>(Year.class, SingleTypeSerializer.YearSerializer),
- new RegistryEntry<>(YearMonth.class, new YearMonthSerializer()),
- new RegistryEntry<>(ZonedDateTime.class, new ZonedDateTimeSerializer()),
- new RegistryEntry<>(ZoneOffset.class, new ZoneOffsetSerializer())));
+ private final List<RegistryEntry> list = new LinkedList<>();
/**
* Adds a serializer for a built-in type.
+ * <p>
+ * Note that when providing a serializer for an Interface ({@link VertexProperty}, {@link Property},
+ * {@link Vertex}, ...), the serializer resolution from the registry will be defined by the order that
+ * it was provided. In this case, you should provide the type serializer starting from most specific to
+ * less specific or to put it in other words, start from derived types and then parent types, e.g.,
+ * {@link VertexProperty} before {@link Property}.
+ * </p>
*/
public <DT> Builder add(final Class<DT> type, final TypeSerializer<DT> serializer) {
if (serializer.getDataType() == DataType.CUSTOM) {
@@ -246,9 +258,16 @@ public class TypeSerializerRegistry {
private final ConcurrentHashMap<Class<?>, TypeSerializer<?>> serializersByImplementation = new ConcurrentHashMap<>();
private TypeSerializerRegistry(final Collection<RegistryEntry> entries) {
+ final Set<Class> providedTypes = new HashSet<>(entries.size());
+
+ // Include user-provided entries first
for (RegistryEntry entry : entries) {
put(entry);
+ providedTypes.add(entry.type);
}
+
+ // Followed by the defaults
+ Arrays.stream(defaultEntries).filter(e -> !providedTypes.contains(e.type)).forEach(this::put);
}
private void put(final RegistryEntry entry) {
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistryTest.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistryTest.java
new file mode 100644
index 0000000..7f7ba77
--- /dev/null
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistryTest.java
@@ -0,0 +1,105 @@
+package org.apache.tinkerpop.gremlin.driver.ser.binary;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.junit.Test;
+
+import java.util.UUID;
+
+import static junit.framework.TestCase.assertSame;
+
+public class TypeSerializerRegistryTest {
+
+ @Test
+ public void shouldResolveToUserProvidedForInterfaces_1() throws SerializationException {
+ final TypeSerializer<VertexProperty> expected = new TestVertexPropertySerializer();
+ final TypeSerializerRegistry registry = TypeSerializerRegistry.build()
+ .add(VertexProperty.class, expected).create();
+
+ assertSame(expected, registry.getSerializer(VertexProperty.class));
+ assertSame(expected, registry.getSerializer(DataType.VERTEXPROPERTY));
+ }
+
+ @Test
+ public void shouldResolveToUserProvidedForInterfaces_2() throws SerializationException {
+ final TypeSerializer<Property> expected = new TestPropertySerializer();
+ final TypeSerializerRegistry registry = TypeSerializerRegistry.build()
+ .add(Property.class, expected).create();
+
+ assertSame(expected, registry.getSerializer(Property.class));
+ assertSame(expected, registry.getSerializer(DataType.PROPERTY));
+ }
+
+ @Test
+ public void shouldResolveToUserProvidedForClasses() throws SerializationException {
+ final TypeSerializer<UUID> expected = new TestUUIDSerializer();
+ final TypeSerializerRegistry registry = TypeSerializerRegistry.build()
+ .add(UUID.class, expected).create();
+
+ assertSame(expected, registry.getSerializer(UUID.class));
+ assertSame(expected, registry.getSerializer(DataType.UUID));
+ }
+
+ @Test
+ public void shouldResolveToTheFirstSerializerForInterfaces() throws SerializationException {
+ final TypeSerializer<VertexProperty> expectedForVertexProperty = new TestVertexPropertySerializer();
+ final TypeSerializer<Property> expectedForProperty = new TestPropertySerializer();
+ final TypeSerializerRegistry registry = TypeSerializerRegistry.build()
+ .add(VertexProperty.class, expectedForVertexProperty)
+ .add(Property.class, expectedForProperty).create();
+
+ assertSame(expectedForVertexProperty, registry.getSerializer(VertexProperty.class));
+ assertSame(expectedForProperty, registry.getSerializer(Property.class));
+ assertSame(expectedForVertexProperty, registry.getSerializer(DataType.VERTEXPROPERTY));
+ assertSame(expectedForProperty, registry.getSerializer(DataType.PROPERTY));
+ }
+
+ private static class TestVertexPropertySerializer extends TestBaseTypeSerializer<VertexProperty> {
+
+ @Override
+ public DataType getDataType() {
+ return DataType.VERTEXPROPERTY;
+ }
+ }
+
+ private static class TestPropertySerializer extends TestBaseTypeSerializer<Property> {
+
+ @Override
+ public DataType getDataType() {
+ return DataType.PROPERTY;
+ }
+ }
+
+ private static class TestUUIDSerializer extends TestBaseTypeSerializer<UUID> {
+
+ @Override
+ public DataType getDataType() {
+ return DataType.UUID;
+ }
+ }
+
+ private static abstract class TestBaseTypeSerializer<T> implements TypeSerializer<T> {
+ @Override
+ public T read(ByteBuf buffer, GraphBinaryReader context) {
+ return null;
+ }
+
+ @Override
+ public T readValue(ByteBuf buffer, GraphBinaryReader context, boolean nullable) {
+ return null;
+ }
+
+ @Override
+ public ByteBuf write(T value, ByteBufAllocator allocator, GraphBinaryWriter context) {
+ return null;
+ }
+
+ @Override
+ public ByteBuf writeValue(T value, ByteBufAllocator allocator, GraphBinaryWriter context, boolean nullable) {
+ return null;
+ }
+ }
+}
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePair.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePair.java
deleted file mode 100644
index dfbaea9..0000000
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePair.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types.sample;
-
-import java.util.Collection;
-
-/**
- * A sample custom data type, trying to demonstrate the possibility to have arbitrary complex types and null
- * values without loosing type information.
- */
-class SamplePair<K, V> {
- private final K key;
- private final V value;
- private final Info info;
-
- class Info {
- private final Class<?> keyType;
- private final Collection<Class<?>> keySubTypes;
-
- Info(Class<?> keyType, Collection<Class<?>> keySubTypes) {
- this.keyType = keyType;
- this.keySubTypes = keySubTypes;
- }
- }
-
- SamplePair(final K key, final V value, final SamplePair.Info info) {
- this.key = key;
- this.value = value;
- this.info = info;
- }
-
- public K getKey() {
- return key;
- }
-
- public V getValue() {
- return value;
- }
-}
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePairSerializer.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePairSerializer.java
deleted file mode 100644
index bbd5e01..0000000
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePairSerializer.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types.sample;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.Unpooled;
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.types.CustomTypeSerializer;
-
-import java.nio.charset.StandardCharsets;
-
-class SamplePairSerializer implements CustomTypeSerializer<SamplePair> {
-
- @Override
- public DataType getDataType() {
- return DataType.CUSTOM;
- }
-
- @Override
- public String getTypeName() {
- return "sampleProvider.SamplePair";
- }
-
- @Override
- public SamplePair read(final ByteBuf buffer, final GraphBinaryReader context) {
- return null;
- }
-
- @Override
- public SamplePair readValue(final ByteBuf buffer, final GraphBinaryReader context, final boolean nullable) throws SerializationException {
- throw new SerializationException("SamplePairSerializer can't read the value without type information");
- }
-
- @Override
- public ByteBuf write(final SamplePair value, final ByteBufAllocator allocator, final GraphBinaryWriter context) {
-
- final ByteBuf valueBuffer = null;
-
- return allocator.compositeBuffer(3).addComponents(true,
- // No custom type info
- // Value flag
- valueBuffer
- );
- }
-
- public ByteBuf writeNull(final ByteBufAllocator allocator, final Object information, final GraphBinaryWriter context) {
- SamplePair.Info info = (SamplePair.Info) information;
- // Write type code: "CUSTOM"
- // Write Type info: "SAMPLEPAIR"
- // value flag null
- // 2 fully qualified null values.
-
- // TODO: How do we get the target serializer / type?
- //context.writeFullyQualifiedNull(DataType.CUSTOM, )
- return null;
- }
-
- @Override
- public ByteBuf writeValue(final SamplePair value, final ByteBufAllocator allocator, final GraphBinaryWriter context, final boolean nullable) throws SerializationException {
- throw new SerializationException("SamplePairSerializer can't write the value without type information");
- }
-}
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePairTests.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePairTests.java
deleted file mode 100644
index 71c9789..0000000
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePairTests.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types.sample;
-
-import org.junit.Test;
-
-public class SamplePairTests {
-
- @Test
- public void tempTest() {
-
- }
-}