package rpc import ( "io" "gopkg.in/vmihailenco/msgpack.v4" ) // UnmarshalMsgpack deserializes messagepack into a RPC message func (m *Msg) UnmarshalMsgpack(data []byte) error { return m.unmarshalGeneric(data, msgpack.Unmarshal) } // MarshalMsgpack serializes a RPC message into messagepack func (m *Msg) MarshalMsgpack() ([]byte, error) { msg := &msgMeta{msgAlias: (*msgAlias)(m)} msg.MarshalPrepare() d, err := msgpack.Marshal(msg) if err == nil { m.rawBytes = d } return d, err } // Encoder for DI-Net RPC MessagePack messages type Encoder struct { w *msgpack.Encoder } // NewEncoder creates a new DI-Net RPC MessagePack encoder func NewEncoder(w io.Writer) *Encoder { return &Encoder{w: msgpack.NewEncoder(w)} } // Encode writes a DI-Net RPC message func (enc *Encoder) Encode(m *Msg) error { msg := &msgMeta{msgAlias: (*msgAlias)(m)} msg.MarshalPrepare() return enc.w.Encode(msg) }