diff options
| author | Kyren223 <ulmliad223@gmail.com> | 2024-10-15 15:45:01 +0300 |
|---|---|---|
| committer | Kyren223 <ulmliad223@gmail.com> | 2024-10-15 15:45:01 +0300 |
| commit | 77dca0e1dfd609851a4c80ebb769b21838ec7093 (patch) | |
| tree | e82b8192b8608511228306254392bda34f354324 /internal/packet/encoders.go | |
| parent | 4fb7081ef3890d80b049fb721214622b9ea2d88d (diff) | |
feat: add message types and packet framer
Diffstat (limited to 'internal/packet/encoders.go')
| -rw-r--r-- | internal/packet/encoders.go | 52 |
1 files changed, 52 insertions, 0 deletions
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 |
