util: allow to marshal Uint160 in YAML

Signed-off-by: Evgeniy Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
Evgeniy Stratonikov 2022-02-11 13:30:01 +03:00
parent 9224f57323
commit c212b2be95
2 changed files with 37 additions and 0 deletions

View file

@ -135,6 +135,25 @@ func (u Uint160) MarshalJSON() ([]byte, error) {
return []byte(`"0x` + u.StringLE() + `"`), nil
}
// UnmarshalYAML implements the YAML Unmarshaler interface.
func (u *Uint160) UnmarshalYAML(unmarshal func(interface{}) error) error {
var s string
err := unmarshal(&s)
if err != nil {
return err
}
s = strings.TrimPrefix(s, "0x")
*u, err = Uint160DecodeStringLE(s)
return err
}
// MarshalYAML implements the YAML marshaller interface.
func (u Uint160) MarshalYAML() (interface{}, error) {
return "0x" + u.StringLE(), nil
}
// EncodeBinary implements Serializable interface.
func (u *Uint160) EncodeBinary(bw *io.BinWriter) {
bw.WriteBytes(u[:])

View file

@ -8,6 +8,7 @@ import (
"github.com/nspcc-dev/neo-go/pkg/util"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gopkg.in/yaml.v2"
)
func TestUint160UnmarshalJSON(t *testing.T) {
@ -26,6 +27,23 @@ func TestUint160UnmarshalJSON(t *testing.T) {
assert.Error(t, u2.UnmarshalJSON([]byte(`123`)))
}
func TestUint160UnmarshalYAML(t *testing.T) {
str := "0263c1de100292813b5e075e585acc1bae963b2d"
expected, err := util.Uint160DecodeStringLE(str)
assert.NoError(t, err)
var u1, u2 util.Uint160
require.NoError(t, yaml.Unmarshal([]byte(`"`+str+`"`), &u1))
require.Equal(t, expected, u1)
data, err := yaml.Marshal(u1)
require.NoError(t, err)
require.NoError(t, yaml.Unmarshal(data, &u2))
require.Equal(t, expected, u2)
require.Error(t, yaml.Unmarshal([]byte(`[]`), &u1))
}
func TestUInt160DecodeString(t *testing.T) {
hexStr := "2d3b96ae1bcc5a585e075e3b81920210dec16302"
val, err := util.Uint160DecodeStringBE(hexStr)