Bidirectional msgpack wire protocol with unpack support

This commit is contained in:
Ian Gulliver
2026-04-03 17:32:14 +09:00
parent d06d8b595e
commit 302f7fdb6a
8 changed files with 202 additions and 50 deletions

View File

@@ -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