xiazcy commented on code in PR #3335:
URL: https://github.com/apache/tinkerpop/pull/3335#discussion_r2983047226
##########
gremlin-go/driver/graphBinary.go:
##########
@@ -681,7 +681,52 @@ func bindingWriter(value interface{}, buffer
*bytes.Buffer, typeSerializer *grap
return buffer.Bytes(), nil
}
+// customTypeWriter handles serialization of custom types registered via
RegisterCustomTypeWriter.
+// Format: {type_code}{type_info}{value_flag}{value}
+// where type_code=0x00 (customType), type_info is the custom type name
length+bytes,
+// value_flag=0x00 (not null), and value is the custom-serialized data.
+func customTypeWriter(value interface{}, buffer *bytes.Buffer, typeSerializer
*graphBinaryTypeSerializer) ([]byte, error) {
+ // Look up the custom type info
+ valType := reflect.TypeOf(value)
+ customTypeWriterLock.RLock()
+ typeInfo, exists := customSerializers[valType]
+ customTypeWriterLock.RUnlock()
+
+ if !exists || customSerializers == nil {
+ return nil,
newError(err0407GetSerializerToWriteUnknownTypeError, valType.Name())
+ }
+
+ // Write the custom type name as a String (length prefix + UTF-8 bytes)
+ typeName := typeInfo.TypeName
+ typeNameBytes := []byte(typeName)
+ if err := binary.Write(buffer, binary.BigEndian,
int32(len(typeNameBytes))); err != nil {
+ return nil, err
+ }
+ if _, err := buffer.Write(typeNameBytes); err != nil {
+ return nil, err
+ }
+
Review Comment:
That makes sense. Thanks for the quick response!
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]