44 lines
913 B
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)
|
|
}
|