github.com/Finschia/finschia-sdk@v0.48.1/codec/json.go (about) 1 package codec 2 3 import ( 4 "bytes" 5 6 "github.com/gogo/protobuf/jsonpb" 7 "github.com/gogo/protobuf/proto" 8 9 "github.com/Finschia/finschia-sdk/codec/types" 10 ) 11 12 var defaultJM = &jsonpb.Marshaler{OrigName: true, EmitDefaults: true, AnyResolver: nil} 13 14 // ProtoMarshalJSON provides an auxiliary function to return Proto3 JSON encoded 15 // bytes of a message. 16 func ProtoMarshalJSON(msg proto.Message, resolver jsonpb.AnyResolver) ([]byte, error) { 17 // We use the OrigName because camel casing fields just doesn't make sense. 18 // EmitDefaults is also often the more expected behavior for CLI users 19 jm := defaultJM 20 if resolver != nil { 21 jm = &jsonpb.Marshaler{OrigName: true, EmitDefaults: true, AnyResolver: resolver} 22 } 23 err := types.UnpackInterfaces(msg, types.ProtoJSONPacker{JSONPBMarshaler: jm}) 24 if err != nil { 25 return nil, err 26 } 27 28 buf := new(bytes.Buffer) 29 if err := jm.Marshal(buf, msg); err != nil { 30 return nil, err 31 } 32 33 return buf.Bytes(), nil 34 }