util: allow to marshal Uint160 in YAML
Signed-off-by: Evgeniy Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
9224f57323
commit
c212b2be95
2 changed files with 37 additions and 0 deletions
|
@ -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[:])
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue