You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
1.7 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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