package codec import ( "encoding/json" codecpkg "github.com/noahlann/nnet/pkg/codec" ) // MessagePackCodec MessagePack编解码器 type MessagePackCodec struct { encoder MessagePackEncoder decoder MessagePackDecoder } // NewMessagePackCodec 创建MessagePack编解码器 func NewMessagePackCodec() codecpkg.Codec { return &MessagePackCodec{ encoder: &defaultMessagePackEncoder{}, decoder: &defaultMessagePackDecoder{}, } } // Encode 编码 func (c *MessagePackCodec) Encode(v interface{}) ([]byte, error) { return c.encoder.Encode(v) } // Decode 解码 func (c *MessagePackCodec) Decode(data []byte, v interface{}) error { return c.decoder.Decode(data, v) } // Name 获取编解码器名称 func (c *MessagePackCodec) Name() string { return "msgpack" } // MessagePackEncoder MessagePack编码器接口 type MessagePackEncoder interface { Encode(v interface{}) ([]byte, error) } // MessagePackDecoder MessagePack解码器接口 type MessagePackDecoder interface { Decode(data []byte, v interface{}) error } // defaultMessagePackEncoder 默认MessagePack编码器(使用JSON作为fallback) type defaultMessagePackEncoder struct{} func (e *defaultMessagePackEncoder) Encode(v interface{}) ([]byte, error) { // 如果没有安装msgpack库,使用JSON作为fallback // 在实际使用中,用户应该安装github.com/vmihailenco/msgpack/v5 // 这里提供一个简单的实现,使用JSON格式但标记为msgpack return json.Marshal(v) } // defaultMessagePackDecoder 默认MessagePack解码器(使用JSON作为fallback) type defaultMessagePackDecoder struct{} func (d *defaultMessagePackDecoder) Decode(data []byte, v interface{}) error { // 如果没有安装msgpack库,使用JSON作为fallback return json.Unmarshal(data, v) }