From 77dca0e1dfd609851a4c80ebb769b21838ec7093 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Tue, 15 Oct 2024 15:45:01 +0300 Subject: feat: add message types and packet framer --- internal/packet/encoders.go | 52 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 internal/packet/encoders.go (limited to 'internal/packet/encoders.go') diff --git a/internal/packet/encoders.go b/internal/packet/encoders.go new file mode 100644 index 0000000..0d190e9 --- /dev/null +++ b/internal/packet/encoders.go @@ -0,0 +1,52 @@ +package packet + +import ( + "bytes" + "encoding/json" + "io" + + "github.com/vmihailenco/msgpack/v5" +) + +type TypedMessage interface{ + Type() PacketType +} + +type defaultPacketEncoder struct { + io.Reader + encoding Encoding + packetType PacketType +} + +func (e defaultPacketEncoder) Encoding() Encoding { + return e.encoding +} + +func (e defaultPacketEncoder) Type() PacketType { + return e.packetType +} + +func NewJsonEncoder(message TypedMessage) (PacketEncoder, error) { + data, err := json.Marshal(message) + if err != nil { + return nil, err + } + + return defaultPacketEncoder{ + Reader: bytes.NewReader(data), + encoding: EncodingJson, + packetType: message.Type(), + }, nil +} + +func NewMsgPackEncoder(message TypedMessage) (PacketEncoder, error) { + data, err := msgpack.Marshal(message) + if err != nil { + return nil, err + } + + return defaultPacketEncoder{ + Reader: bytes.NewReader(data), + encoding: EncodingJson, + packetType: message.Type(), + }, nil -- cgit v1.3.1