Initial v2 version, better testing, updates
Some checks failed
continuous-integration/drone Build is failing
Some checks failed
continuous-integration/drone Build is failing
This commit is contained in:
32
encoder/binary.go
Normal file
32
encoder/binary.go
Normal 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
66
encoder/encoding.go
Normal 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)
|
||||
}
|
Reference in New Issue
Block a user