codec

package
v4.0.20 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 8, 2024 License: Apache-2.0 Imports: 8 Imported by: 9

Documentation

Overview

Package codec is an interface for encoding messages

Index

Constants

This section is empty.

Variables

View Source
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")
)
View Source
var (
	// DefaultMaxMsgSize specifies how much data codec can handle
	DefaultMaxMsgSize = 1024 * 1024 * 4 // 4Mb
	// DefaultCodec is the global default codec
	DefaultCodec = NewCodec()
	// DefaultTagName specifies struct tag name to control codec Marshal/Unmarshal
	DefaultTagName = "codec"
)

Functions

func MarshalAppend

func MarshalAppend(buf []byte, c Codec, v interface{}, opts ...Option) ([]byte, error)

MarshalAppend calls codec.Marshal(v) and returns the data appended to buf. If codec implements MarshalAppend, that is called instead.

func NewContext

func NewContext(ctx context.Context, c Codec) context.Context

NewContext put codec in context

Types

type Codec

type Codec interface {
	ReadHeader(r io.Reader, m *Message, mt MessageType) error
	ReadBody(r io.Reader, v interface{}) error
	Write(w io.Writer, m *Message, v interface{}) error
	Marshal(v interface{}, opts ...Option) ([]byte, error)
	Unmarshal(b []byte, v interface{}, opts ...Option) error
	String() string
}

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.

func FromContext

func FromContext(ctx context.Context) (Codec, bool)

FromContext returns codec from context

func NewCodec

func NewCodec(opts ...Option) Codec

NewCodec returns new noop codec

type Frame

type Frame struct {
	Data []byte
}

Frame gives us the ability to define raw data to send over the pipes

func NewFrame

func NewFrame(data []byte) *Frame

NewFrame returns new frame with data

func (*Frame) Marshal

func (m *Frame) Marshal() ([]byte, error)

Marshal returns frame data

func (*Frame) MarshalJSON

func (m *Frame) MarshalJSON() ([]byte, error)

MarshalJSON returns frame data

func (*Frame) ProtoMessage

func (m *Frame) ProtoMessage()

ProtoMessage noop func

func (*Frame) Reset

func (m *Frame) Reset()

Reset resets frame

func (*Frame) String

func (m *Frame) String() string

String returns frame as string

func (*Frame) Unmarshal

func (m *Frame) Unmarshal(data []byte) error

Unmarshal set frame data

func (*Frame) UnmarshalJSON

func (m *Frame) UnmarshalJSON(data []byte) error

UnmarshalJSON set frame data

type Message

type Message struct {
	Header   metadata.Metadata
	Target   string
	Method   string
	Endpoint string
	Error    string
	ID       string
	Body     []byte
	Type     MessageType
}

Message represents detailed information about the communication, likely followed by the body. In the case of an error, body may be nil.

func NewMessage

func NewMessage(t MessageType) *Message

NewMessage creates new codec message

type MessageType

type MessageType int

MessageType specifies message type for codec

const (
	Error MessageType = iota
	Request
	Response
	Event
)

Message types

type Option

type Option func(*Options)

Option func

func Logger

func Logger(l logger.Logger) Option

Logger sets the logger

func MaxMsgSize

func MaxMsgSize(n int) Option

MaxMsgSize sets the max message size

func Meter

func Meter(m meter.Meter) Option

Meter sets the meter

func SetOption

func SetOption(k, v interface{}) Option

SetOption returns a function to setup a context with given value

func TagName

func TagName(n string) Option

TagName sets the codec tag name in struct

func Tracer

func Tracer(t tracer.Tracer) Option

Tracer to be used for tracing

type Options

type Options struct {
	// Meter used for metrics
	Meter meter.Meter
	// Logger used for logging
	Logger logger.Logger
	// Tracer used for tracing
	Tracer tracer.Tracer
	// Context stores additional codec options
	Context context.Context
	// TagName specifies tag name in struct to control codec
	TagName string
	// MaxMsgSize specifies max messages size that reads by codec
	MaxMsgSize int
}

Options contains codec options

func NewOptions

func NewOptions(opts ...Option) Options

NewOptions returns new options

type RawMessage

type RawMessage []byte

RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler and can be used to delay decoding or precompute a encoding.

func (*RawMessage) MarshalJSON

func (m *RawMessage) MarshalJSON() ([]byte, error)

MarshalJSON returns m as the JSON encoding of m.

func (*RawMessage) UnmarshalJSON

func (m *RawMessage) UnmarshalJSON(data []byte) error

UnmarshalJSON sets *m to a copy of data.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL