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)