Documentation ¶
Overview ¶
Package msgp is the runtime support library for the msgp code generator (http://github.com/dchenk/msgp).
This package defines the utilities used by the msgp code generator for encoding and decoding MessagePack from []byte and io.Reader/io.Writer types. Most things here are intended to be used only in programs that use the msgp code generator, the point being to avoid runtime reflection.
This package defines four families of functions:
- AppendXxxx() appends an object to a []byte in MessagePack encoding.
- ReadXxxxBytes() reads an object from a []byte and returns the remaining bytes.
- (*Writer).WriteXxxx() writes an object to the buffered *Writer type.
- (*Reader).ReadXxxx() reads an object from a buffered *Reader type.
Types that implement the msgp.Encoder and msgp.Decoder interfaces can be written and read from any io.Writer and io.Reader types using
msgp.Encode(io.Writer, msgp.Encoder)
and
msgp.Decode(io.Reader, msgp.Decoder)
There are also methods for converting MessagePack to JSON without an explicit de-serialization step.
For more tips and tricks please visit the wiki at http://github.com/dchenk/msgp
Index ¶
- Constants
- Variables
- func AppendArrayHeader(b []byte, size uint32) []byte
- func AppendBool(b []byte, t bool) []byte
- func AppendByte(b []byte, u byte) []byte
- func AppendBytes(b []byte, data []byte) []byte
- func AppendComplex128(b []byte, c complex128) []byte
- func AppendComplex64(b []byte, c complex64) []byte
- func AppendExtension(b []byte, e Extension) ([]byte, error)
- func AppendFloat32(b []byte, f float32) []byte
- func AppendFloat64(b []byte, f float64) []byte
- func AppendInt(b []byte, i int) []byte
- func AppendInt16(b []byte, i int16) []byte
- func AppendInt32(b []byte, i int32) []byte
- func AppendInt64(b []byte, i int64) []byte
- func AppendInt8(b []byte, i int8) []byte
- func AppendIntf(b []byte, i interface{}) ([]byte, error)
- func AppendMapHeader(b []byte, size uint32) []byte
- func AppendMapStrIntf(b []byte, m map[string]interface{}) ([]byte, error)
- func AppendMapStrStr(b []byte, m map[string]string) []byte
- func AppendNil(b []byte) []byte
- func AppendString(b []byte, s string) []byte
- func AppendTime(b []byte, t time.Time) []byte
- func AppendUint(b []byte, u uint) []byte
- func AppendUint16(b []byte, u uint16) []byte
- func AppendUint32(b []byte, u uint32) []byte
- func AppendUint64(b []byte, u uint64) []byte
- func AppendUint8(b []byte, u uint8) []byte
- func CopyReplace(key string, raw []byte, val []byte) []byte
- func CopyToJSON(dst io.Writer, src io.Reader) (int64, error)
- func Decode(r io.Reader, d Decoder) error
- func Encode(w io.Writer, e Encoder) error
- func GuessSize(i interface{}) int
- func HasKey(key string, raw []byte) bool
- func IsNil(b []byte) bool
- func Locate(key string, raw []byte) []byte
- func ReadArrayHeaderBytes(b []byte) (uint32, []byte, error)
- func ReadBoolBytes(b []byte) (bool, []byte, error)
- func ReadByteBytes(b []byte) (byte, []byte, error)
- func ReadBytesBytes(b []byte, scratch []byte) ([]byte, []byte, error)
- func ReadBytesZC(b []byte) ([]byte, []byte, error)
- func ReadComplex128Bytes(b []byte) (c complex128, o []byte, err error)
- func ReadComplex64Bytes(b []byte) (c complex64, o []byte, err error)
- func ReadExactBytes(b []byte, dst []byte) ([]byte, error)
- func ReadExtensionBytes(b []byte, e Extension) ([]byte, error)
- func ReadFloat32Bytes(b []byte) (float32, []byte, error)
- func ReadFloat64Bytes(b []byte) (float64, []byte, error)
- func ReadInt16Bytes(b []byte) (int16, []byte, error)
- func ReadInt32Bytes(b []byte) (int32, []byte, error)
- func ReadInt64Bytes(b []byte) (int64, []byte, error)
- func ReadInt8Bytes(b []byte) (int8, []byte, error)
- func ReadIntBytes(b []byte) (int, []byte, error)
- func ReadIntfBytes(b []byte) (interface{}, []byte, error)
- func ReadMapHeaderBytes(b []byte) (uint32, []byte, error)
- func ReadMapKeyZC(b []byte) ([]byte, []byte, error)
- func ReadMapStrIntfBytes(b []byte, old map[string]interface{}) (map[string]interface{}, []byte, error)
- func ReadNilBytes(b []byte) ([]byte, error)
- func ReadStringAsBytes(b []byte, scratch []byte) ([]byte, []byte, error)
- func ReadStringBytes(b []byte) (string, []byte, error)
- func ReadStringZC(b []byte) ([]byte, []byte, error)
- func ReadTimeBytes(b []byte) (time.Time, []byte, error)
- func ReadUint16Bytes(b []byte) (uint16, []byte, error)
- func ReadUint32Bytes(b []byte) (uint32, []byte, error)
- func ReadUint64Bytes(b []byte) (uint64, []byte, error)
- func ReadUint8Bytes(b []byte) (uint8, []byte, error)
- func ReadUintBytes(b []byte) (uint, []byte, error)
- func RegisterExtension(typ int8, f func() Extension)
- func Remove(key string, raw []byte) []byte
- func Replace(key string, raw []byte, val []byte) []byte
- func Require(old []byte, extra int) []byte
- func Skip(b []byte) ([]byte, error)
- func UnmarshalAsJSON(w io.Writer, msg []byte) ([]byte, error)
- type ArrayError
- type Decoder
- type Encoder
- type EndlessReader
- type ErrUnsupportedType
- type Error
- type Extension
- type ExtensionTypeError
- type IntOverflow
- type InvalidPrefixError
- type MarshalSizer
- type Marshaler
- type Number
- func (n *Number) AsFloat32(f float32)
- func (n *Number) AsFloat64(f float64)
- func (n *Number) AsInt(i int64)
- func (n *Number) AsUint(u uint64)
- func (n *Number) DecodeMsg(r *Reader) error
- func (n *Number) EncodeMsg(w *Writer) error
- func (n *Number) Float() (float64, bool)
- func (n *Number) Int() (int64, bool)
- func (n *Number) MarshalJSON() ([]byte, error)
- func (n *Number) MarshalMsg(b []byte) ([]byte, error)
- func (n *Number) Msgsize() int
- func (n *Number) String() string
- func (n *Number) Type() Type
- func (n *Number) Uint() (uint64, bool)
- func (n *Number) UnmarshalMsg(b []byte) ([]byte, error)
- type Raw
- type RawExtension
- type Reader
- func (m *Reader) BufferSize() int
- func (m *Reader) Buffered() int
- func (m *Reader) CopyNext(w io.Writer) (int64, error)
- func (m *Reader) IsNil() bool
- func (m *Reader) NextType() (Type, error)
- func (m *Reader) Read(p []byte) (int, error)
- func (m *Reader) ReadArrayHeader() (uint32, error)
- func (m *Reader) ReadBool() (bool, error)
- func (m *Reader) ReadByte() (byte, error)
- func (m *Reader) ReadBytes(scratch []byte) ([]byte, error)
- func (m *Reader) ReadBytesHeader() (uint32, error)
- func (m *Reader) ReadComplex128() (complex128, error)
- func (m *Reader) ReadComplex64() (complex64, error)
- func (m *Reader) ReadExactBytes(into []byte) error
- func (m *Reader) ReadExtension(e Extension) error
- func (m *Reader) ReadFloat32() (float32, error)
- func (m *Reader) ReadFloat64() (float64, error)
- func (m *Reader) ReadFull(p []byte) (int, error)
- func (m *Reader) ReadInt() (int, error)
- func (m *Reader) ReadInt16() (int16, error)
- func (m *Reader) ReadInt32() (int32, error)
- func (m *Reader) ReadInt64() (int64, error)
- func (m *Reader) ReadInt8() (int8, error)
- func (m *Reader) ReadIntf() (interface{}, error)
- func (m *Reader) ReadMapHeader() (uint32, error)
- func (m *Reader) ReadMapKey(scratch []byte) ([]byte, error)
- func (m *Reader) ReadMapKeyPtr() ([]byte, error)
- func (m *Reader) ReadMapStrIntf(mp map[string]interface{}) error
- func (m *Reader) ReadNil() error
- func (m *Reader) ReadString() (string, error)
- func (m *Reader) ReadStringAsBytes(scratch []byte) ([]byte, error)
- func (m *Reader) ReadStringHeader() (sz uint32, err error)
- func (m *Reader) ReadTime() (time.Time, error)
- func (m *Reader) ReadUint() (uint, error)
- func (m *Reader) ReadUint16() (uint16, error)
- func (m *Reader) ReadUint32() (u uint32, err error)
- func (m *Reader) ReadUint64() (uint64, error)
- func (m *Reader) ReadUint8() (uint8, error)
- func (m *Reader) Reset(r io.Reader)
- func (m *Reader) Skip() error
- func (r *Reader) WriteToJSON(w io.Writer) (n int64, err error)
- type Sizer
- type Type
- type TypeError
- type UintOverflow
- type Unmarshaler
- type Writer
- func (mw *Writer) Append(bts ...byte) error
- func (mw *Writer) Flush() error
- func (mw *Writer) OpenSpace() int
- func (mw *Writer) Reset(w io.Writer)
- func (mw *Writer) Write(p []byte) (int, error)
- func (mw *Writer) WriteArrayHeader(sz uint32) error
- func (mw *Writer) WriteBool(b bool) error
- func (mw *Writer) WriteByte(u byte) error
- func (mw *Writer) WriteBytes(b []byte) error
- func (mw *Writer) WriteBytesHeader(sz uint32) error
- func (mw *Writer) WriteComplex128(f complex128) error
- func (mw *Writer) WriteComplex64(f complex64) error
- func (mw *Writer) WriteExtension(e Extension) error
- func (mw *Writer) WriteFloat32(f float32) error
- func (mw *Writer) WriteFloat64(f float64) error
- func (mw *Writer) WriteInt(i int) error
- func (mw *Writer) WriteInt16(i int16) error
- func (mw *Writer) WriteInt32(i int32) error
- func (mw *Writer) WriteInt64(i int64) error
- func (mw *Writer) WriteInt8(i int8) error
- func (mw *Writer) WriteIntf(v interface{}) error
- func (mw *Writer) WriteMapHeader(sz uint32) error
- func (mw *Writer) WriteMapStrIntf(mp map[string]interface{}) (err error)
- func (mw *Writer) WriteMapStrStr(mp map[string]string) (err error)
- func (mw *Writer) WriteNil() error
- func (mw *Writer) WriteString(s string) error
- func (mw *Writer) WriteStringFromBytes(str []byte) error
- func (mw *Writer) WriteStringHeader(sz uint32) error
- func (mw *Writer) WriteTime(t time.Time) error
- func (mw *Writer) WriteUint(u uint) error
- func (mw *Writer) WriteUint16(u uint16) error
- func (mw *Writer) WriteUint32(u uint32) error
- func (mw *Writer) WriteUint64(u uint64) error
- func (mw *Writer) WriteUint8(u uint8) error
Examples ¶
Constants ¶
const ( // Complex64Extension represents an extension for complex64 numbers. Complex64Extension = 3 // Complex128Extension represents an extension for complex128 numbers. Complex128Extension = 4 // TimeExtension represents an extension for timestamps. This is not the timestamp format // defined in the MessagePack specification. TimeExtension = 5 )
const ( Int8Size = 2 Int16Size = 3 Int32Size = 5 Int64Size = 9 Uint8Size = 2 Uint16Size = 3 Uint32Size = 5 Uint64Size = 9 IntSize = Int64Size UintSize = Uint64Size Float64Size = 9 Float32Size = 5 Complex64Size = 10 Complex128Size = 18 ByteSize = 2 BoolSize = 1 NilSize = 1 TimeSize = 15 MapHeaderSize = 5 ArrayHeaderSize = 5 BytesPrefixSize = 5 StringPrefixSize = 5 ExtensionPrefixSize = 6 )
The sizes here are the worst-case (biggest) encoded sizes for each type, including the prefix with the type information. For variable-length types like slices and strings, the total encoded size is the prefix size plus the length of the actual object.
Variables ¶
var ErrShortBytes error = errShort{}
ErrShortBytes is returned when the slice being decoded is too short to contain the contents of the message.
var Nowhere = nwhere{}
Nowhere is an io.Writer to nowhere (used by generated tests).
Functions ¶
func AppendArrayHeader ¶
AppendArrayHeader appends an array header of the given size to b.
func AppendByte ¶
AppendByte appends a byte to b as a uint8 using AppendUint8.
func AppendBytes ¶
AppendBytes appends the data slice to b as MessagePack 'bin' data.
func AppendComplex128 ¶
func AppendComplex128(b []byte, c complex128) []byte
AppendComplex128 appends a complex128 to b as a MessagePack extension.
func AppendComplex64 ¶
AppendComplex64 appends a complex64 to b as a MessagePack extension.
func AppendExtension ¶
AppendExtension appends a MessagePack extension to slice b.
func AppendFloat32 ¶
AppendFloat32 appends a float32 to b.
func AppendFloat64 ¶
AppendFloat64 appends a float64 to b.
func AppendIntf ¶
AppendIntf appends to b the value of i with its concrete type. The type of i must be one of the following:
- bool, float, string, []byte, int, uint, complex, time.Time, or nil
- map[string]interface{} or map[string]string
- []T, where T is another supported type
- *T, where T is another supported type
- type that implements the msgp.Marshaler interface
- type that implements the msgp.Extension interface
func AppendMapHeader ¶
AppendMapHeader appends a map header of the given size (number of elements) to b.
func AppendMapStrIntf ¶
AppendMapStrIntf appends a map[string]interface{} to b as a MessagePack map.
func AppendMapStrStr ¶
AppendMapStrStr appends to b a map with 'str'-type keys and values as a MessagePack map.
func AppendString ¶
AppendString appends a string as a MessagePack 'str' to b.
func AppendTime ¶
AppendTime appends a time.Time to b as a MessagePack extension.
func AppendUint16 ¶
AppendUint16 appends a uint16 to b.
func AppendUint32 ¶
AppendUint32 appends a uint32 to b.
func AppendUint64 ¶
AppendUint64 appends a uint64 to b.
func CopyReplace ¶
CopyReplace works similarly to Replace except that the returned byte slice does not point to the same memory as 'raw'. CopyReplace returns 'nil' if the field doesn't exist or 'raw' isn't a map.
func CopyToJSON ¶
CopyToJSON reads MessagePack from src and copies it as JSON to dst until EOF.
func Decode ¶
Decode decodes d from r.
Example ¶
package main import ( "fmt" "os" "github.com/dchenk/msgp/msgp" ) func main() { // Read a message from a file: file, err := os.Open("my-message") if err != nil { panic(err) } defer file.Close() var theMessage msgp.Number err = msgp.Decode(file, &theMessage) if err != nil { panic(err) } fmt.Print(theMessage.Int()) }
Output:
func Encode ¶
Encode encodes an Encoder to any io.Writer.
Example ¶
package main import ( "os" "github.com/dchenk/msgp/msgp" ) func main() { // Write out a message to a file: file, err := os.Create("my-message") if err != nil { panic(err) } defer file.Close() var theMessage msgp.Number theMessage.AsInt(457) err = msgp.Encode(file, &theMessage) if err != nil { panic(err) } }
Output:
func GuessSize ¶
func GuessSize(i interface{}) int
GuessSize guesses the size of the underlying value of 'i'. If the underlying value is not a simple builtin (or []byte), GuessSize defaults to 512.
func IsNil ¶
IsNil returns true if len(b)>0 and the leading byte is a "nil" MessagePack byte (0xc0).
func Locate ¶
Locate returns a []byte pointing to the field in a MessagePack map with the provided key. (The returned []byte points to a sub-slice of 'raw'; Locate does no allocations.) If the key doesn't exist in the map, a zero-length []byte will be returned.
func ReadArrayHeaderBytes ¶
ReadArrayHeaderBytes reads the array header size off of b and returns the array length and any remaining bytes. Possible errors are ErrShortBytes, TypeError, and InvalidPrefixError.
func ReadBoolBytes ¶
ReadBoolBytes tries to read a float64 from b and return the value and the remaining bytes. Possible errors are ErrShortBytes and TypeError.
func ReadByteBytes ¶
ReadByteBytes is analogous to ReadUint8Bytes
func ReadBytesBytes ¶
ReadBytesBytes reads a 'bin' object from b and returns its value and any remaining bytes. The data is copied to the scratch slice if it's big enough, otherwise a slice is allocated. Possible errors are ErrShortBytes and TypeError.
func ReadBytesZC ¶
ReadBytesZC extracts a 'bin' object from b without copying. The first slice returned points to the same memory as the input slice, and the second slice is any remaining bytes. Possible errors are ErrShortBytes and TypeError.
func ReadComplex128Bytes ¶
func ReadComplex128Bytes(b []byte) (c complex128, o []byte, err error)
ReadComplex128Bytes reads a complex128 extension object from 'b' and returns any remaining bytes. Possible errors are ErrShortBytes, TypeError, InvalidPrefixError, and ExtensionTypeError.
func ReadComplex64Bytes ¶
ReadComplex64Bytes reads a complex64 extension object from b and returns any remaining bytes. Possible errors include ErrShortBytes (not enough bytes in slice b), TypeError{} (object not a complex64), and ExtensionTypeError{} (object an extension of the correct size, but not a complex64)
func ReadExactBytes ¶
ReadExactBytes reads into dst the bytes expected with the next object in b.
func ReadExtensionBytes ¶
ReadExtensionBytes reads an extension from b into e and returns any remaining bytes. Possible errors: - ErrShortBytes ('b' not long enough) - ExtensionTypeError{} (wire type not the same as e.Type()) - TypeError{} (next object not an extension) - InvalidPrefixError - An unmarshal error returned from e.UnmarshalBinary
func ReadFloat32Bytes ¶
ReadFloat32Bytes reads a float32 from b and returns the value and any remaining bytes. Possible errors are ErrShortBytes and TypeError.
func ReadFloat64Bytes ¶
ReadFloat64Bytes reads a float64 from b and returns the value and any remaining bytes. Possible errors are ErrShortBytes and TypeError.
func ReadInt16Bytes ¶
ReadInt16Bytes reads an int16 from b and returns the value and any remaining bytes. Possible errors are ErrShortBytes, TypeError, and IntOverflow.
func ReadInt32Bytes ¶
ReadInt32Bytes reads an int32 from b and returns the value and any remaining bytes. Possible errors include ErrShortBytes (too few bytes in b), TypeError{} (not an int), and IntOverflow{} (value doesn't fit in an int32).
func ReadInt64Bytes ¶
ReadInt64Bytes reads an int64 from b and return the value and the remaining bytes. Errors that can be returned are ErrShortBytes, UintOverflow, InvalidPrefixError, and TypeError.
func ReadInt8Bytes ¶
ReadInt8Bytes tries to read an int16 from b and return the value and the remaining bytes. Possible errors are ErrShortBytes, TypeError, and IntOverflow.
func ReadIntBytes ¶
ReadIntBytes tries to read an int from b and return the value and the remaining bytes. Possible errors are ErrShortBytes, TypeError, and IntOverflow (32-bit platforms only).
func ReadIntfBytes ¶
ReadIntfBytes reads the next object out of b as a raw interface{} and returns any remaining bytes.
func ReadMapHeaderBytes ¶
ReadMapHeaderBytes reads a map header size from b and returns the remaining bytes. Possible errors are ErrShortBytes and TypeError.
func ReadMapKeyZC ¶
ReadMapKeyZC reads a 'str' or 'bin' object (a key to a map element) from b and returns the value and any remaining bytes. Possible errors are ErrShortBytes and TypeError.
func ReadMapStrIntfBytes ¶
func ReadMapStrIntfBytes(b []byte, old map[string]interface{}) (map[string]interface{}, []byte, error)
ReadMapStrIntfBytes reads a map[string]interface{} out of b and returns the map and any remaining bytes. If map old is not nil, it will be cleared and used so that a map does not need to be created.
func ReadNilBytes ¶
ReadNilBytes reads a "nil" byte off of b and returns any remaining bytes. Possible errors are ErrShortBytes, TypeError, and InvalidPrefixError.
func ReadStringAsBytes ¶
ReadStringAsBytes reads a 'str' object into a slice of bytes. The data read is the first slice returned, which may be written to the memory held by the scratch slice if it is large enough (scratch may be nil). The second slice returned contains the remaining bytes in b. Possible errors are ErrShortBytes and TypeError.
func ReadStringBytes ¶
ReadStringBytes reads a 'str' object from b and returns its value and any remaining bytes in b. Possible errors are ErrShortBytes and TypeError.
func ReadStringZC ¶
ReadStringZC reads a MessagePack string field without copying. The returned []byte points to the same memory as the input slice. Possible errors are ErrShortBytes and TypeError.
func ReadTimeBytes ¶
ReadTimeBytes reads a time.Time extension object from b and returns any remaining bytes. Possible errors include ErrShortBytes (not enough bytes in b), TypeError{} (object not a time), and ExtensionTypeError{} (object an extension of the correct size, but not a time.Time).
func ReadUint16Bytes ¶
ReadUint16Bytes tries to read a uint16 from b and return the value and the remaining bytes. Possible errors are ErrShortBytes, TypeError, and UintOverflow.
func ReadUint32Bytes ¶
ReadUint32Bytes tries to read a uint32 from b and return the value and the remaining bytes. Possible errors are ErrShortBytes, TypeError, and UintOverflow.
func ReadUint64Bytes ¶
ReadUint64Bytes reads a uint64 from b and returns the value and any remaining bytes. Possible errors include ErrShortBytes and TypeError.
func ReadUint8Bytes ¶
ReadUint8Bytes tries to read a uint8 from b and return the value and the remaining bytes. Possible errors are ErrShortBytes, TypeError, and UintOverflow.
func ReadUintBytes ¶
ReadUintBytes tries to read a uint from b and return the value and the remaining bytes. Possible errors are ErrShortBytes, TypeError, and UintOverflow (32-bit platforms only).
func RegisterExtension ¶
RegisterExtension registers extensions so that they can be initialized and returned by methods that decode `interface{}` values. This should only be called during initialization. Func f should return a newly-initialized zero value of the extension. Keep in mind that extensions 3, 4, and 5 are reserved for complex64, complex128, and time.Time, respectively, and that MessagePack reserves extension types from -127 to -1.
For example, if you wanted to register a user-defined struct:
msgp.RegisterExtension(10, func() msgp.Extension { &MyExtension{} })
RegisterExtension will panic if you call it multiple times with the same 'typ' argument or if you use a reserved type (3, 4, or 5).
func Remove ¶
Remove removes a key-value pair from 'raw'. It returns 'raw' unchanged if the key didn't exist.
func Replace ¶
Replace takes a key ("key") in a MessagePack map ("raw") and replaces its value with the one provided and returns the new []byte. The returned []byte may point to the same memory as "raw". Replace makes no effort to evaluate the validity of the contents of 'val'. It may use up to the full capacity of 'raw.' Replace returns 'nil' if the field doesn't exist or if the object in 'raw' is not a map.
func Require ¶
Require returns a slice (with the contents of old) having a capacity to fit at least extra number of bytes after the current length. The length of the returned slice is the same as the length of the old slice.
func Skip ¶
Skip skips the next object in slice b and returns the remaining bytes. If the object is a map or array, all of its elements will be skipped. Possible errors are ErrShortBytes (not enough bytes in b) and InvalidPrefixError (bad encoding).
func UnmarshalAsJSON ¶
UnmarshalAsJSON takes raw MessagePack data and writes it as JSON to w. If an error is returned, the bytes not unmarshalled will also be returned. If no errors are encountered, the length of the returned slice will be zero.
Types ¶
type ArrayError ¶
type ArrayError struct {
Wanted, Got uint32
}
An ArrayError error is returned when decoding a fix-sized array of the wrong size.
func (ArrayError) Resumable ¶
func (a ArrayError) Resumable() bool
Resumable is always true for ArrayErrors.
type Decoder ¶
Decoder is the interface implemented by objects that know how to read themselves from a *Reader.
type Encoder ¶
Encoder is the interface implemented by types that know how to write themselves as MessagePack using a *msgp.Writer.
type EndlessReader ¶
type EndlessReader struct {
// contains filtered or unexported fields
}
EndlessReader is an io.Reader that loops over the same data endlessly. It is used for benchmarking.
func NewEndlessReader ¶
func NewEndlessReader(b []byte, tb timer) *EndlessReader
NewEndlessReader returns a new *EndlessReader.
type ErrUnsupportedType ¶
ErrUnsupportedType is returned when a bad argument is supplied to a function that takes `interface{}`.
func (*ErrUnsupportedType) Error ¶
func (e *ErrUnsupportedType) Error() string
Error implements the error interface.
func (*ErrUnsupportedType) Resumable ¶
func (e *ErrUnsupportedType) Resumable() bool
Resumable returns true for ErrUnsupportedType.
type Error ¶
type Error interface { error // Resumable returns whether or not the error means that the stream // of data is malformed and the information is unrecoverable. Resumable() bool }
Error is the interface satisfied by all of the errors that originate from this package.
type Extension ¶
type Extension interface { // ExtensionType returns an int8 that identifies the extension's concrete type. // (Types below zero are reserved by the MessagePack specification.) ExtensionType() int8 // Len returns the length of the data to be encoded. Len() int // MarshalBinaryTo copies the data into the supplied slice, assuming that the // slice has length Len(). MarshalBinaryTo([]byte) error // UnmarshalBinary unmarshals the slice into the object. UnmarshalBinary([]byte) error }
Extension is the interface implemented by types that want to define their own binary encoding.
type ExtensionTypeError ¶
type ExtensionTypeError struct {
Got, Want int8
}
ExtensionTypeError is an error type returned when there is a mis-match between an extension type and the type encoded on the wire.
func (ExtensionTypeError) Error ¶
func (e ExtensionTypeError) Error() string
Error implements the error interface.
func (ExtensionTypeError) Resumable ¶
func (e ExtensionTypeError) Resumable() bool
Resumable returns true for ExtensionTypeError errors.
type IntOverflow ¶
type IntOverflow struct { Value int64 // the value of the integer FailedBitsize int // the bit size that the int64 could not fit into }
An IntOverflow error is returned when an operation would downcast an integer to a type with too few bits to hold its value.
func (IntOverflow) Error ¶
func (i IntOverflow) Error() string
Error implements the error interface.
func (IntOverflow) Resumable ¶
func (i IntOverflow) Resumable() bool
Resumable is always true for overflows.
type InvalidPrefixError ¶
type InvalidPrefixError byte
InvalidPrefixError is returned when a bad encoding uses a prefix that is not recognized in the MessagePack standard. This kind of error is unrecoverable.
func (InvalidPrefixError) Error ¶
func (i InvalidPrefixError) Error() string
Error implements the error interface.
func (InvalidPrefixError) Resumable ¶
func (i InvalidPrefixError) Resumable() bool
Resumable returns false for InvalidPrefixErrors.
type MarshalSizer ¶
MarshalSizer combines the Marshaler and Sizer interfaces.
type Marshaler ¶
Marshaler is the interface implemented by types that know how to marshal themselves as MessagePack. MarshalMsg appends the marshalled form of the object to the provided byte slice, returning the extended slice and any errors encountered.
type Number ¶
type Number struct {
// contains filtered or unexported fields
}
A Number can be an int64, uint64, float32, or float64 internally. It can decode itself from any of the native MessagePack number types. The zero-value of Number is Int(0).
func (*Number) Float ¶
Float returns the number converted to a float64 and says whether or not the underlying type was either a float64 or a float32.
func (*Number) Int ¶
Int returns the number converted to a int64 and says whether or not the underlying type was int64.
func (*Number) MarshalJSON ¶
MarshalJSON implements json.Marshaler.
func (*Number) MarshalMsg ¶
MarshalMsg implements msgp.Marshaler.
func (*Number) Type ¶
Type returns the number's type as one of Float64Type, Float32Type, UintType, or IntType.
type Raw ¶
type Raw []byte
Raw is raw encoded MessagePack. It implements Marshaler, Unmarshaler, Encoder, Decoder, and Sizer. Raw allows you to read and write data without interpreting the contents.
func (*Raw) DecodeMsg ¶
DecodeMsg implements msgp.Decoder. It sets the value of r to be the next object on the wire.
func (Raw) EncodeMsg ¶
EncodeMsg implements msgp.Encoder. It writes the raw bytes to the writer. If r is empty, then "nil" (0xc0) is written instead.
func (*Raw) MarshalJSON ¶
MarshalJSON implements json.Marshaler.
func (Raw) MarshalMsg ¶
MarshalMsg implements msgp.Marshaler. It appends the raw contents of r to the provided byte slice. If r is empty, then "nil" (0xc0) is appended instead.
type RawExtension ¶
RawExtension implements the Extension interface.
func (*RawExtension) ExtensionType ¶
func (r *RawExtension) ExtensionType() int8
ExtensionType implements Extension.ExtensionType, and returns r.Type
func (*RawExtension) MarshalBinaryTo ¶
func (r *RawExtension) MarshalBinaryTo(d []byte) error
MarshalBinaryTo implements Extension.MarshalBinaryTo and returns a copy of r.Data.
func (*RawExtension) UnmarshalBinary ¶
func (r *RawExtension) UnmarshalBinary(b []byte) error
UnmarshalBinary implements Extension.UnmarshalBinary and sets r.Data to the contents of the provided slice.
type Reader ¶
type Reader struct { // R is the buffered reader used to decode MessagePack. Don't use it directly. R *fwd.Reader // contains filtered or unexported fields }
Reader wraps an io.Reader and provides methods to read MessagePack-encoded values from it. Readers are buffered.
func NewReader ¶
NewReader returns a *Reader that reads from the provided reader. The reader will be buffered.
func NewReaderSize ¶
NewReaderSize returns a *Reader with a buffer of the given size. (This is vastly preferable to passing the decoder a reader that is already buffered.)
func (*Reader) BufferSize ¶
BufferSize returns the capacity of the read buffer.
func (*Reader) CopyNext ¶
CopyNext reads the next object from m without decoding it and writes it to w. It avoids unnecessary copies internally.
func (*Reader) ReadArrayHeader ¶
ReadArrayHeader reads the next object as an array header and returns the size of the array.
func (*Reader) ReadByte ¶
ReadByte is analogous to ReadUint8. This is *not* an implementation of io.ByteReader.
func (*Reader) ReadBytes ¶
ReadBytes reads a MessagePack 'bin' object from the reader and returns its value. The scratch slice will be used for storage if it is not nil and large enough.
func (*Reader) ReadBytesHeader ¶
ReadBytesHeader reads the size header of a MessagePack 'bin' object. The user is responsible for dealing with the given number of bytes from the reader in an application-specific way.
func (*Reader) ReadComplex128 ¶
func (m *Reader) ReadComplex128() (complex128, error)
ReadComplex128 reads a complex128 from the reader.
func (*Reader) ReadComplex64 ¶
ReadComplex64 reads a complex64 from the reader.
func (*Reader) ReadExactBytes ¶
ReadExactBytes reads a MessagePack 'bin'-encoded object off of the wire into the provided slice. An ArrayError will be returned if the object is not exactly the length of the input slice.
func (*Reader) ReadExtension ¶
ReadExtension reads the next object from the reader as an extension. ReadExtension will fail if the next object in the stream is not an extension or if e.Type() is not the same as the wire type.
func (*Reader) ReadFloat32 ¶
ReadFloat32 reads a float32 from the reader.
func (*Reader) ReadFloat64 ¶
ReadFloat64 reads a float64 from the reader. If the value on the wire is encoded as a float32, it will be converted to a float64 without losing precision.
func (*Reader) ReadInt64 ¶
ReadInt64 reads an int64 from the reader. If an int64 is not available, this function tries to read an unsigned integer and convert it to an int64 if possible. Errors that can be returned include UintOverflow and TypeError.
func (*Reader) ReadIntf ¶
ReadIntf reads out the next object as a raw interface{}. Arrays are decoded as []interface{}, and maps are decoded as map[string]interface{}. Integers are decoded as int64, and unsigned integers are decoded as uint64.
func (*Reader) ReadMapHeader ¶
ReadMapHeader reads the next object as a map header and returns the size of the map. A TypeError{} is returned if the next object is not a map.
func (*Reader) ReadMapKey ¶
ReadMapKey reads a 'str' or 'bin' object (a key to a map element) from the reader and returns the value as a []byte. It uses scratch for storage if it is large enough.
func (*Reader) ReadMapKeyPtr ¶
ReadMapKeyPtr returns a []byte pointing to the contents of a valid map key. The key cannot be empty, and it must be shorter than the total buffer size of the *Reader. The returned slice is only valid until the next *Reader method call. Be extremely careful when using this method; writing into the returned slice may corrupt future reads.
func (*Reader) ReadMapStrIntf ¶
ReadMapStrIntf reads a MessagePack map into a map[string]interface{}. You must pass a non-nil map into the function.
func (*Reader) ReadString ¶
ReadString reads a UTF-8 string from the reader.
func (*Reader) ReadStringAsBytes ¶
ReadStringAsBytes reads a MessagePack 'str' (UTF-8) string and returns its value as bytes. The scratch slice will be used for storage if it is not nil and large enough.
func (*Reader) ReadStringHeader ¶
ReadStringHeader reads a string header off of the wire. The user is then responsible for dealing with the next sz bytes from the reader in an application-specific manner.
func (*Reader) ReadTime ¶
ReadTime reads a time.Time object from the reader. The returned time's location will be set to time.Local.
func (*Reader) ReadUint16 ¶
ReadUint16 reads a uint16 from the reader.
func (*Reader) ReadUint32 ¶
ReadUint32 reads a uint32 from the reader.
func (*Reader) ReadUint64 ¶
ReadUint64 reads a uint64 from the reader.
func (*Reader) Skip ¶
Skip skips over the next object, regardless of its type. If it is an array or map, the whole array or map will be skipped.
func (*Reader) WriteToJSON ¶
WriteToJSON translates MessagePack from r and writes it as JSON to w until the underlying reader returns io.EOF. WriteToJSON returns the number of bytes written. An error is returned only if reading stops before io.EOF.
type Sizer ¶
type Sizer interface {
Msgsize() int
}
Sizer is an interface implemented by types that can estimate their size when encoded to MessagePack. This interface is optional, but encoding/marshaling implementations may use this as a way to pre-allocate memory for serialization.
type Type ¶
type Type byte
A Type is a MessagePack wire type, including this package's built-in extension types.
const ( // InvalidType is the zero value of Type (not used). InvalidType Type = iota // StrType and the following types are built into the MessagePack standard. StrType BinType MapType ArrayType Float64Type Float32Type BoolType IntType UintType NilType ExtensionType // Complex64Type and the following types represent extensions. Complex64Type Complex128Type TimeType )
type TypeError ¶
type TypeError struct { Method Type // Type expected by method Encoded Type // Type actually encoded }
A TypeError is returned when a particular decoding method is unsuitable for decoding a particular MessagePack value.
type UintOverflow ¶
type UintOverflow struct { Value uint64 // value of the uint FailedBitsize int // the bit size that couldn't fit the value }
A UintOverflow error is returned when an operation would downcast an unsigned integer to a type with too few bits to hold its value.
func (UintOverflow) Error ¶
func (u UintOverflow) Error() string
Error implements the error interface.
func (UintOverflow) Resumable ¶
func (u UintOverflow) Resumable() bool
Resumable is always true for overflows.
type Unmarshaler ¶
Unmarshaler is the interface implemented by objects that know how to unmarshal themselves from MessagePack. UnmarshalMsg unmarshals the object from binary, returning any leftover bytes and any errors encountered.
type Writer ¶
type Writer struct {
// contains filtered or unexported fields
}
Writer is a buffered writer that can be used to write MessagePack objects to an io.Writer. You must call *Writer.Flush() to flush all of the buffered data to the underlying writer.
func NewWriterSize ¶
NewWriterSize creates a Writer with a custom buffer size.
func (*Writer) Append ¶
Append can be used to append a few (no more than the total buffer length) single bytes to the buffer.
func (*Writer) OpenSpace ¶
OpenSpace returns the number of bytes currently free for writing to the write buffer.
func (*Writer) WriteArrayHeader ¶
WriteArrayHeader writes an array header of the given size to the buffer.
func (*Writer) WriteBytes ¶
WriteBytes writes binary data as 'bin' to the writer.
func (*Writer) WriteBytesHeader ¶
WriteBytesHeader writes just the size header df a MessagePack 'bin' object. The user is responsible for then writing sz more bytes into the stream.
func (*Writer) WriteComplex128 ¶
func (mw *Writer) WriteComplex128(f complex128) error
WriteComplex128 writes a complex128 to the writer
func (*Writer) WriteComplex64 ¶
WriteComplex64 writes a complex64 to the writer.
func (*Writer) WriteExtension ¶
WriteExtension writes an extension type to the writer.
func (*Writer) WriteFloat32 ¶
WriteFloat32 writes a float32 to the writer
func (*Writer) WriteFloat64 ¶
WriteFloat64 writes a float64 to the writer
func (*Writer) WriteInt16 ¶
WriteInt16 writes an int16 to the writer.
func (*Writer) WriteInt32 ¶
WriteInt32 writes an int32 to the writer.
func (*Writer) WriteInt64 ¶
WriteInt64 writes an int64 to the writer.
func (*Writer) WriteIntf ¶
WriteIntf writes the concrete type of v. The type of v must be one of the following:
- bool, float, string, []byte, int, uint, complex, time.Time, or nil
- map of supported types, with string keys
- array or slice of supported types
- pointer to a supported type
- type that implements the msgp.Encoder interface
- type that implements the msgp.Extension interface
func (*Writer) WriteMapHeader ¶
WriteMapHeader writes a map header of the given size to the buffer.
func (*Writer) WriteMapStrIntf ¶
WriteMapStrIntf writes a map[string]interface to the writer
func (*Writer) WriteMapStrStr ¶
WriteMapStrStr writes a map[string]string to the writer
func (*Writer) WriteString ¶
WriteString writes a MessagePack string to the writer. (This is NOT an implementation of io.StringWriter)
func (*Writer) WriteStringFromBytes ¶
WriteStringFromBytes writes a 'str' object from a []byte representing a string.
func (*Writer) WriteStringHeader ¶
WriteStringHeader writes just the string size header of a MessagePack 'str' object. The user is responsible for writing sz more valid UTF-8 bytes to the stream.
func (*Writer) WriteTime ¶
WriteTime writes a time.Time object to the wire.
Time is encoded as Unix time, which means that location (time zone) data is removed from the object. The encoded object itself is 12 bytes: 8 bytes for a big-endian 64-bit integer denoting seconds elapsed since "zero" Unix time, followed by 4 bytes for a big-endian 32-bit signed integer denoting the nanosecond offset of the time. This encoding is intended to ease portability across languages.
func (*Writer) WriteUint16 ¶
WriteUint16 writes a uint16 to the writer.
func (*Writer) WriteUint32 ¶
WriteUint32 writes a uint32 to the writer.
func (*Writer) WriteUint64 ¶
WriteUint64 writes a uint64 to the writer.
func (*Writer) WriteUint8 ¶
WriteUint8 writes a uint8 to the writer.