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  }