mirror of
https://github.com/go-micro/go-micro.git
synced 2025-01-05 10:20:53 +02:00
5d5aee1f08
set the go version to 1.16 in pr.yml and tests.yml, so as to be consistent with the version in go.mod.
72 lines
1.2 KiB
Go
72 lines
1.2 KiB
Go
// Package bytes provides a bytes codec which does not encode or decode anything
|
|
package bytes
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
|
|
"go-micro.dev/v4/codec"
|
|
)
|
|
|
|
type Codec struct {
|
|
Conn io.ReadWriteCloser
|
|
}
|
|
|
|
// Frame gives us the ability to define raw data to send over the pipes
|
|
type Frame struct {
|
|
Data []byte
|
|
}
|
|
|
|
func (c *Codec) ReadHeader(m *codec.Message, t codec.MessageType) error {
|
|
return nil
|
|
}
|
|
|
|
func (c *Codec) ReadBody(b interface{}) error {
|
|
// read bytes
|
|
buf, err := io.ReadAll(c.Conn)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
switch v := b.(type) {
|
|
case *[]byte:
|
|
*v = buf
|
|
case *Frame:
|
|
v.Data = buf
|
|
default:
|
|
return fmt.Errorf("failed to read body: %v is not type of *[]byte", b)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *Codec) Write(m *codec.Message, b interface{}) error {
|
|
var v []byte
|
|
switch vb := b.(type) {
|
|
case *Frame:
|
|
v = vb.Data
|
|
case *[]byte:
|
|
v = *vb
|
|
case []byte:
|
|
v = vb
|
|
default:
|
|
return fmt.Errorf("failed to write: %v is not type of *[]byte or []byte", b)
|
|
}
|
|
_, err := c.Conn.Write(v)
|
|
return err
|
|
}
|
|
|
|
func (c *Codec) Close() error {
|
|
return c.Conn.Close()
|
|
}
|
|
|
|
func (c *Codec) String() string {
|
|
return "bytes"
|
|
}
|
|
|
|
func NewCodec(c io.ReadWriteCloser) codec.Codec {
|
|
return &Codec{
|
|
Conn: c,
|
|
}
|
|
}
|