Create & Init Project...
This commit is contained in:
53
library/net/rpc/warden/encoding/json/json.go
Normal file
53
library/net/rpc/warden/encoding/json/json.go
Normal file
@ -0,0 +1,53 @@
|
||||
package codec
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
|
||||
"github.com/gogo/protobuf/jsonpb"
|
||||
"github.com/gogo/protobuf/proto"
|
||||
"google.golang.org/grpc/encoding"
|
||||
)
|
||||
|
||||
//Reference https://jbrandhorst.com/post/grpc-json/
|
||||
func init() {
|
||||
encoding.RegisterCodec(JSON{
|
||||
Marshaler: jsonpb.Marshaler{
|
||||
EmitDefaults: true,
|
||||
OrigName: true,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// JSON is impl of encoding.Codec
|
||||
type JSON struct {
|
||||
jsonpb.Marshaler
|
||||
jsonpb.Unmarshaler
|
||||
}
|
||||
|
||||
// Name is name of JSON
|
||||
func (j JSON) Name() string {
|
||||
return "json"
|
||||
}
|
||||
|
||||
// Marshal is json marshal
|
||||
func (j JSON) Marshal(v interface{}) (out []byte, err error) {
|
||||
if pm, ok := v.(proto.Message); ok {
|
||||
b := new(bytes.Buffer)
|
||||
err := j.Marshaler.Marshal(b, pm)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b.Bytes(), nil
|
||||
}
|
||||
return json.Marshal(v)
|
||||
}
|
||||
|
||||
// Unmarshal is json unmarshal
|
||||
func (j JSON) Unmarshal(data []byte, v interface{}) (err error) {
|
||||
if pm, ok := v.(proto.Message); ok {
|
||||
b := bytes.NewBuffer(data)
|
||||
return j.Unmarshaler.Unmarshal(b, pm)
|
||||
}
|
||||
return json.Unmarshal(data, v)
|
||||
}
|
Reference in New Issue
Block a user