Bidirectional msgpack wire protocol with unpack support
This commit is contained in:
@@ -33,11 +33,20 @@ func RegisterExt(extID int8, value interface{}) {
|
||||
return v.Interface().(Marshaler).MarshalMsgpack()
|
||||
})
|
||||
} else {
|
||||
encTyp := typ
|
||||
if encTyp.Kind() == reflect.Ptr {
|
||||
encTyp = encTyp.Elem()
|
||||
}
|
||||
structEncoder := _getEncoder(encTyp)
|
||||
RegisterExtEncoder(extID, value, func(e *Encoder, v reflect.Value) ([]byte, error) {
|
||||
var buf bytes.Buffer
|
||||
enc := NewEncoder(&buf)
|
||||
enc.UseArrayEncodedStructs(true)
|
||||
if err := enc.Encode(v.Interface()); err != nil {
|
||||
val := v
|
||||
if val.Kind() == reflect.Ptr {
|
||||
val = val.Elem()
|
||||
}
|
||||
if err := structEncoder(enc, val); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return buf.Bytes(), nil
|
||||
|
||||
Reference in New Issue
Block a user