func (c *encoder) Encode(v interface{}) error { defer c.buf.Reset() w := c.w if c.c.mc { // if multicodec, write the header first if _, err := c.w.Write(c.c.Header()); err != nil { return err } } if c.c.msgio { w = msgio.NewWriter(w) } // recast to deal with map[interface{}]interface{} case vr, err := recast(v) if err != nil { return err } if err := c.enc.Encode(vr); err != nil { return err } _, err = io.Copy(w, c.buf) return err }
func (c *encoder) Encode(v interface{}) error { w := c.w if c.c.mc { // if multicodec, write the header first if _, err := c.w.Write(c.c.Header()); err != nil { return err } } if c.c.msgio { w = msgio.NewWriter(w) } pbv, ok := v.(proto.Message) if !ok { return ErrNotProtobuf } defer c.buf.Reset() if err := c.buf.Marshal(pbv); err != nil { return err } _, err := w.Write(c.buf.Bytes()) return err }
// NewETMWriter Encrypt-Then-MAC func NewETMWriter(w io.Writer, s cipher.Stream, mac HMAC) msgio.WriteCloser { return &etmWriter{msg: msgio.NewWriter(w), str: s, mac: mac, pool: bufPool} }