|
|
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)
|
|
|
}
|
|
|
|