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