Skip to content

Commit 19dc0c6

Browse files
committed
ipfs: extract multiaddr container to its own pkg
1 parent be33bbb commit 19dc0c6

File tree

3 files changed

+65
-54
lines changed

3 files changed

+65
-54
lines changed

internal/filesystem/ipfs/mountpoint.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
p9fs "github.com/djdv/go-filesystem-utils/internal/filesystem/9p"
1212
coreiface "github.com/ipfs/boxo/coreiface"
1313
"github.com/multiformats/go-multiaddr"
14+
maddrc "github.com/djdv/go-filesystem-utils/internal/multiaddr"
1415
)
1516

1617
type (
@@ -36,7 +37,7 @@ func (*IPFSGuest) GuestID() filesystem.ID { return IPFSID }
3637
func (ig *IPFSGuest) UnmarshalJSON(b []byte) error {
3738
// multiformats/go-multiaddr issue #100
3839
var maddrWorkaround struct {
39-
APIMaddr multiaddrContainer `json:"apiMaddr,omitempty"`
40+
APIMaddr maddrc.Multiaddr `json:"apiMaddr,omitempty"`
4041
}
4142
if err := json.Unmarshal(b, &maddrWorkaround); err != nil {
4243
return err

internal/filesystem/ipfs/multiaddr.go

Lines changed: 0 additions & 53 deletions
This file was deleted.

internal/multiaddr/multiaddr.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package multiaddr
2+
3+
import (
4+
"encoding/json"
5+
6+
"github.com/multiformats/go-multiaddr"
7+
)
8+
9+
// Multiaddr wraps the reference Multiaddr library
10+
// adding deserialization support.
11+
type Multiaddr struct{ multiaddr.Multiaddr }
12+
13+
func (ma *Multiaddr) MarshalBinary() ([]byte, error) {
14+
if maddr := ma.Multiaddr; maddr != nil {
15+
return maddr.MarshalBinary()
16+
}
17+
return nil, nil
18+
}
19+
20+
func (ma *Multiaddr) UnmarshalBinary(b []byte) error {
21+
maddr, err := multiaddr.NewMultiaddrBytes(b)
22+
if err != nil {
23+
return err
24+
}
25+
ma.Multiaddr = maddr
26+
return nil
27+
}
28+
29+
func (ma *Multiaddr) MarshalText() ([]byte, error) {
30+
if maddr := ma.Multiaddr; maddr != nil {
31+
return maddr.MarshalText()
32+
}
33+
return []byte{}, nil
34+
}
35+
36+
func (ma *Multiaddr) UnmarshalText(b []byte) error {
37+
maddr, err := multiaddr.NewMultiaddr(string(b))
38+
if err != nil {
39+
return err
40+
}
41+
ma.Multiaddr = maddr
42+
return nil
43+
}
44+
45+
func (ma *Multiaddr) MarshalJSON() ([]byte, error) {
46+
if maddr := ma.Multiaddr; maddr != nil {
47+
return maddr.MarshalJSON()
48+
}
49+
return []byte("null"), nil
50+
}
51+
52+
func (ma *Multiaddr) UnmarshalJSON(b []byte) error {
53+
var maddrString string
54+
if err := json.Unmarshal(b, &maddrString); err != nil {
55+
return err
56+
}
57+
maddr, err := multiaddr.NewMultiaddr(maddrString)
58+
if err != nil {
59+
return err
60+
}
61+
ma.Multiaddr = maddr
62+
return nil
63+
}

0 commit comments

Comments
 (0)