Vasiliy Tolstov
58598d0fe0
* fixes for safe convertation Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org> * fix client publish panic If broker connect returns error we dont check it status and use it later to publish message, mostly this is unexpected because broker connection failed and we cant use it. Also proposed solution have benefit - we flag connection status only when we have succeseful broker connection Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org> * api/handler/broker: fix possible broker publish panic Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
69 lines
1.5 KiB
Go
69 lines
1.5 KiB
Go
// Package codec is an interface for encoding messages
|
|
package codec
|
|
|
|
import (
|
|
"errors"
|
|
"io"
|
|
)
|
|
|
|
const (
|
|
Error MessageType = iota
|
|
Request
|
|
Response
|
|
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
|
|
|
|
// 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.
|
|
type Codec interface {
|
|
Reader
|
|
Writer
|
|
Close() error
|
|
String() string
|
|
}
|
|
|
|
type Reader interface {
|
|
ReadHeader(*Message, MessageType) error
|
|
ReadBody(interface{}) error
|
|
}
|
|
|
|
type Writer interface {
|
|
Write(*Message, interface{}) error
|
|
}
|
|
|
|
// Marshaler is a simple encoding interface used for the broker/transport
|
|
// 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 {
|
|
Id string
|
|
Type MessageType
|
|
Target string
|
|
Method string
|
|
Endpoint string
|
|
Error string
|
|
|
|
// The values read from the socket
|
|
Header map[string]string
|
|
Body []byte
|
|
}
|