Skip to content

Commit

Permalink
Implement MarshalText for Hash, Signature
Browse files Browse the repository at this point in the history
  • Loading branch information
riptl committed Aug 13, 2022
1 parent 02d7072 commit d850995
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 3 deletions.
24 changes: 24 additions & 0 deletions nativetype_test.go
Expand Up @@ -30,6 +30,18 @@ func TestMustHashFromBase58(t *testing.T) {
})
}

func TestHash_UnmarshalText(t *testing.T) {
in := MustHashFromBase58("uoEAQCWCKjV9ecsBvngctJ7upNBZX7hpN4SfdR6TaUz")

out, err := in.MarshalText()
assert.NoError(t, err)

var ha Hash
err = ha.UnmarshalText(out)
assert.NoError(t, err)
assert.Equal(t, in, ha)
}

func TestHashFromBase58(t *testing.T) {
in := "uoEAQCWCKjV9ecsBvngctJ7upNBZX7hpN4SfdR6TaUz"
out, err := HashFromBase58(in)
Expand All @@ -50,6 +62,18 @@ func TestHashFromBase58(t *testing.T) {
assert.False(t, out.IsZero())
}

func TestSignature_UnmarshalText(t *testing.T) {
in := MustSignatureFromBase58("gD3jeeaPNiyuJvTKXNEv1gntazWEkvpocofEmrz2rL6Fi4prWSsBH6a9SrwyZEatAozyMsnK2fnk3APXNFxD2Mq")

out, err := in.MarshalText()
assert.NoError(t, err)

var sig Signature
err = sig.UnmarshalText(out)
assert.NoError(t, err)
assert.Equal(t, in, sig)
}

func TestSignatureFromBase58(t *testing.T) {
in := "gD3jeeaPNiyuJvTKXNEv1gntazWEkvpocofEmrz2rL6Fi4prWSsBH6a9SrwyZEatAozyMsnK2fnk3APXNFxD2Mq"
out, err := SignatureFromBase58(in)
Expand Down
34 changes: 31 additions & 3 deletions nativetypes.go
Expand Up @@ -48,6 +48,20 @@ func HashFromBytes(in []byte) Hash {
return Hash(PublicKeyFromBytes(in))
}

func (ha Hash) MarshalText() ([]byte, error) {
s := base58.Encode(ha[:])
return []byte(s), nil
}

func (ha *Hash) UnmarshalText(data []byte) (err error) {
tmp, err := HashFromBase58(string(data))
if err != nil {
return fmt.Errorf("invalid hash %q: %w", string(data), err)
}
*ha = tmp
return
}

func (ha Hash) MarshalJSON() ([]byte, error) {
return json.Marshal(base58.Encode(ha[:]))
}
Expand All @@ -58,11 +72,11 @@ func (ha *Hash) UnmarshalJSON(data []byte) (err error) {
return err
}

tmp, err := PublicKeyFromBase58(s)
tmp, err := HashFromBase58(s)
if err != nil {
return fmt.Errorf("invalid public key %q: %w", s, err)
return fmt.Errorf("invalid hash %q: %w", s, err)
}
*ha = Hash(tmp)
*ha = tmp
return
}

Expand Down Expand Up @@ -128,6 +142,20 @@ func SignatureFromBytes(in []byte) (out Signature) {
return
}

func (p Signature) MarshalText() ([]byte, error) {
s := base58.Encode(p[:])
return []byte(s), nil
}

func (p *Signature) UnmarshalText(data []byte) (err error) {
tmp, err := SignatureFromBase58(string(data))
if err != nil {
return fmt.Errorf("invalid signature %q: %w", string(data), err)
}
*p = tmp
return
}

func (p Signature) MarshalJSON() ([]byte, error) {
return json.Marshal(base58.Encode(p[:]))
}
Expand Down

0 comments on commit d850995

Please sign in to comment.