mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 03:07:28 +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
 | 
						|
}
 |