1
0
mirror of https://github.com/go-micro/go-micro.git synced 2025-02-10 18:31:40 +02:00
2021-10-12 12:55:53 +01:00

59 lines
1.1 KiB
Go

// Package json iterator provides a json codec
package json
import (
// jsonstd "encoding/json"
"io"
jsoniter "github.com/json-iterator/go"
"go-micro.dev/v4/codec"
)
type Codec struct {
Conn io.ReadWriteCloser
// StdEncoder *jsonstd.Encoder
// StdDecoder *jsonstd.Decoder
IterEncoder *jsoniter.Encoder
IterDecoder *jsoniter.Decoder
}
func (c *Codec) ReadHeader(m *codec.Message, t codec.MessageType) error {
return nil
}
func (c *Codec) ReadBody(b interface{}) error {
if b == nil {
return nil
}
// if pb, ok := b.(proto.Message); ok {
// return jsonpb.UnmarshalNext(c.StdDecoder, pb)
// }
return c.IterDecoder.Decode(b)
}
func (c *Codec) Write(m *codec.Message, b interface{}) error {
if b == nil {
return nil
}
return c.IterEncoder.Encode(b)
}
func (c *Codec) Close() error {
return c.Conn.Close()
}
func (c *Codec) String() string {
return "json"
}
func NewCodec(c io.ReadWriteCloser) codec.Codec {
return &Codec{
Conn: c,
// StdDecoder: jsonstd.NewDecoder(c),
// StdEncoder: jsonstd.NewEncoder(c),
IterDecoder: jsoniter.NewDecoder(c),
IterEncoder: jsoniter.NewEncoder(c),
}
}