Initial v2 version, better testing, updates
Some checks failed
continuous-integration/drone Build is failing

This commit is contained in:
2023-02-04 20:22:41 -05:00
parent 68bbfbacd0
commit 41d0ef3d97
27 changed files with 1094 additions and 681 deletions

32
encoder/binary.go Normal file
View File

@ -0,0 +1,32 @@
package encoder
func EncodeValue(encoder Encoder, val any) ([]byte, error) {
var v []byte
if b, ok := val.([]byte); ok {
v = b
} else if s, ok := val.(string); ok {
b = []byte(s)
} else {
return encoder.Marshal(val)
}
return v, nil
}
func DecodeValue(encoder Encoder, b []byte, v any) error {
switch v := v.(type) {
case *[]byte:
if v != nil {
*v = b
return nil
}
case *string:
if v != nil {
*v = string(b)
return nil
}
}
return encoder.Unmarshal(b, v)
}

66
encoder/encoding.go Normal file
View File

@ -0,0 +1,66 @@
package encoder
import (
"encoding/json"
"encoding/xml"
"github.com/vmihailenco/msgpack/v4"
)
var (
XML xmlEncoder
JSON jsonEncoder
MsgPack msgPackEncoder
)
func EncoderFrom(name string) Encoder {
var enc Encoder
switch name {
case "json":
enc = JSON
case "xml":
enc = XML
default: // Default is also msgpack
enc = MsgPack
}
return enc
}
type Encoder interface {
Unmarshal(b []byte, dest any) error
Marshal(value any) ([]byte, error)
}
type jsonEncoder struct {
}
func (j jsonEncoder) Marshal(value any) ([]byte, error) {
return json.Marshal(value)
}
func (j jsonEncoder) Unmarshal(b []byte, dest any) error {
return json.Unmarshal(b, dest)
}
type msgPackEncoder struct {
}
func (m msgPackEncoder) Marshal(value any) ([]byte, error) {
return msgpack.Marshal(value)
}
func (m msgPackEncoder) Unmarshal(b []byte, dest any) error {
return msgpack.Unmarshal(b, dest)
}
type xmlEncoder struct {
}
func (x xmlEncoder) Marshal(value any) ([]byte, error) {
return xml.Marshal(value)
}
func (x xmlEncoder) Unmarshal(b []byte, dest any) error {
return xml.Unmarshal(b, dest)
}