mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-26 16:45:18 +00:00
49 lines
1.0 KiB
Go
49 lines
1.0 KiB
Go
package peer
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/libp2p/go-libp2p/core/internal/catch"
|
|
|
|
ma "github.com/multiformats/go-multiaddr"
|
|
)
|
|
|
|
// Helper struct for decoding as we can't unmarshal into an interface (Multiaddr).
|
|
type addrInfoJson struct {
|
|
ID ID
|
|
Addrs []string
|
|
}
|
|
|
|
func (pi AddrInfo) MarshalJSON() (res []byte, err error) {
|
|
defer func() { catch.HandlePanic(recover(), &err, "libp2p addr info marshal") }()
|
|
|
|
addrs := make([]string, len(pi.Addrs))
|
|
for i, addr := range pi.Addrs {
|
|
addrs[i] = addr.String()
|
|
}
|
|
return json.Marshal(&addrInfoJson{
|
|
ID: pi.ID,
|
|
Addrs: addrs,
|
|
})
|
|
}
|
|
|
|
func (pi *AddrInfo) UnmarshalJSON(b []byte) (err error) {
|
|
defer func() { catch.HandlePanic(recover(), &err, "libp2p addr info unmarshal") }()
|
|
var data addrInfoJson
|
|
if err := json.Unmarshal(b, &data); err != nil {
|
|
return err
|
|
}
|
|
addrs := make([]ma.Multiaddr, len(data.Addrs))
|
|
for i, addr := range data.Addrs {
|
|
maddr, err := ma.NewMultiaddr(addr)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
addrs[i] = maddr
|
|
}
|
|
|
|
pi.ID = data.ID
|
|
pi.Addrs = addrs
|
|
return nil
|
|
}
|