1
0
mirror of https://github.com/go-micro/go-micro.git synced 2024-11-24 08:02:32 +02:00
go-micro/codec/codec.go

69 lines
1.5 KiB
Go
Raw Normal View History

2016-12-14 17:41:48 +02:00
// Package codec is an interface for encoding messages
2015-11-27 02:17:36 +02:00
package codec
import (
"errors"
"io"
)
const (
Error MessageType = iota
Request
Response
2019-07-07 13:44:09 +02:00
Event
)
var (
ErrInvalidMessage = errors.New("invalid message")
)
type MessageType int
// Takes in a connection/buffer and returns a new Codec
type NewCodec func(io.ReadWriteCloser) Codec
2015-12-02 03:38:56 +02:00
// Codec encodes/decodes various types of messages used within go-micro.
// ReadHeader and ReadBody are called in pairs to read requests/responses
// from the connection. Close is called when finished with the
// connection. ReadBody may be called with a nil argument to force the
// body to be read and discarded.
2015-11-27 02:17:36 +02:00
type Codec interface {
2019-01-09 21:28:13 +02:00
Reader
Writer
Close() error
String() string
}
type Reader interface {
ReadHeader(*Message, MessageType) error
ReadBody(interface{}) error
2019-01-09 21:28:13 +02:00
}
type Writer interface {
Write(*Message, interface{}) error
}
2019-01-10 22:35:20 +02:00
// Marshaler is a simple encoding interface used for the broker/transport
2019-01-10 11:42:02 +02:00
// where headers are not supported by the underlying implementation.
type Marshaler interface {
Marshal(interface{}) ([]byte, error)
Unmarshal([]byte, interface{}) error
String() string
}
// Message represents detailed information about
// the communication, likely followed by the body.
// In the case of an error, body may be nil.
type Message struct {
2019-01-10 23:25:31 +02:00
Id string
Type MessageType
Target string
2019-01-18 12:12:57 +02:00
Method string
2019-01-10 23:25:31 +02:00
Endpoint string
Error string
2019-01-09 18:20:57 +02:00
// The values read from the socket
2016-01-28 20:11:13 +02:00
Header map[string]string
2019-01-09 21:28:13 +02:00
Body []byte
}