github.com/franono/tendermint@v0.32.2-0.20200527150959-749313264ce9/crypto/merkle/result.go (about) 1 package merkle 2 3 import ( 4 "bytes" 5 "encoding/json" 6 7 "github.com/gogo/protobuf/jsonpb" 8 ) 9 10 //--------------------------------------------------------------------------- 11 // override JSON marshalling so we emit defaults (ie. disable omitempty) 12 13 var ( 14 jsonpbMarshaller = jsonpb.Marshaler{ 15 EnumsAsInts: true, 16 EmitDefaults: true, 17 } 18 jsonpbUnmarshaller = jsonpb.Unmarshaler{} 19 ) 20 21 func (r *ProofOp) MarshalJSON() ([]byte, error) { 22 s, err := jsonpbMarshaller.MarshalToString(r) 23 return []byte(s), err 24 } 25 26 func (r *ProofOp) UnmarshalJSON(b []byte) error { 27 reader := bytes.NewBuffer(b) 28 return jsonpbUnmarshaller.Unmarshal(reader, r) 29 } 30 31 func (r *Proof) MarshalJSON() ([]byte, error) { 32 s, err := jsonpbMarshaller.MarshalToString(r) 33 return []byte(s), err 34 } 35 36 func (r *Proof) UnmarshalJSON(b []byte) error { 37 reader := bytes.NewBuffer(b) 38 return jsonpbUnmarshaller.Unmarshal(reader, r) 39 } 40 41 // Some compile time assertions to ensure we don't 42 // have accidental runtime surprises later on. 43 // jsonEncodingRoundTripper ensures that asserted 44 // interfaces implement both MarshalJSON and UnmarshalJSON 45 46 type jsonRoundTripper interface { 47 json.Marshaler 48 json.Unmarshaler 49 } 50 51 var _ jsonRoundTripper = (*ProofOp)(nil) 52 var _ jsonRoundTripper = (*Proof)(nil)