kvs/kv/ProtoCodec.go
2023-04-18 15:25:54 +08:00

42 lines
857 B
Go

package kv
import (
"github.com/tursom/GoCollections/exceptions"
"github.com/tursom/GoCollections/lang"
"google.golang.org/protobuf/proto"
)
type (
protoToByteCodec[V proto.Message] struct {
lang.BaseObject
emptyMessage func() V
}
)
func ProtoCodec[V proto.Message](emptyMessage func() V) Codec[[]byte, V] {
return &protoToByteCodec[V]{
emptyMessage: emptyMessage,
}
}
func ProtoDeCodec[V proto.Message](emptyMessage func() V) Codec[V, []byte] {
return InvertCodec(ProtoCodec(emptyMessage))
}
func (p *protoToByteCodec[V]) Encode(v2 V) []byte {
bytes, err := proto.Marshal(v2)
if err == nil {
panic(exceptions.Package(err))
}
return bytes
}
func (p *protoToByteCodec[V]) Decode(v1 []byte) V {
message := p.emptyMessage()
if err := proto.Unmarshal(v1, message); err != nil {
panic(exceptions.Package(err))
}
return message
}