gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/codec/json/json.go (about) 1 // Package json provides a json codec 2 package json 3 4 import ( 5 "encoding/json" 6 "io" 7 8 "github.com/golang/protobuf/jsonpb" 9 "github.com/golang/protobuf/proto" 10 "gitee.com/liuxuezhan/go-micro-v1.18.0/codec" 11 ) 12 13 type Codec struct { 14 Conn io.ReadWriteCloser 15 Encoder *json.Encoder 16 Decoder *json.Decoder 17 } 18 19 func (c *Codec) ReadHeader(m *codec.Message, t codec.MessageType) error { 20 return nil 21 } 22 23 func (c *Codec) ReadBody(b interface{}) error { 24 if b == nil { 25 return nil 26 } 27 if pb, ok := b.(proto.Message); ok { 28 return jsonpb.UnmarshalNext(c.Decoder, pb) 29 } 30 return c.Decoder.Decode(b) 31 } 32 33 func (c *Codec) Write(m *codec.Message, b interface{}) error { 34 if b == nil { 35 return nil 36 } 37 return c.Encoder.Encode(b) 38 } 39 40 func (c *Codec) Close() error { 41 return c.Conn.Close() 42 } 43 44 func (c *Codec) String() string { 45 return "json" 46 } 47 48 func NewCodec(c io.ReadWriteCloser) codec.Codec { 49 return &Codec{ 50 Conn: c, 51 Decoder: json.NewDecoder(c), 52 Encoder: json.NewEncoder(c), 53 } 54 }