Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Compile ¶
func Compile(md protoreflect.MessageDescriptor, options Options) *tdp.Type
Compile compiles a descriptor into a [Type], for optimized parsing.
Panics if md is too complicated (i.e. it exceeds internal limitations for the compiler).
Types ¶
type Archetype ¶
type Archetype struct {
// The Layout for the field's storage in the message.
Layout layout.Layout
// Bits to allocate for this field.
Bits uint32
// Set if this is a Oneof field.
Oneof bool
// The Getter thunk for this field.
//
// This func MUST be a reference to a function or a global closure, so that
// it is not a GC-managed pointer.
Getter Getter
// Parsers available for different forms of this field.
Parsers []Parser
}
Archetype represents a class of fields that have the same layout within a *message. This includes parsing and access information.
Archetypes are used to organize field allocation and parsing strategies for use in the construction of a [hyperpb.Type].
type ExtensionMap ¶
type ExtensionMap map[protoreflect.FullName][]protoreflect.ExtensionDescriptor
ExtensionMap implements ExtensionResolver using a map.
func ExtensionsFromFile ¶
func ExtensionsFromFile(files *protoregistry.Files) ExtensionMap
ExtensionsFromFile builds an ExtensionMap from the given collection of files.
func (ExtensionMap) FindExtensionsByMessage ¶
func (e ExtensionMap) FindExtensionsByMessage( name protoreflect.FullName, ) []protoreflect.ExtensionDescriptor
FindExtensionsByMessage implements ExtensionResolver.
type ExtensionResolver ¶
type ExtensionResolver interface {
// FindExtensionsByMessage looks up all known extensions for the message with
// the given name.
FindExtensionsByMessage(name protoreflect.FullName) []protoreflect.ExtensionDescriptor
}
ExtensionResolver provides a mechanism for retrieving the extensions associated with some message.
This functionality is provided by protoregistry.Types.RangeExtensionsByMessage, but there is no standard interface for this.
type ExtensionsFromRegistry ¶
type ExtensionsFromRegistry protoregistry.Types
ExtensionsFromRegistry wraps a protoregistry.Types to implement ExtensionResolver.
func (*ExtensionsFromRegistry) FindExtensionsByMessage ¶
func (e *ExtensionsFromRegistry) FindExtensionsByMessage( name protoreflect.FullName, ) []protoreflect.ExtensionDescriptor
FindExtensionsByMessage implements ExtensionResolver.
type Getter ¶
Getter is a strongly-typed version of tdp.Getter.
type Options ¶
type Options struct {
Profile profile.Profile
Extensions ExtensionResolver
// Backend connects a [compiler] with backend configuration defined in another
// package.
//
// This type mostly exists to break a circular dependency.
Backend interface {
// SelectArchetype classifies a field into a particular archetype.
//
// prof is a profile that inquires for the profile of a field within the context
// of parsing fd. It takes a FieldDescriptor rather than a FieldSite because
// the caller is responsible for constructing the FieldSite.
//
// Returns nil if the field is not supported yet.
SelectArchetype(protoreflect.FieldDescriptor, profile.Field) *Archetype
// PopulateMethods gives the backend an opportunity to populate the
// fast-path methods of the generated type.
PopulateMethods(*protoiface.Methods)
}
}
CompileOption is a configuration setting for Compile.
type Parser ¶
type Parser struct {
Kind protowire.Type
// If set, the parser will always Retry this field instead of going to the
// next one if it parses successfully. Used for repeated fields.
Retry bool
// The bool return must always be true.
//
// This func MUST be a reference to a function or a global closure, so that
// it is not a GC-managed pointer.
Thunk vm.Thunk
}
Parser is a parser within an Archetype.