ipld-eth-server/vendor/github.com/multiformats/go-multicodec/base/hex/codec.go

70 lines
1.1 KiB
Go

package bin
import (
"encoding/hex"
"io"
mc "github.com/multiformats/go-multicodec"
base "github.com/multiformats/go-multicodec/base"
)
var (
HeaderPath = "/base16/"
Header = mc.Header([]byte(HeaderPath))
multic = mc.NewMulticodecFromCodec(Codec(), Header)
)
type codec struct{}
type decoder struct {
r io.Reader
}
func (d decoder) Decode(v interface{}) error {
out, ok := v.([]byte)
if !ok {
return base.ErrExpectedByteSlice
}
buf := make([]byte, hex.EncodedLen(len(out)))
_, err := d.r.Read(buf)
if err != nil {
return err
}
_, err = hex.Decode(out, buf)
return err
}
func (codec) Decoder(r io.Reader) mc.Decoder {
return decoder{r}
}
type encoder struct {
w io.Writer
}
func (e encoder) Encode(v interface{}) error {
slice, ok := v.([]byte)
if !ok {
return base.ErrExpectedByteSlice
}
buf := make([]byte, hex.EncodedLen(len(slice)))
hex.Encode(buf, slice)
_, err := e.w.Write(buf)
return err
}
func (codec) Encoder(w io.Writer) mc.Encoder {
return encoder{w}
}
func Codec() mc.Codec {
return codec{}
}
func Multicodec() mc.Multicodec {
return multic
}