github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/codec/codec.go (about)

     1  package codec
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"fmt"
     7  
     8  	cryptoamino "github.com/fibonacci-chain/fbc/libs/tendermint/crypto/encoding/amino"
     9  	tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types"
    10  	amino "github.com/tendermint/go-amino"
    11  )
    12  
    13  // amino codec to marshal/unmarshal
    14  type Codec = amino.Codec
    15  
    16  func New() *Codec {
    17  	return amino.NewCodec()
    18  }
    19  
    20  // Register the go-crypto to the codec
    21  func RegisterCrypto(cdc *Codec) {
    22  	cryptoamino.RegisterAmino(cdc)
    23  }
    24  
    25  // RegisterEvidences registers Tendermint evidence types with the provided codec.
    26  func RegisterEvidences(cdc *Codec) {
    27  	tmtypes.RegisterEvidences(cdc)
    28  }
    29  
    30  // attempt to make some pretty json
    31  func MarshalJSONIndent(cdc *Codec, obj interface{}) ([]byte, error) {
    32  	bz, err := cdc.MarshalJSON(obj)
    33  	if err != nil {
    34  		return nil, err
    35  	}
    36  
    37  	var out bytes.Buffer
    38  	err = json.Indent(&out, bz, "", "  ")
    39  	if err != nil {
    40  		return nil, err
    41  	}
    42  	return out.Bytes(), nil
    43  }
    44  
    45  // MustMarshalJSONIndent executes MarshalJSONIndent except it panics upon failure.
    46  func MustMarshalJSONIndent(cdc *Codec, obj interface{}) []byte {
    47  	bz, err := MarshalJSONIndent(cdc, obj)
    48  	if err != nil {
    49  		panic(fmt.Sprintf("failed to marshal JSON: %s", err))
    50  	}
    51  
    52  	return bz
    53  }
    54  
    55  //__________________________________________________________________
    56  
    57  // Cdc generic sealed codec to be used throughout sdk
    58  var Cdc *Codec
    59  
    60  func init() {
    61  	cdc := New()
    62  	RegisterCrypto(cdc)
    63  	RegisterEvidences(cdc)
    64  	Cdc = cdc.Seal()
    65  }
    66  
    67  type CdcAbstraction interface {
    68  	UnmarshalBinaryLengthPrefixedWithRegisteredUbmarshaller(bz []byte, ptr interface{}) (interface{}, error)
    69  	UnmarshalBinaryLengthPrefixed(bz []byte, ptr interface{}) error
    70  }