gitee.com/sasukebo/go-micro/v4@v4.7.1/codec/bytes/bytes.go (about) 1 // Package bytes provides a bytes codec which does not encode or decode anything 2 package bytes 3 4 import ( 5 "fmt" 6 "io" 7 8 "gitee.com/sasukebo/go-micro/v4/codec" 9 ) 10 11 type Codec struct { 12 Conn io.ReadWriteCloser 13 } 14 15 // Frame gives us the ability to define raw data to send over the pipes 16 type Frame struct { 17 Data []byte 18 } 19 20 func (c *Codec) ReadHeader(m *codec.Message, t codec.MessageType) error { 21 return nil 22 } 23 24 func (c *Codec) ReadBody(b interface{}) error { 25 // read bytes 26 buf, err := io.ReadAll(c.Conn) 27 if err != nil { 28 return err 29 } 30 31 switch v := b.(type) { 32 case *[]byte: 33 *v = buf 34 case *Frame: 35 v.Data = buf 36 default: 37 return fmt.Errorf("failed to read body: %v is not type of *[]byte", b) 38 } 39 40 return nil 41 } 42 43 func (c *Codec) Write(m *codec.Message, b interface{}) error { 44 var v []byte 45 switch vb := b.(type) { 46 case *Frame: 47 v = vb.Data 48 case *[]byte: 49 v = *vb 50 case []byte: 51 v = vb 52 default: 53 return fmt.Errorf("failed to write: %v is not type of *[]byte or []byte", b) 54 } 55 _, err := c.Conn.Write(v) 56 return err 57 } 58 59 func (c *Codec) Close() error { 60 return c.Conn.Close() 61 } 62 63 func (c *Codec) String() string { 64 return "bytes" 65 } 66 67 func NewCodec(c io.ReadWriteCloser) codec.Codec { 68 return &Codec{ 69 Conn: c, 70 } 71 }