feat: add serialize package
This commit is contained in:
parent
c2ed126ab8
commit
bebea5a7e1
|
@ -0,0 +1,50 @@
|
|||
package serialize
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"git.lumeweb.com/LumeWeb/libs5-go/types"
|
||||
"github.com/vmihailenco/msgpack/v5"
|
||||
)
|
||||
|
||||
/*
|
||||
func NewSerializer(kind types.MetadataType) *Packer {
|
||||
p := NewPacker()
|
||||
_ = p.PackUint8(types.MetadataMagicByte)
|
||||
_ = p.PackUint8(uint8(types.MetadataTypeDirectory))
|
||||
return p
|
||||
}
|
||||
*/
|
||||
func InitMarshaller(kind types.MetadataType, enc *msgpack.Encoder) error {
|
||||
err := enc.EncodeUint8(types.MetadataMagicByte)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = enc.EncodeUint8(uint8(kind))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func InitUnmarshaller(kind types.MetadataType, enc *msgpack.Decoder) error {
|
||||
val, err := enc.DecodeUint8()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if val != types.MetadataMagicByte {
|
||||
return errors.New("Invalid magic byte")
|
||||
}
|
||||
|
||||
val, err = enc.DecodeUint8()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if val != uint8(kind) {
|
||||
return errors.New("Invalid metadata type")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package serialize
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"github.com/multiformats/go-multibase"
|
||||
)
|
||||
|
||||
func UnmarshalBase64UrlJSON(data []byte) ([]byte, error) {
|
||||
strData := string(data)
|
||||
if len(strData) >= 2 && strData[0] == '"' && strData[len(strData)-1] == '"' {
|
||||
strData = strData[1 : len(strData)-1]
|
||||
}
|
||||
|
||||
if strData == "null" {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
if strData[0] == 'u' {
|
||||
_, decoded, err := multibase.Decode(strData)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return decoded, nil
|
||||
}
|
||||
|
||||
decodedData, err := base64.RawURLEncoding.DecodeString(strData)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return decodedData, nil
|
||||
}
|
Loading…
Reference in New Issue