Documentation
¶
Index ¶
- Variables
- type Buffer
- func (cb *Buffer) Bytes() []byte
- func (cb *Buffer) DecodeFixed32() (x uint64, err error)
- func (cb *Buffer) DecodeFixed64() (x uint64, err error)
- func (cb *Buffer) DecodeNestedMessage(data []byte, msg proto.Message) error
- func (cb *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error)
- func (cb *Buffer) DecodeTagAndWireType() (tag int32, wireType int8, err error)
- func (cb *Buffer) DecodeVarint() (uint64, error)
- func (cb *Buffer) EOF() bool
- func (cb *Buffer) EncodeDelimitedMessage(pm proto.Message) error
- func (cb *Buffer) EncodeFixed32(x uint64) error
- func (cb *Buffer) EncodeFixed64(x uint64) error
- func (cb *Buffer) EncodeMessage(pm proto.Message) error
- func (cb *Buffer) EncodeRawBytes(b []byte) error
- func (cb *Buffer) EncodeTagAndWireType(tag int32, wireType int8) error
- func (cb *Buffer) EncodeVarint(x uint64) error
- func (cb *Buffer) IsDeterministic() bool
- func (cb *Buffer) Len() int
- func (cb *Buffer) NestedBuffer(buf []byte) (*Buffer, error)
- func (cb *Buffer) Read(dest []byte) (int, error)
- func (cb *Buffer) ReadGroup(alloc bool) ([]byte, error)
- func (cb *Buffer) Reset()
- func (cb *Buffer) SetDeterministic(deterministic bool)
- func (cb *Buffer) SetMessageCodec(messageCodec MessageCodec)
- func (cb *Buffer) Skip(count int) error
- func (cb *Buffer) SkipField(wireType int8) error
- func (cb *Buffer) SkipGroup() error
- func (cb *Buffer) String() string
- func (cb *Buffer) Write(data []byte) (int, error)
- type MessageCodec
Constants ¶
This section is empty.
Variables ¶
var ErrBadWireType = errors.New("proto: bad wiretype")
ErrBadWireType is returned when decoding a wire-type from a buffer that is not valid.
var ErrOverflow = errors.New("proto: integer overflow")
ErrOverflow is returned when an integer is too large to be represented.
var ErrRecursionDepth = errors.New("proto: exceeded maximum recursion depth")
ErrRecursionDepth is returned when the data being encoded or decoded contains messages or groups that are nested more deeply than protowire.DefaultRecursionLimit.
Functions ¶
This section is empty.
Types ¶
type Buffer ¶
type Buffer struct {
// contains filtered or unexported fields
}
Buffer is a reader and a writer that wraps a slice of bytes and also provides API for decoding and encoding the protobuf binary format.
Its operation is similar to that of a bytes.Buffer: writing pushes data to the end of the buffer while reading pops data from the head of the buffer. So the same buffer can be used to both read and write.
func NewBuffer ¶
NewBuffer creates a new buffer with the given slice of bytes as the buffer's initial contents.
func (*Buffer) Bytes ¶
Bytes returns the slice of bytes remaining in the buffer. Note that this does not perform a copy: if the contents of the returned slice are modified, the modifications will be visible to subsequent reads via the buffer.
func (*Buffer) DecodeFixed32 ¶
DecodeFixed32 reads a 32-bit integer from the Buffer. This is the format for the fixed32, sfixed32, and float protocol buffer types.
func (*Buffer) DecodeFixed64 ¶
DecodeFixed64 reads a 64-bit integer from the Buffer. This is the format for the fixed64, sfixed64, and double protocol buffer types.
func (*Buffer) DecodeNestedMessage ¶ added in v1.19.0
DecodeNestedMessage decodes data into msg, which is nested inside the message at this buffer's depth. If this buffer has a MessageCodec, it is used to decode msg, so that the depth is tracked across nested messages.
func (*Buffer) DecodeRawBytes ¶
DecodeRawBytes reads a count-delimited byte buffer from the Buffer. This is the format used for the bytes protocol buffer type and for embedded messages.
func (*Buffer) DecodeTagAndWireType ¶
DecodeTagAndWireType decodes a field tag and wire type from input. This reads a varint and then extracts the two fields from the varint value read.
func (*Buffer) DecodeVarint ¶
DecodeVarint reads a varint-encoded integer from the Buffer. This is the format for the int32, int64, uint32, uint64, bool, and enum protocol buffer types.
func (*Buffer) EncodeDelimitedMessage ¶
EncodeDelimitedMessage writes the given message to the buffer with a varint-encoded length prefix (the delimiter).
func (*Buffer) EncodeFixed32 ¶
EncodeFixed32 writes a 32-bit integer to the Buffer. This is the format for the fixed32, sfixed32, and float protocol buffer types.
func (*Buffer) EncodeFixed64 ¶
EncodeFixed64 writes a 64-bit integer to the Buffer. This is the format for the fixed64, sfixed64, and double protocol buffer types.
func (*Buffer) EncodeMessage ¶
EncodeMessage writes the given message to the buffer.
func (*Buffer) EncodeRawBytes ¶
EncodeRawBytes writes a count-delimited byte buffer to the Buffer. This is the format used for the bytes protocol buffer type and for embedded messages.
func (*Buffer) EncodeTagAndWireType ¶
EncodeTagAndWireType encodes the given field tag and wire type to the buffer. This combines the two values and then writes them as a varint.
func (*Buffer) EncodeVarint ¶
EncodeVarint writes a varint-encoded integer to the Buffer. This is the format for the int32, int64, uint32, uint64, bool, and enum protocol buffer types.
func (*Buffer) IsDeterministic ¶
IsDeterministic returns whether or not this buffer is configured to encode messages deterministically.
func (*Buffer) NestedBuffer ¶ added in v1.19.0
NestedBuffer returns a buffer, using the given bytes, for encoding or decoding a message nested inside the one at this buffer's depth. It returns ErrRecursionDepth if that would exceed the maximum depth.
func (*Buffer) Read ¶
Read implements the io.Reader interface. If there are no bytes remaining in the buffer, it will return 0, io.EOF. Otherwise, it reads max(len(dest), cb.Len()) bytes from input and copies them into dest. It returns the number of bytes copied and a nil error in this case.
func (*Buffer) ReadGroup ¶
ReadGroup reads the input until a "group end" tag is found and returns the data up to that point. Subsequent reads from the buffer will read data after the group end tag. If alloc is true, the data is copied to a new slice before being returned. Otherwise, the returned slice is a view into the buffer's underlying byte slice.
This function correctly handles nested groups: if a "group start" tag is found, then that group's end tag will be included in the returned data.
func (*Buffer) Reset ¶
func (cb *Buffer) Reset()
Reset resets this buffer back to empty. Any subsequent writes/encodes to the buffer will allocate a new backing slice of bytes.
func (*Buffer) SetDeterministic ¶
SetDeterministic sets this buffer to encode messages deterministically. This is useful for tests. But the overhead is non-zero, so it should not likely be used outside of tests. When true, map fields in a message must have their keys sorted before serialization to ensure deterministic output. Otherwise, values in a map field will be serialized in map iteration order.
func (*Buffer) SetMessageCodec ¶ added in v1.19.0
func (cb *Buffer) SetMessageCodec(messageCodec MessageCodec)
SetMessageCodec sets the codec used to encode and decode nested messages.
func (*Buffer) Skip ¶
Skip attempts to skip the given number of bytes in the input. If the input has fewer bytes than the given count, io.ErrUnexpectedEOF is returned and the buffer is unchanged. Otherwise, the given number of bytes are skipped and nil is returned.
func (*Buffer) SkipField ¶
SkipField attempts to skip the value of a field with the given wire type. When consuming a protobuf-encoded stream, it can be called immediately after DecodeTagAndWireType to discard the subsequent data for the field.
func (*Buffer) SkipGroup ¶
SkipGroup is like ReadGroup, except that it discards the data and just advances the buffer to point to the input right *after* the "group end" tag.
type MessageCodec ¶ added in v1.19.0
type MessageCodec interface {
// Marshal encodes msg into buf. It returns false if msg is not a kind
// of message that it handles.
Marshal(buf *Buffer, msg proto.Message) (handled bool, err error)
// Unmarshal decodes the contents of buf into msg. It returns false if
// msg is not a kind of message that it handles.
Unmarshal(buf *Buffer, msg proto.Message) (handled bool, err error)
}
MessageCodec encodes and decodes messages directly to and from a Buffer. This allows the buffer's nesting depth to be tracked through nested messages instead of being reset by an intervening call to proto.Marshal or proto.Unmarshal.