61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
package codec
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
|
|
"github.com/cosmos/cosmos-sdk/codec/types"
|
|
|
|
"github.com/gogo/protobuf/jsonpb"
|
|
"github.com/gogo/protobuf/proto"
|
|
)
|
|
|
|
// MarshalIndentFromJSON returns indented JSON-encoded bytes from already encoded
|
|
// JSON bytes. The output encoding will adhere to the original input's encoding
|
|
// (e.g. Proto3).
|
|
func MarshalIndentFromJSON(bz []byte) ([]byte, error) {
|
|
var generic interface{}
|
|
|
|
if err := json.Unmarshal(bz, &generic); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return json.MarshalIndent(generic, "", " ")
|
|
}
|
|
|
|
// ProtoMarshalJSON provides an auxiliary function to return Proto3 JSON encoded
|
|
// bytes of a message.
|
|
func ProtoMarshalJSON(msg proto.Message) ([]byte, error) {
|
|
jm := &jsonpb.Marshaler{EmitDefaults: false, OrigName: false}
|
|
err := types.UnpackInterfaces(msg, types.ProtoJSONPacker{JSONPBMarshaler: jm})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
buf := new(bytes.Buffer)
|
|
|
|
if err := jm.Marshal(buf, msg); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return buf.Bytes(), nil
|
|
}
|
|
|
|
// ProtoMarshalJSONIndent provides an auxiliary function to return Proto3 indented
|
|
// JSON encoded bytes of a message.
|
|
func ProtoMarshalJSONIndent(msg proto.Message) ([]byte, error) {
|
|
jm := &jsonpb.Marshaler{EmitDefaults: false, OrigName: false, Indent: " "}
|
|
err := types.UnpackInterfaces(msg, types.ProtoJSONPacker{JSONPBMarshaler: jm})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
buf := new(bytes.Buffer)
|
|
|
|
if err := jm.Marshal(buf, msg); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return buf.Bytes(), nil
|
|
}
|