Commit fc41140a authored by Janos Guljas's avatar Janos Guljas

swarm Address better design

parent 7118b9f7
...@@ -12,21 +12,31 @@ import ( ...@@ -12,21 +12,31 @@ import (
// Address represents an address in Swarm metric space of // Address represents an address in Swarm metric space of
// Node and Chunk addresses. // 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. // ParseHexAddress returns an Address from a hex-encoded string representation.
func NewAddress(s string) (Address, error) { func ParseHexAddress(s string) (a Address, err error) {
return hex.DecodeString(s) b, err := hex.DecodeString(s)
if err != nil {
return a, err
}
return NewAddress(b), nil
} }
// String returns a hex-encoded representation of the Address. // String returns a hex-encoded representation of the Address.
func (a Address) String() string { func (a Address) String() string {
return hex.EncodeToString(a) return hex.EncodeToString(a.b)
} }
// Equal returns true if two addresses are identical. // Equal returns true if two addresses are identical.
func (a Address) Equal(b Address) bool { 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. // IsZero returns true if the Address is not set to any value.
...@@ -35,4 +45,4 @@ func (a Address) IsZero() bool { ...@@ -35,4 +45,4 @@ func (a Address) IsZero() bool {
} }
// ZeroAddress is the address that has no value. // ZeroAddress is the address that has no value.
var ZeroAddress = Address(nil) var ZeroAddress = NewAddress(nil)
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
package swarm_test package swarm_test
import ( import (
"bytes"
"encoding/hex" "encoding/hex"
"errors" "errors"
"testing" "testing"
...@@ -33,25 +32,25 @@ func TestAddress(t *testing.T) { ...@@ -33,25 +32,25 @@ func TestAddress(t *testing.T) {
{ {
name: "zero", name: "zero",
hex: "00", hex: "00",
want: []byte{0}, want: swarm.NewAddress([]byte{0}),
}, },
{ {
name: "one", name: "one",
hex: "01", hex: "01",
want: []byte{1}, want: swarm.NewAddress([]byte{1}),
}, },
{ {
name: "arbitrary", name: "arbitrary",
hex: "35a26b7bb6455cbabe7a0e05aafbd0b8b26feac843e3b9a649468d0ea37a12b2", 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) { 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) { if !errors.Is(err, tc.wantErr) {
t.Fatalf("got error %v, want %v", 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) t.Errorf("got address %#v, want %#v", a, tc.want)
} }
if !a.Equal(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