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 }