typegen

package module
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Apr 20, 2024 License: MIT Imports: 20 Imported by: 957

README

cbor-gen

Some basic utilities to generate fast path cbor codecs for your types.

License

MIT

Documentation

Index

Constants

View Source
const (
	MajUnsignedInt = 0
	MajNegativeInt = 1
	MajByteString  = 2
	MajTextString  = 3
	MajArray       = 4
	MajMap         = 5
	MajTag         = 6
	MajOther       = 7
)
View Source
const ByteArrayMaxLen = 2 << 20
View Source
const FieldNameSelf = "."

FieldNameSelf is the name of the field that is the marshal target itself. This is used in non-struct types which are handled like transparent structs.

View Source
const MaxLenTag = "maxlen"
View Source
const MaxLength = 8192
View Source
const NoUsrMaxLen = -1

Variables

View Source
var (
	CborBoolFalse = []byte{0xf4}
	CborBoolTrue  = []byte{0xf5}
	CborNull      = []byte{0xf6}
)

Functions

func CborEncodeMajorType

func CborEncodeMajorType(t byte, l uint64) []byte

func CborReadHeader

func CborReadHeader(br io.Reader) (byte, uint64, error)

func CborReadHeaderBuf

func CborReadHeaderBuf(br io.Reader, scratch []byte) (byte, uint64, error)

same as the above, just tries to allocate less by using a passed in scratch buffer

func CborWriteHeader

func CborWriteHeader(w io.Writer, t byte, l uint64) error

func EncodeBool

func EncodeBool(b bool) []byte

func GenMapEncodersForType

func GenMapEncodersForType(gti *GenTypeInfo, w io.Writer) error

GenMapEncodersForType is a convenience wrapper around Gen.GenMapEncodersForType using default options.

func GenTupleEncodersForType

func GenTupleEncodersForType(gti *GenTypeInfo, w io.Writer) error

GenTupleEncodersForType is a convenience wrapper around Gen.GenTupleEncodersForType using default options.

func MakeByteString

func MakeByteString(h []byte) string

func PrintHeaderAndUtilityMethods

func PrintHeaderAndUtilityMethods(w io.Writer, pkg string, typeInfos []*GenTypeInfo) error

PrintHeaderAndUtilityMethods is a convenience wrapper around Gen.PrintHeaderAndUtilityMethods using default options.

func ReadByteArray

func ReadByteArray(br io.Reader, maxlen uint64) ([]byte, error)

func ReadCid

func ReadCid(br io.Reader) (cid.Cid, error)

func ReadString

func ReadString(r io.Reader) (string, error)

func ReadStringBuf deprecated

func ReadStringBuf(r io.Reader, _ []byte) (string, error)

Deprecated: use ReadString

func ReadStringWithMax

func ReadStringWithMax(r io.Reader, maxLength uint64) (string, error)

func ReadTaggedByteArray

func ReadTaggedByteArray(br io.Reader, exptag uint64, maxlen uint64) (bs []byte, err error)
func ScanForLinks(br io.Reader, cb func(cid.Cid)) (err error)

func ValidateCBOR

func ValidateCBOR(b []byte) error

ValidateCBOR validates that a byte array is a single valid CBOR object.

func WriteBool

func WriteBool(w io.Writer, b bool) error

func WriteByteArray

func WriteByteArray(bw io.Writer, bytes []byte) error

WriteByteArray encodes a byte array as a cbor byte-string.

func WriteCid

func WriteCid(w io.Writer, c cid.Cid) error

func WriteCidBuf

func WriteCidBuf(buf []byte, w io.Writer, c cid.Cid) error

func WriteMajorTypeHeader

func WriteMajorTypeHeader(w io.Writer, t byte, l uint64) error

TODO: No matter what I do, this function *still* allocates. Its super frustrating. See issue: https://github.com/golang/go/issues/33160

func WriteMajorTypeHeaderBuf

func WriteMajorTypeHeaderBuf(buf []byte, w io.Writer, t byte, l uint64) error

Same as the above, but uses a passed in buffer to avoid allocations

func WriteMapEncodersToFile

func WriteMapEncodersToFile(fname, pkg string, types ...interface{}) error

WriteMapFileEncodersToFile is a convenience wrapper around Gen.WriteMapEncodersToFile using default options.

func WriteTupleEncodersToFile

func WriteTupleEncodersToFile(fname, pkg string, types ...interface{}) error

WriteTupleFileEncodersToFile is a convenience wrapper around Gen.WriteTupleEncodersToFile using default options.

Types

type BytePeeker

type BytePeeker interface {
	io.Reader
	io.ByteScanner
}

BytePeeker combines the Reader and ByteScanner interfaces.

func GetPeeker

func GetPeeker(r io.Reader) BytePeeker

type CBORMarshaler

type CBORMarshaler interface {
	MarshalCBOR(io.Writer) error
}

type CBORUnmarshaler

type CBORUnmarshaler interface {
	UnmarshalCBOR(io.Reader) error
}

type CborBool

type CborBool bool

func (CborBool) MarshalCBOR

func (cb CborBool) MarshalCBOR(w io.Writer) error

func (*CborBool) UnmarshalCBOR

func (cb *CborBool) UnmarshalCBOR(r io.Reader) error

type CborCid

type CborCid cid.Cid

func (CborCid) MarshalCBOR

func (c CborCid) MarshalCBOR(w io.Writer) error

func (*CborCid) UnmarshalCBOR

func (c *CborCid) UnmarshalCBOR(r io.Reader) error

type CborInt

type CborInt int64

func (CborInt) MarshalCBOR

func (ci CborInt) MarshalCBOR(w io.Writer) error

func (*CborInt) UnmarshalCBOR

func (ci *CborInt) UnmarshalCBOR(r io.Reader) error

type CborReader

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

func NewCborReader

func NewCborReader(r io.Reader) *CborReader

func (*CborReader) Read

func (cr *CborReader) Read(p []byte) (n int, err error)

func (*CborReader) ReadByte

func (cr *CborReader) ReadByte() (byte, error)

func (*CborReader) ReadHeader

func (cr *CborReader) ReadHeader() (byte, uint64, error)

func (*CborReader) SetReader

func (cr *CborReader) SetReader(r io.Reader)

func (*CborReader) UnreadByte

func (cr *CborReader) UnreadByte() error

type CborTime

type CborTime time.Time

func (CborTime) MarshalCBOR

func (ct CborTime) MarshalCBOR(w io.Writer) error

func (CborTime) MarshalJSON

func (ct CborTime) MarshalJSON() ([]byte, error)

func (CborTime) Time

func (ct CborTime) Time() time.Time

func (*CborTime) UnmarshalCBOR

func (ct *CborTime) UnmarshalCBOR(r io.Reader) error

func (*CborTime) UnmarshalJSON

func (ct *CborTime) UnmarshalJSON(b []byte) error

type CborWriter

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

func NewCborWriter

func NewCborWriter(w io.Writer) *CborWriter

func (*CborWriter) CborWriteHeader

func (cw *CborWriter) CborWriteHeader(t byte, l uint64) error

func (*CborWriter) SetWriter

func (cw *CborWriter) SetWriter(w io.Writer)

func (*CborWriter) Write

func (cw *CborWriter) Write(p []byte) (n int, err error)

func (*CborWriter) WriteMajorTypeHeader

func (cw *CborWriter) WriteMajorTypeHeader(t byte, l uint64) error

func (*CborWriter) WriteString

func (cw *CborWriter) WriteString(s string) (int, error)

type Deferred

type Deferred struct {
	Raw []byte
}

func (*Deferred) MarshalCBOR

func (d *Deferred) MarshalCBOR(w io.Writer) error

func (*Deferred) UnmarshalCBOR

func (d *Deferred) UnmarshalCBOR(br io.Reader) (err error)

type Field

type Field struct {
	Name    string
	MapKey  string
	Pointer bool
	Type    reflect.Type
	Pkg     string
	Const   *string

	OmitEmpty   bool
	PreserveNil bool
	IterLabel   string

	MaxLen int
}

func (Field) ElemName

func (f Field) ElemName() string

func (Field) EmptyVal

func (f Field) EmptyVal() (string, error)

func (Field) IsArray

func (f Field) IsArray() bool

func (Field) Len

func (f Field) Len() int

func (Field) TypeName

func (f Field) TypeName() string

type Gen

type Gen struct {
	MaxArrayLength  int // Default: 8192 (MaxLength)
	MaxByteLength   int // Default: 2<<20 (ByteArrayMaxLen)
	MaxStringLength int // Default: 8192 (MaxLength)
}

Gen is a configurable code generator for CBOR types. Use this instead of the convenience functions to have more control over the generated code.

func (Gen) GenMapEncodersForType

func (g Gen) GenMapEncodersForType(gti *GenTypeInfo, w io.Writer) error

Generates 'tuple representation' cbor encoders for the given type

func (Gen) GenTupleEncodersForType

func (g Gen) GenTupleEncodersForType(gti *GenTypeInfo, w io.Writer) error

Generates 'tuple representation' cbor encoders for the given type

func (Gen) PrintHeaderAndUtilityMethods

func (g Gen) PrintHeaderAndUtilityMethods(w io.Writer, pkg string, typeInfos []*GenTypeInfo) error

func (Gen) WriteMapEncodersToFile

func (g Gen) WriteMapEncodersToFile(fname, pkg string, types ...interface{}) error

WriteMapFileEncodersToFile generates map backed MarshalCBOR and UnmarshalCBOR implementations for the given types in the specified file, with the specified package name.

The MarshalCBOR and UnmarshalCBOR implementations will marshal/unmarshal each type's fields as a map of field names to field values.

func (Gen) WriteTupleEncodersToFile

func (g Gen) WriteTupleEncodersToFile(fname, pkg string, types ...interface{}) error

WriteTupleFileEncodersToFile generates array backed MarshalCBOR and UnmarshalCBOR implementations for the given types in the specified file, with the specified package name.

The MarshalCBOR and UnmarshalCBOR implementations will marshal/unmarshal each type's fields as a fixed-length CBOR array of field values.

type GenTypeInfo

type GenTypeInfo struct {
	Name        string
	Fields      []Field
	Transparent bool
}

func ParseTypeInfo

func ParseTypeInfo(itype interface{}) (*GenTypeInfo, error)

func (*GenTypeInfo) Imports

func (gti *GenTypeInfo) Imports() []Import

func (GenTypeInfo) MapHeader

func (gti GenTypeInfo) MapHeader() []byte

func (GenTypeInfo) MapHeaderAsByteString

func (gti GenTypeInfo) MapHeaderAsByteString() string

func (GenTypeInfo) TupleHeader

func (gti GenTypeInfo) TupleHeader() []byte

func (GenTypeInfo) TupleHeaderAsByteString

func (gti GenTypeInfo) TupleHeaderAsByteString() string

type Import

type Import struct {
	Name, PkgPath string
}

func ImportsForType

func ImportsForType(currPkg string, t reflect.Type) []Import

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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