src.dualinventive.com/go/dinet/rpc/msg_msgpack.go

44 lines
913 B
Go

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)
}