Package protoregistry provides data structures to register and lookup
protobuf descriptor types.
NotFound is a sentinel error value to indicate that the type was not found.
Since registry lookup can happen in the critical performance path, resolvers
must return this exact error value, not an error wrapping it.
type ExtensionTypeResolver interface {
FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error)
FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error)
ExtensionTypeResolver is an interface for looking up extensions.
A compliant implementation must deterministically return the same type
if no error is encountered.
The Types type implements this interface.
Files is a registry for looking up or iterating over files and the
descriptors contained within them.
The Find and Range methods are safe for concurrent use.
var GlobalFiles *Files = new(Files)
GlobalFiles is a global registry of file descriptors.
func (r *Files) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error)
FindDescriptorByName looks up a descriptor by the full name.
This returns (nil, NotFound) if not found.
func (r *Files) FindFileByPath(path string) (protoreflect.FileDescriptor, error)
FindFileByPath looks up a file by the path.
This returns (nil, NotFound) if not found.
This returns an error if multiple files have the same path.
func (r *Files) RangeFiles(f func(protoreflect.FileDescriptor) bool)
RangeFiles iterates over all registered files while f returns true.
If multiple files have the same name, RangeFiles iterates over all of them.
The iteration order is undefined.
func (r *Files) RangeFilesByPackage(name protoreflect.FullName, f func(protoreflect.FileDescriptor) bool)
RangeFilesByPackage iterates over all registered files in a given proto package
while f returns true. The iteration order is undefined.
func (r *Files) RegisterFile(file protoreflect.FileDescriptor) error
RegisterFile registers the provided file descriptor.
If any descriptor within the file conflicts with the descriptor of any
previously registered file (e.g., two enums with the same full name),
then the file is not registered and an error is returned.
It is permitted for multiple files to have the same file path.
type MessageTypeResolver interface {
FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error)
FindMessageByURL(url string) (protoreflect.MessageType, error)
MessageTypeResolver is an interface for looking up messages.
A compliant implementation must deterministically return the same type
if no error is encountered.
The Types type implements this interface.
var GlobalTypes *Types = new(Types)
GlobalTypes is the registry used by default for type lookups
unless a local registry is provided by the user.
func (r *Types) FindEnumByName(enum protoreflect.FullName) (protoreflect.EnumType, error)
FindEnumByName looks up an enum by its full name.
E.g., "google.protobuf.Field.Kind".
This returns (nil, NotFound) if not found.
func (r *Types) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error)
FindExtensionByName looks up a extension field by the field's full name.
Note that this is the full name of the field as determined by
where the extension is declared and is unrelated to the full name of the
message being extended.
This returns (nil, NotFound) if not found.
func (r *Types) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error)
FindExtensionByNumber looks up a extension field by the field number
within some parent message, identified by full name.
This returns (nil, NotFound) if not found.
func (r *Types) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error)
FindMessageByName looks up a message by its full name,
e.g. "google.protobuf.Any".
This returns (nil, NotFound) if not found.
func (r *Types) FindMessageByURL(url string) (protoreflect.MessageType, error)
FindMessageByURL looks up a message by a URL identifier.
See documentation on google.protobuf.Any.type_url for the URL format.
This returns (nil, NotFound) if not found.
func (r *Types) NumExtensionsByMessage(message protoreflect.FullName) int
NumExtensionsByMessage reports the number of registered extensions for
a given message type.
func (r *Types) RangeEnums(f func(protoreflect.EnumType) bool)
RangeEnums iterates over all registered enums while f returns true.
Iteration order is undefined.
func (r *Types) RangeExtensions(f func(protoreflect.ExtensionType) bool)
RangeExtensions iterates over all registered extensions while f returns true.
Iteration order is undefined.
func (r *Types) RangeExtensionsByMessage(message protoreflect.FullName, f func(protoreflect.ExtensionType) bool)
RangeExtensionsByMessage iterates over all registered extensions filtered
by a given message type while f returns true. Iteration order is undefined.
func (r *Types) RangeMessages(f func(protoreflect.MessageType) bool)
RangeMessages iterates over all registered messages while f returns true.
Iteration order is undefined.
func (r *Types) RegisterEnum(et protoreflect.EnumType) error
RegisterEnum registers the provided enum type.
If a naming conflict occurs, the type is not registered and an error is returned.
func (r *Types) RegisterExtension(xt protoreflect.ExtensionType) error
RegisterExtension registers the provided extension type.
If a naming conflict occurs, the type is not registered and an error is returned.
func (r *Types) RegisterMessage(mt protoreflect.MessageType) error
RegisterMessage registers the provided message type.
If a naming conflict occurs, the type is not registered and an error is returned.
go.dev uses cookies from Google to deliver and enhance the quality of its services and to
analyze traffic.
Learn more.