Commit fc41140a authored by Janos Guljas's avatar Janos Guljas

swarm Address better design

parent 7118b9f7
......@@ -12,21 +12,31 @@ import (
// Address represents an address in Swarm metric space of
// Node and Chunk addresses.
type Address []byte
type Address struct {
b []byte
}
func NewAddress(b []byte) Address {
return Address{b: b}
}
// NewAddress returns an Address from a hex-encoded string representation.
func NewAddress(s string) (Address, error) {
return hex.DecodeString(s)
// ParseHexAddress returns an Address from a hex-encoded string representation.
func ParseHexAddress(s string) (a Address, err error) {
b, err := hex.DecodeString(s)
if err != nil {
return a, err
}
return NewAddress(b), nil
}
// String returns a hex-encoded representation of the Address.
func (a Address) String() string {
return hex.EncodeToString(a)
return hex.EncodeToString(a.b)
}
// Equal returns true if two addresses are identical.
func (a Address) Equal(b Address) bool {
return bytes.Equal(a, b)
return bytes.Equal(a.b, b.b)
}
// IsZero returns true if the Address is not set to any value.
......@@ -35,4 +45,4 @@ func (a Address) IsZero() bool {
}
// ZeroAddress is the address that has no value.
var ZeroAddress = Address(nil)
var ZeroAddress = NewAddress(nil)
......@@ -5,7 +5,6 @@
package swarm_test
import (
"bytes"
"encoding/hex"
"errors"
"testing"
......@@ -33,25 +32,25 @@ func TestAddress(t *testing.T) {
{
name: "zero",
hex: "00",
want: []byte{0},
want: swarm.NewAddress([]byte{0}),
},
{
name: "one",
hex: "01",
want: []byte{1},
want: swarm.NewAddress([]byte{1}),
},
{
name: "arbitrary",
hex: "35a26b7bb6455cbabe7a0e05aafbd0b8b26feac843e3b9a649468d0ea37a12b2",
want: []byte{0x35, 0xa2, 0x6b, 0x7b, 0xb6, 0x45, 0x5c, 0xba, 0xbe, 0x7a, 0xe, 0x5, 0xaa, 0xfb, 0xd0, 0xb8, 0xb2, 0x6f, 0xea, 0xc8, 0x43, 0xe3, 0xb9, 0xa6, 0x49, 0x46, 0x8d, 0xe, 0xa3, 0x7a, 0x12, 0xb2},
want: swarm.NewAddress([]byte{0x35, 0xa2, 0x6b, 0x7b, 0xb6, 0x45, 0x5c, 0xba, 0xbe, 0x7a, 0xe, 0x5, 0xaa, 0xfb, 0xd0, 0xb8, 0xb2, 0x6f, 0xea, 0xc8, 0x43, 0xe3, 0xb9, 0xa6, 0x49, 0x46, 0x8d, 0xe, 0xa3, 0x7a, 0x12, 0xb2}),
},
} {
t.Run(tc.name, func(t *testing.T) {
a, err := swarm.NewAddress(tc.hex)
a, err := swarm.ParseHexAddress(tc.hex)
if !errors.Is(err, tc.wantErr) {
t.Fatalf("got error %v, want %v", err, tc.wantErr)
}
if !bytes.Equal(a, tc.want) {
if a.String() != tc.want.String() {
t.Errorf("got address %#v, want %#v", a, tc.want)
}
if !a.Equal(tc.want) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment