adjust nbt encoding api
This commit is contained in:
@ -10,21 +10,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
func Marshal(w io.Writer, v interface{}, optionalTagName ...string) error {
|
||||||
ErrMustBeStruct = errors.New("a compound can only be a struct")
|
return NewEncoder(w).Encode(v, optionalTagName...)
|
||||||
)
|
|
||||||
|
|
||||||
func Marshal(w io.Writer, v interface{}) error {
|
|
||||||
return NewEncoder(w).Encode(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
func MarshalCompound(w io.Writer, v interface{}, rootTagName string) error {
|
|
||||||
enc := NewEncoder(w)
|
|
||||||
val := reflect.ValueOf(v)
|
|
||||||
if val.Kind() != reflect.Struct {
|
|
||||||
return ErrMustBeStruct
|
|
||||||
}
|
|
||||||
return enc.marshal(val, TagCompound, rootTagName)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type Encoder struct {
|
type Encoder struct {
|
||||||
@ -35,9 +22,13 @@ func NewEncoder(w io.Writer) *Encoder {
|
|||||||
return &Encoder{w: w}
|
return &Encoder{w: w}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Encoder) Encode(v interface{}) error {
|
func (e *Encoder) Encode(v interface{}, optionalTagName ...string) error {
|
||||||
val := reflect.ValueOf(v)
|
val := reflect.ValueOf(v)
|
||||||
return e.marshal(val, getTagType(val.Type()), "")
|
var tagName string
|
||||||
|
if len(optionalTagName) > 0 {
|
||||||
|
tagName = optionalTagName[0]
|
||||||
|
}
|
||||||
|
return e.marshal(val, getTagType(val.Type()), tagName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Encoder) marshal(val reflect.Value, tagType byte, tagName string) error {
|
func (e *Encoder) marshal(val reflect.Value, tagType byte, tagName string) error {
|
||||||
|
@ -172,7 +172,7 @@ func TestMarshal_StructArray(t *testing.T) {
|
|||||||
|
|
||||||
func TestMarshal_bigTest(t *testing.T) {
|
func TestMarshal_bigTest(t *testing.T) {
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
err := MarshalCompound(&b, MakeBigTestStruct(), "Level")
|
err := Marshal(&b, MakeBigTestStruct(), "Level")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user