query_serde.go 754 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10
package routing

import (
	"encoding/json"

	"github.com/libp2p/go-libp2p-core/peer"
)

func (qe *QueryEvent) MarshalJSON() ([]byte, error) {
	return json.Marshal(map[string]interface{}{
Marten Seemann's avatar
Marten Seemann committed
11
		"ID":        peer.Encode(qe.ID),
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
		"Type":      int(qe.Type),
		"Responses": qe.Responses,
		"Extra":     qe.Extra,
	})
}

func (qe *QueryEvent) UnmarshalJSON(b []byte) error {
	temp := struct {
		ID        string
		Type      int
		Responses []*peer.AddrInfo
		Extra     string
	}{}
	err := json.Unmarshal(b, &temp)
	if err != nil {
		return err
	}
	if len(temp.ID) > 0 {
Marten Seemann's avatar
Marten Seemann committed
30
		pid, err := peer.Decode(temp.ID)
31 32 33 34 35 36 37 38 39 40
		if err != nil {
			return err
		}
		qe.ID = pid
	}
	qe.Type = QueryEventType(temp.Type)
	qe.Responses = temp.Responses
	qe.Extra = temp.Extra
	return nil
}