github.com/zly-app/zapp@v1.3.3/pkg/serializer/msgpack.go (about) 1 package serializer 2 3 import ( 4 "io" 5 6 "github.com/vmihailenco/msgpack/v5" 7 ) 8 9 const MsgPackSerializerName = "msgpack" 10 11 // MsgPack序列化器 12 type msgPackSerializer struct{} 13 14 func (msgPackSerializer) Marshal(a interface{}, w io.Writer) error { 15 enc := msgpack.GetEncoder() 16 enc.SetCustomStructTag("json") // 如果没有 msgpack 标记, 使用 json 标记 17 enc.Reset(w) 18 err := enc.Encode(a) 19 msgpack.PutEncoder(enc) 20 return err 21 } 22 23 func (s msgPackSerializer) MarshalBytes(a interface{}) ([]byte, error) { 24 return msgpack.Marshal(a) 25 } 26 27 func (msgPackSerializer) Unmarshal(r io.Reader, a interface{}) error { 28 dec := msgpack.GetDecoder() 29 dec.SetCustomStructTag("json") // 如果没有 msgpack 标记, 使用 json 标记 30 dec.Reset(r) 31 err := dec.Decode(a) 32 msgpack.PutDecoder(dec) 33 return err 34 } 35 36 func (s msgPackSerializer) UnmarshalBytes(data []byte, a interface{}) error { 37 return msgpack.Unmarshal(data, a) 38 }