Documentation
¶
Index ¶
- Constants
- Variables
- type Decoder
- func (d *Decoder) ReadBool() (bool, error)
- func (d *Decoder) ReadBytes() ([]byte, error)
- func (d *Decoder) ReadBytesInto(length uint32, buf []byte) error
- func (d *Decoder) ReadFloat64() (float64, error)
- func (d *Decoder) ReadInt64() (int64, error)
- func (d *Decoder) ReadLength() (uint32, error)
- func (d *Decoder) ReadNested(expected Tag, fn func(*Decoder) error) error
- func (d *Decoder) ReadString() (string, error)
- func (d *Decoder) ReadStrings() ([]string, error)
- func (d *Decoder) ReadTLVBool(expected Tag) (bool, error)
- func (d *Decoder) ReadTLVBytes(expected Tag) ([]byte, error)
- func (d *Decoder) ReadTLVFloat64(expected Tag) (float64, error)
- func (d *Decoder) ReadTLVInt64(expected Tag) (int64, error)
- func (d *Decoder) ReadTLVString(expected Tag) (string, error)
- func (d *Decoder) ReadTLVTime(expected Tag) (time.Time, error)
- func (d *Decoder) ReadTLVUint8(expected Tag) (uint8, error)
- func (d *Decoder) ReadTLVUint16(expected Tag) (uint16, error)
- func (d *Decoder) ReadTLVUint32(expected Tag) (uint32, error)
- func (d *Decoder) ReadTLVUint64(expected Tag) (uint64, error)
- func (d *Decoder) ReadTag() (Tag, error)
- func (d *Decoder) ReadTime() (time.Time, error)
- func (d *Decoder) ReadTimePrefixed() (time.Time, error)
- func (d *Decoder) ReadUint8() (uint8, error)
- func (d *Decoder) ReadUint16() (uint16, error)
- func (d *Decoder) ReadUint32() (uint32, error)
- func (d *Decoder) ReadUint64() (uint64, error)
- func (d *Decoder) Skip(n uint32) error
- func (d *Decoder) VerifyTag(expected Tag) error
- type Encoder
- func (e *Encoder) WriteBool(v bool) error
- func (e *Encoder) WriteBytes(b []byte) error
- func (e *Encoder) WriteFloat64(v float64) error
- func (e *Encoder) WriteInt64(v int64) error
- func (e *Encoder) WriteLength(length uint32) error
- func (e *Encoder) WriteString(s string) error
- func (e *Encoder) WriteStrings(strs []string) error
- func (e *Encoder) WriteTLVBool(tag Tag, v bool) error
- func (e *Encoder) WriteTLVBytes(tag Tag, b []byte) error
- func (e *Encoder) WriteTLVFloat64(tag Tag, v float64) error
- func (e *Encoder) WriteTLVInt64(tag Tag, v int64) error
- func (e *Encoder) WriteTLVString(tag Tag, s string) error
- func (e *Encoder) WriteTLVTime(tag Tag, t time.Time) error
- func (e *Encoder) WriteTLVUint8(tag Tag, v uint8) error
- func (e *Encoder) WriteTLVUint16(tag Tag, v uint16) error
- func (e *Encoder) WriteTLVUint32(tag Tag, v uint32) error
- func (e *Encoder) WriteTLVUint64(tag Tag, v uint64) error
- func (e *Encoder) WriteTag(tag Tag) error
- func (e *Encoder) WriteTime(t time.Time) error
- func (e *Encoder) WriteUint8(v uint8) error
- func (e *Encoder) WriteUint16(v uint16) error
- func (e *Encoder) WriteUint32(v uint32) error
- func (e *Encoder) WriteUint64(v uint64) error
- type Tag
- type UnexpectedTagError
Constants ¶
const ( // Default safety limits DefaultMaxStringSize = 1 << 20 // 1 MB DefaultMaxBytesSize = 10 << 20 // 10 MB DefaultMaxListCount = 1000 )
Variables ¶
var ( ErrPayloadTooLarge = errors.New("ztlv: payload exceeds configured limit") ErrListTooLarge = errors.New("ztlv: list count exceeds configured limit") ErrShortBuffer = errors.New("ztlv: buffer too short") ErrInvalidTag = errors.New("ztlv: invalid tag found") ErrInvalidLength = errors.New("ztlv: invalid length for type") )
Functions ¶
This section is empty.
Types ¶
type Decoder ¶
type Decoder struct {
MaxStringSize uint32
MaxBytesSize uint32
MaxListCount uint32
// contains filtered or unexported fields
}
func NewDecoder ¶
func (*Decoder) ReadBytes ¶
ReadBytes is optimized for a single allocation. It is "Low Alloc" but safe (returns a clean copy).
func (*Decoder) ReadBytesInto ¶
ReadBytesInto enables "Zero Alloc" scenarios if the caller reuses their buffer. Warning: This method reads strictly 'length' bytes. It does NOT read the length prefix itself. The caller must have read the length beforehand (e.g. via ReadLength()).
func (*Decoder) ReadFloat64 ¶
ReadFloat64 reads a float64 (8 bytes, IEEE 754, Big Endian).
func (*Decoder) ReadLength ¶
func (*Decoder) ReadNested ¶
ReadNested handles a TLV container (a TLV that contains other TLVs). It reads the Tag and Length, creates a limited Decoder for the body, and executes the callback.
Security: The nested decoder is strictly limited to the container's length. It prevents reading past the container boundary.
Usage:
err := dec.ReadNested(TagUser, func(d *zerotlv.Decoder) error {
name, _ := d.ReadTLVString(TagName)
age, _ := d.ReadTLVUint8(TagAge)
return nil
})
func (*Decoder) ReadString ¶
ReadString uses "unsafe" optimizations (Go 1.20+) to reduce allocations.
func (*Decoder) ReadStrings ¶
func (*Decoder) ReadTLVBool ¶
ReadTLVBool reads a Tag, verifies it, reads Length (must be 1), then reads Bool.
func (*Decoder) ReadTLVBytes ¶
ReadTLVBytes reads a Tag, verifies it, reads Length, then reads Bytes.
func (*Decoder) ReadTLVFloat64 ¶
ReadTLVFloat64 reads a Tag, verifies it, reads Length (must be 8), then reads Float64.
func (*Decoder) ReadTLVInt64 ¶
ReadTLVInt64 reads a Tag, verifies it, reads Length (must be 8), then reads Int64.
func (*Decoder) ReadTLVString ¶
ReadTLVString reads a Tag, verifies it, reads Length, then reads String.
func (*Decoder) ReadTLVTime ¶
ReadTLVTime reads a Tag, verifies it, reads Length (must be 12), then reads Time.
func (*Decoder) ReadTLVUint8 ¶
ReadTLVUint8 reads a Tag, verifies it, reads Length (must be 1), then reads Uint8.
func (*Decoder) ReadTLVUint16 ¶
ReadTLVUint16 reads a Tag, verifies it, reads Length (must be 2), then reads Uint16.
func (*Decoder) ReadTLVUint32 ¶
ReadTLVUint32 reads a Tag, verifies it, reads Length (must be 4), then reads Uint32.
func (*Decoder) ReadTLVUint64 ¶
ReadTLVUint64 reads a Tag, verifies it, reads Length (must be 8), then reads Uint64.
func (*Decoder) ReadTime ¶
ReadTime decodes a robust timestamp (Seconds + Nanoseconds). Note: This reads strictly 12 bytes. It does NOT read a length prefix. Use ReadTimePrefixed if you are using standard TLV (WriteTLVTime).
func (*Decoder) ReadTimePrefixed ¶
ReadTimePrefixed reads a Length prefix, verifies it is 12, and then reads the Time. This is the secure counterpart to WriteTLVTime.
func (*Decoder) ReadUint16 ¶
ReadUint16 reads a uint16 (2 bytes, Big Endian).
func (*Decoder) ReadUint32 ¶
ReadUint32 reads a uint32 (4 bytes, Big Endian).
func (*Decoder) ReadUint64 ¶
ReadUint64 reads a uint64 (8 bytes, Big Endian).
type Encoder ¶
type Encoder struct {
// contains filtered or unexported fields
}
Encoder remains lightweight. Allocations are primarily handled by the underlying Writer.
func NewEncoder ¶
func (*Encoder) WriteBytes ¶
WriteBytes writes a standard byte slice.
func (*Encoder) WriteFloat64 ¶
WriteFloat64 writes a float64 (8 bytes, IEEE 754, Big Endian).
func (*Encoder) WriteInt64 ¶
WriteInt64 writes an int64 (8 bytes, Big Endian).
func (*Encoder) WriteLength ¶
func (*Encoder) WriteString ¶
func (*Encoder) WriteStrings ¶
func (*Encoder) WriteTLVBool ¶
WriteTLVBool writes a Tag, Length (1), then the Bool (1 byte).
func (*Encoder) WriteTLVBytes ¶
WriteTLVBytes writes a Tag, then the Length of the bytes, then the Bytes themselves.
func (*Encoder) WriteTLVFloat64 ¶
WriteTLVFloat64 writes a Tag, Length (8), then the Float64 (8 bytes).
func (*Encoder) WriteTLVInt64 ¶
WriteTLVInt64 writes a Tag, Length (8), then the Int64 (8 bytes).
func (*Encoder) WriteTLVString ¶
WriteTLVString writes a Tag, then the Length of the string, then the String itself.
func (*Encoder) WriteTLVTime ¶
WriteTLVTime writes a Tag, then the Length of the time (12 bytes), then the Time itself.
func (*Encoder) WriteTLVUint8 ¶
WriteTLVUint8 writes a Tag, Length (1), then the Uint8 (1 byte).
func (*Encoder) WriteTLVUint16 ¶
WriteTLVUint16 writes a Tag, Length (2), then the Uint16 (2 bytes).
func (*Encoder) WriteTLVUint32 ¶
WriteTLVUint32 writes a Tag, Length (4), then the Uint32 (4 bytes).
func (*Encoder) WriteTLVUint64 ¶
WriteTLVUint64 writes a Tag, Length (8), then the Uint64 (8 bytes).
func (*Encoder) WriteTime ¶
WriteTime encodes a timestamp robustly: compatible with all dates, avoids Year 2038 issues.
func (*Encoder) WriteUint8 ¶
WriteUint8 writes a uint8 (1 byte).
func (*Encoder) WriteUint16 ¶
WriteUint16 writes a uint16 (2 bytes, Big Endian).
func (*Encoder) WriteUint32 ¶
WriteUint32 writes a uint32 (4 bytes, Big Endian).
func (*Encoder) WriteUint64 ¶
WriteUint64 writes a uint64 (8 bytes, Big Endian).
type UnexpectedTagError ¶
UnexpectedTagError is returned when the read tag does not match the expected tag.
func (*UnexpectedTagError) Error ¶
func (e *UnexpectedTagError) Error() string