Skip to content

Commit fb2134c

Browse files
committed
feat: make Name marshal friendly with JSON
1 parent eec505b commit fb2134c

File tree

2 files changed

+60
-5
lines changed

2 files changed

+60
-5
lines changed

ipns/name.go

+21
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package ipns
22

33
import (
44
"bytes"
5+
"encoding/json"
56
"fmt"
67
"strings"
78

@@ -71,3 +72,23 @@ func (n Name) String() string {
7172
func (n Name) pid() peer.ID {
7273
return peer.ID(n.src)
7374
}
75+
76+
func (n *Name) UnmarshalJSON(b []byte) error {
77+
var str string
78+
err := json.Unmarshal(b, &str)
79+
if err != nil {
80+
return err
81+
}
82+
83+
v, err := NameFromString(str)
84+
if err != nil {
85+
return err
86+
}
87+
88+
*n = v
89+
return nil
90+
}
91+
92+
func (n Name) MarshalJSON() ([]byte, error) {
93+
return json.Marshal(n.String())
94+
}

ipns/name_test.go

+39-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,48 @@
11
package ipns
22

33
import (
4+
"encoding/json"
45
"testing"
56

67
"github.com/stretchr/testify/require"
78
)
89

910
func TestName(t *testing.T) {
11+
t.Parallel()
12+
13+
testString := func(t *testing.T, name, input, expected string) {
14+
t.Run("String method: "+name, func(t *testing.T) {
15+
t.Parallel()
16+
17+
name, err := NameFromString(input)
18+
require.NoError(t, err)
19+
require.Equal(t, expected, name.String())
20+
})
21+
}
22+
23+
testMarshalJSON := func(t *testing.T, name, input, expected string) {
24+
t.Run("Marshal JSON: "+name, func(t *testing.T) {
25+
t.Parallel()
26+
27+
name, err := NameFromString(input)
28+
require.NoError(t, err)
29+
raw, err := json.Marshal(name)
30+
require.NoError(t, err)
31+
require.Equal(t, expected, string(raw))
32+
})
33+
}
34+
35+
testUnmarshalJSON := func(t *testing.T, name string, input []byte, expected string) {
36+
t.Run("Unmarshal JSON: "+name, func(t *testing.T) {
37+
t.Parallel()
38+
39+
var name Name
40+
err := json.Unmarshal(input, &name)
41+
require.NoError(t, err)
42+
require.Equal(t, expected, name.String())
43+
})
44+
}
45+
1046
for _, v := range [][]string{
1147
{"RSA", "QmRp2LvtSQtCkUWCpi92ph5MdQyRtfb9jHbkNgZzGExGuG", "/ipns/k2k4r8kpauqq30hoj9oktej5btbgz1jeos16d3te36xd78trvak0jcor"},
1248
{"RSA", "/ipns/QmRp2LvtSQtCkUWCpi92ph5MdQyRtfb9jHbkNgZzGExGuG", "/ipns/k2k4r8kpauqq30hoj9oktej5btbgz1jeos16d3te36xd78trvak0jcor"},
@@ -17,10 +53,8 @@ func TestName(t *testing.T) {
1753
{"Secp256k1", "16Uiu2HAmUymv6JpFwNZppdKUMxGJuHsTeicXgHGKbBasu4Ruj3K1", "/ipns/kzwfwjn5ji4puw3jc1qw4b073j74xvq21iziuqw4rem21pr7f0l4dj8i9yb978s"},
1854
{"Secp256k1", "/ipns/16Uiu2HAmUymv6JpFwNZppdKUMxGJuHsTeicXgHGKbBasu4Ruj3K1", "/ipns/kzwfwjn5ji4puw3jc1qw4b073j74xvq21iziuqw4rem21pr7f0l4dj8i9yb978s"},
1955
} {
20-
t.Run(v[0], func(t *testing.T) {
21-
name, err := NameFromString(v[1])
22-
require.NoError(t, err)
23-
require.Equal(t, v[2], name.String())
24-
})
56+
testString(t, v[0], v[1], v[2])
57+
testMarshalJSON(t, v[0], v[1], `"`+v[2]+`"`)
58+
testUnmarshalJSON(t, v[0], []byte(`"`+v[2]+`"`), v[2])
2559
}
2660
}

0 commit comments

Comments
 (0)