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

27 lines
539 B
Go

package kv
import "github.com/tursom/GoCollections/lang"
type (
chainCodec[V1, V2, V3 any] struct {
lang.BaseObject
codec1 Codec[V2, V3]
codec2 Codec[V1, V2]
}
)
func ChainCodec[V1, V2, V3 any](codec1 Codec[V2, V3], codec2 Codec[V1, V2]) Codec[V1, V3] {
return &chainCodec[V1, V2, V3]{
codec1: codec1,
codec2: codec2,
}
}
func (c *chainCodec[V1, V2, V3]) Encode(v2 V3) V1 {
return c.codec2.Encode(c.codec1.Encode(v2))
}
func (c *chainCodec[V1, V2, V3]) Decode(v1 V1) V3 {
return c.codec1.Decode(c.codec2.Decode(v1))
}