encoding

package
v1.4.11 Latest Latest
Warning

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

Go to latest
Published: Jun 5, 2020 License: MIT Imports: 7 Imported by: 0

Documentation

Overview

Package encoding converts arbitrary objects into byte slices, and vis versa. It also contains helper functions for reading and writing length- prefixed data. See doc/Encoding.md for the full encoding specification.

Index

Constants

View Source
const (
	// DefaultAllocLimit is a reasonable number of bytes that may be allocated
	// when decoding an unspecified object.
	DefaultAllocLimit = 1e6
)

Variables

View Source
var (
	// ErrBadPointer is returned when the given value cannot be decoded into a
	// valid pointer
	ErrBadPointer = errors.New("cannot decode into invalid pointer")

	// ErrInvalidBoolean is returned when the given value cannot be parsed to a
	// boolean.
	ErrInvalidBoolean = errors.New("boolean value was not 0 or 1")
)

Functions

func DecInt64

func DecInt64(b []byte) int64

DecInt64 decodes a slice of 8 bytes into an int64. If len(b) < 8, the slice is padded with zeros.

func DecUint64

func DecUint64(b []byte) uint64

DecUint64 decodes a slice of 8 bytes into a uint64. If len(b) < 8, the slice is padded with zeros.

func EncInt64

func EncInt64(i int64) (b []byte)

EncInt64 encodes an int64 as a slice of 8 bytes.

func EncUint64

func EncUint64(i uint64) (b []byte)

EncUint64 encodes a uint64 as a slice of 8 bytes.

func Marshal

func Marshal(v interface{}) []byte

Marshal returns the encoding of v. For encoding details, see the package docstring.

func MarshalAll

func MarshalAll(vs ...interface{}) []byte

MarshalAll encodes all of its inputs and returns their concatenation.

func ReadFile added in v0.3.1

func ReadFile(filename string, v interface{}) error

ReadFile reads the contents of a file and decodes them into v.

func ReadObject

func ReadObject(r io.Reader, obj interface{}, maxLen uint64) error

ReadObject reads and decodes a length-prefixed and marshalled object.

func ReadPrefixedBytes added in v1.3.4

func ReadPrefixedBytes(r io.Reader, maxLen uint64) ([]byte, error)

ReadPrefixedBytes reads an 8-byte length prefixes, followed by the number of bytes specified in the prefix. The operation is aborted if the prefix exceeds a specified maximum length.

func Unmarshal

func Unmarshal(b []byte, v interface{}) error

Unmarshal decodes the encoded value b and stores it in v, which must be a pointer. The decoding rules are the inverse of those specified in the package docstring for marshaling.

func UnmarshalAll added in v1.0.0

func UnmarshalAll(b []byte, vs ...interface{}) error

UnmarshalAll decodes the encoded values in b and stores them in vs, which must be pointers.

func WriteFile added in v0.3.1

func WriteFile(filename string, v interface{}) error

WriteFile writes v to a file. The file will be created if it does not exist.

func WriteInt added in v1.2.0

func WriteInt(w io.Writer, i int) error

WriteInt writes i to w.

func WriteObject

func WriteObject(w io.Writer, v interface{}) error

WriteObject writes a length-prefixed object to w.

func WritePrefixedBytes added in v1.3.4

func WritePrefixedBytes(w io.Writer, data []byte) error

WritePrefixedBytes writes a length-prefixed byte slice to w.

func WriteUint64 added in v1.2.0

func WriteUint64(w io.Writer, u uint64) error

WriteUint64 writes u to w.

Types

type Decoder added in v0.3.1

type Decoder struct {
	// contains filtered or unexported fields
}

A Decoder reads and decodes values from an input stream. It also provides helper methods for writing custom SiaUnmarshaler implementations. These methods do not return errors, but instead set the value of d.Err(). Once d.Err() is set, future operations become no-ops.

func NewDecoder added in v0.3.1

func NewDecoder(r io.Reader, maxAlloc int) *Decoder

NewDecoder converts r to a Decoder. maxAlloc is the maximum number of bytes that may be allocated by the decoder.

func (*Decoder) Decode added in v0.3.1

func (d *Decoder) Decode(v interface{}) (err error)

Decode reads the next encoded value from its input stream and stores it in v, which must be a pointer. The decoding rules are the inverse of those specified in the package docstring.

func (*Decoder) DecodeAll added in v1.0.0

func (d *Decoder) DecodeAll(vs ...interface{}) error

DecodeAll decodes a variable number of arguments.

func (*Decoder) Err added in v1.3.4

func (d *Decoder) Err() error

Err returns the first non-nil error encountered by d.

func (*Decoder) NextBool added in v1.3.4

func (d *Decoder) NextBool() bool

NextBool reads the next byte and returns it as a bool.

func (*Decoder) NextPrefix added in v1.3.4

func (d *Decoder) NextPrefix(elemSize uintptr) uint64

NextPrefix is like NextUint64, but performs sanity checks on the prefix. Specifically, if the prefix multiplied by elemSize exceeds MaxSliceSize, NextPrefix returns 0 and sets d.Err().

func (*Decoder) NextUint64 added in v1.3.4

func (d *Decoder) NextUint64() uint64

NextUint64 reads the next 8 bytes and returns them as a uint64.

func (*Decoder) Read added in v1.0.0

func (d *Decoder) Read(p []byte) (int, error)

Read implements the io.Reader interface.

func (*Decoder) ReadByte added in v1.4.9

func (d *Decoder) ReadByte() (byte, error)

ReadByte implements the io.ByteReader interface.

func (*Decoder) ReadFull added in v1.3.4

func (d *Decoder) ReadFull(p []byte)

ReadFull is shorthand for io.ReadFull(d, p).

func (*Decoder) ReadPrefixedBytes added in v1.3.4

func (d *Decoder) ReadPrefixedBytes() []byte

ReadPrefixedBytes reads a length-prefix, allocates a byte slice with that length, reads into the byte slice, and returns it. If the byte slice would exceed the allocation limit, ReadPrefixedBytes returns nil and sets d.Err().

type Encoder added in v0.3.1

type Encoder struct {
	// contains filtered or unexported fields
}

An Encoder writes objects to an output stream. It also provides helper methods for writing custom SiaMarshaler implementations. All of its methods become no-ops after the Encoder encounters a Write error.

func NewEncoder added in v0.3.1

func NewEncoder(w io.Writer) *Encoder

NewEncoder converts w to an Encoder.

func (*Encoder) Encode added in v0.3.1

func (e *Encoder) Encode(v interface{}) error

Encode writes the encoding of v to the stream. For encoding details, see the package docstring.

func (*Encoder) EncodeAll added in v1.0.0

func (e *Encoder) EncodeAll(vs ...interface{}) error

EncodeAll encodes a variable number of arguments.

func (*Encoder) Err added in v1.3.4

func (e *Encoder) Err() error

Err returns the first non-nil error encountered by e.

func (*Encoder) Write added in v1.3.4

func (e *Encoder) Write(p []byte) (int, error)

Write implements the io.Writer interface.

func (*Encoder) WriteBool added in v1.3.4

func (e *Encoder) WriteBool(b bool) error

WriteBool writes b to the underlying io.Writer.

func (*Encoder) WriteByte added in v1.3.4

func (e *Encoder) WriteByte(b byte) error

WriteByte implements the io.ByteWriter interface.

func (*Encoder) WriteInt added in v1.3.4

func (e *Encoder) WriteInt(i int) error

WriteInt writes an int value to the underlying io.Writer.

func (*Encoder) WritePrefixedBytes added in v1.3.4

func (e *Encoder) WritePrefixedBytes(p []byte) error

WritePrefixedBytes writes p to the underlying io.Writer, prefixed by its length.

func (*Encoder) WriteUint64 added in v1.3.4

func (e *Encoder) WriteUint64(u uint64) error

WriteUint64 writes a uint64 value to the underlying io.Writer.

type ErrAllocLimitExceeded added in v1.4.0

type ErrAllocLimitExceeded int

ErrAllocLimitExceeded is the error returned when an encoded object exceeds the specified allocation limit.

func (ErrAllocLimitExceeded) Error added in v1.4.0

func (e ErrAllocLimitExceeded) Error() string

Error implements the error interface.

type SiaMarshaler

type SiaMarshaler interface {
	MarshalSia(io.Writer) error
}

A SiaMarshaler can encode and write itself to a stream.

type SiaUnmarshaler

type SiaUnmarshaler interface {
	UnmarshalSia(io.Reader) error
}

A SiaUnmarshaler can read and decode itself from a stream.

Jump to

Keyboard shortcuts

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