64 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package codec is an interface for encoding messages
 | |
| package codec
 | |
| 
 | |
| import (
 | |
| 	"io"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	Error MessageType = iota
 | |
| 	Request
 | |
| 	Response
 | |
| 	Event
 | |
| )
 | |
| 
 | |
| 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
 | |
| }
 |