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