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)