addrinfo_serde.go 819 Bytes
Newer Older
1 2 3 4 5
package peer

import (
	"encoding/json"

tavit ohanian's avatar
tavit ohanian committed
6
	ma "gitlab.dms3.io/mf/go-multiaddr"
7 8
)

9 10 11 12 13 14
// Helper struct for decoding as we can't unmarshal into an interface (Multiaddr).
type addrInfoJson struct {
	ID    ID
	Addrs []string
}

15
func (pi AddrInfo) MarshalJSON() ([]byte, error) {
16 17 18
	addrs := make([]string, len(pi.Addrs))
	for i, addr := range pi.Addrs {
		addrs[i] = addr.String()
19
	}
20 21 22 23
	return json.Marshal(&addrInfoJson{
		ID:    pi.ID,
		Addrs: addrs,
	})
24 25 26
}

func (pi *AddrInfo) UnmarshalJSON(b []byte) error {
27 28
	var data addrInfoJson
	if err := json.Unmarshal(b, &data); err != nil {
29 30
		return err
	}
31 32 33 34 35
	addrs := make([]ma.Multiaddr, len(data.Addrs))
	for i, addr := range data.Addrs {
		maddr, err := ma.NewMultiaddr(addr)
		if err != nil {
			return err
36
		}
37
		addrs[i] = maddr
38
	}
39 40 41

	pi.ID = data.ID
	pi.Addrs = addrs
42 43
	return nil
}