summaryrefslogtreecommitdiff
path: root/internal/packet/encoders.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/packet/encoders.go')
-rw-r--r--internal/packet/encoders.go52
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