[ 
https://issues.apache.org/jira/browse/TINKERPOP-2802?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17748686#comment-17748686
 ] 

ASF GitHub Bot commented on TINKERPOP-2802:
-------------------------------------------

vkagamlyk commented on code in PR #2174:
URL: https://github.com/apache/tinkerpop/pull/2174#discussion_r1277785633


##########
gremlin-go/driver/graphBinary.go:
##########
@@ -1282,6 +1284,78 @@ func metricsReader(data *[]byte, i *int) (interface{}, 
error) {
        return metrics, nil
 }
 
+type JanusgraphRelationIdentifier struct {
+       OutVertexIdLong   int64
+       OutVertexIdString string
+       TypeId            int64
+       RelationId        int64
+       InVertexIdLong    int64
+       InVertexIdString  string
+}
+
+func janusgraphRelationIdentifierReader(data *[]byte, i *int) (interface{}, 
error) {
+       const (
+               relationIdentifierType uint32 = 0x1001
+               longMarker             byte   = 0
+               stringMarker           byte   = 1
+       )
+
+       r := new(JanusgraphRelationIdentifier)
+
+       // expect type code
+       customDataTyp := readUint32Safe(data, i)
+       if customDataTyp != relationIdentifierType {
+               return nil, 
newError(err0408GetSerializerToReadUnknownTypeError, customDataTyp)
+       }
+
+       // value flag, expect this to be non-nullable
+       if readByteSafe(data, i) != valueFlagNone {
+               return nil, newError(err0405ReadValueInvalidNullInputError)
+       }
+
+       // outvertexid
+       if readByteSafe(data, i) == longMarker {
+               r.OutVertexIdLong = readLongSafe(data, i)
+       } else {
+               vertexId, err := readString(data, i)
+               if err != nil {
+                       return nil, err
+               }
+               r.OutVertexIdString = vertexId.(string)
+       }
+
+       r.TypeId = readLongSafe(data, i)
+       r.RelationId = readLongSafe(data, i)
+
+       // invertexid
+       if readByteSafe(data, i) == longMarker {
+               r.InVertexIdLong = readLongSafe(data, i)
+       } else {
+               vertexId, err := readString(data, i)
+               if err != nil {
+                       return nil, err
+               }
+               r.InVertexIdString = vertexId.(string)
+       }
+
+       return r, nil
+}
+
+// {name}{type specific payload}
+func customTypeReader(data *[]byte, i *int) (interface{}, error) {
+       // type name
+       *i = *i - 1
+       customTypeName, err := readString(data, i)
+       if err != nil {
+               return nil, err
+       }
+       deserializer, ok := customDeserializers[customTypeName.(string)]

Review Comment:
   there is example of implementation of custom serializer for Java, looks like 
a good starting point
   
https://github.com/apache/tinkerpop/blob/master/gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/binary/types/sample/SamplePersonSerializer.java





> Support Adding Custom Serializer for Gremlin Go
> -----------------------------------------------
>
>                 Key: TINKERPOP-2802
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2802
>             Project: TinkerPop
>          Issue Type: Improvement
>          Components: go
>    Affects Versions: 3.6.2
>            Reporter: Yang Xia
>            Priority: Major
>
> To enable mechanisms to add custom serializers in the Go driver, for 
> compatibility with database specific types outside of TinkerPop, such as the 
> JanusGraph RelationIdentifier. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to