Ejemplo n.º 1
0
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
}
Ejemplo n.º 2
0
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
}
Ejemplo n.º 3
0
// 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}
}