68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package codec is an interface for encoding messages
 | |
| package codec
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 	"io"
 | |
| 
 | |
| 	"github.com/unistack-org/micro/v3/metadata"
 | |
| )
 | |
| 
 | |
| // Message types
 | |
| const (
 | |
| 	Error MessageType = iota
 | |
| 	Request
 | |
| 	Response
 | |
| 	Event
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	// ErrInvalidMessage returned when invalid messge passed to codec
 | |
| 	ErrInvalidMessage = errors.New("invalid message")
 | |
| 	// ErrUnknownContentType returned when content-type is unknown
 | |
| 	ErrUnknownContentType = errors.New("unknown content-type")
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	// DefaultMaxMsgSize specifies how much data codec can handle
 | |
| 	DefaultMaxMsgSize int = 1024 * 1024 * 4 // 4Mb
 | |
| 	// DefaultCodec is the global default codec
 | |
| 	DefaultCodec Codec = NewCodec()
 | |
| )
 | |
| 
 | |
| // MessageType specifies message type for codec
 | |
| type MessageType int
 | |
| 
 | |
| // Codec encodes/decodes various types of messages used within 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 {
 | |
| 	ReadHeader(io.Reader, *Message, MessageType) error
 | |
| 	ReadBody(io.Reader, interface{}) error
 | |
| 	Write(io.Writer, *Message, interface{}) error
 | |
| 	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 {
 | |
| 	Header   metadata.Metadata
 | |
| 	Target   string
 | |
| 	Method   string
 | |
| 	Endpoint string
 | |
| 	Error    string
 | |
| 	Id       string
 | |
| 	Body     []byte
 | |
| 	Type     MessageType
 | |
| }
 | |
| 
 | |
| // NewMessage creates new codec message
 | |
| func NewMessage(t MessageType) *Message {
 | |
| 	return &Message{Type: t, Header: metadata.New(0)}
 | |
| }
 |