Source File
type.go
Belonging Package
google.golang.org/protobuf/reflect/protoreflect
// Copyright 2018 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package protoreflect// Descriptor provides a set of accessors that are common to every descriptor.// Each descriptor type wraps the equivalent google.protobuf.XXXDescriptorProto,// but provides efficient lookup and immutability.//// Each descriptor is comparable. Equality implies that the two types are// exactly identical. However, it is possible for the same semantically// identical proto type to be represented by multiple type descriptors.//// For example, suppose we have t1 and t2 which are both an [MessageDescriptor].// If t1 == t2, then the types are definitely equal and all accessors return// the same information. However, if t1 != t2, then it is still possible that// they still represent the same proto type (e.g., t1.FullName == t2.FullName).// This can occur if a descriptor type is created dynamically, or multiple// versions of the same proto type are accidentally linked into the Go binary.type Descriptor interface {// ParentFile returns the parent file descriptor that this descriptor// is declared within. The parent file for the file descriptor is itself.//// Support for this functionality is optional and may return nil.ParentFile() FileDescriptor// Parent returns the parent containing this descriptor declaration.// The following shows the mapping from child type to possible parent types://// ╔═════════════════════╤═══════════════════════════════════╗// ║ Child type │ Possible parent types ║// ╠═════════════════════╪═══════════════════════════════════╣// ║ FileDescriptor │ nil ║// ║ MessageDescriptor │ FileDescriptor, MessageDescriptor ║// ║ FieldDescriptor │ FileDescriptor, MessageDescriptor ║// ║ OneofDescriptor │ MessageDescriptor ║// ║ EnumDescriptor │ FileDescriptor, MessageDescriptor ║// ║ EnumValueDescriptor │ EnumDescriptor ║// ║ ServiceDescriptor │ FileDescriptor ║// ║ MethodDescriptor │ ServiceDescriptor ║// ╚═════════════════════╧═══════════════════════════════════╝//// Support for this functionality is optional and may return nil.Parent() Descriptor// Index returns the index of this descriptor within its parent.// It returns 0 if the descriptor does not have a parent or if the parent// is unknown.Index() int// Syntax is the protobuf syntax.Syntax() Syntax // e.g., Proto2 or Proto3// Name is the short name of the declaration (i.e., FullName.Name).Name() Name // e.g., "Any"// FullName is the fully-qualified name of the declaration.//// The FullName is a concatenation of the full name of the type that this// type is declared within and the declaration name. For example,// field "foo_field" in message "proto.package.MyMessage" is// uniquely identified as "proto.package.MyMessage.foo_field".// Enum values are an exception to the rule (see EnumValueDescriptor).FullName() FullName // e.g., "google.protobuf.Any"// IsPlaceholder reports whether type information is missing since a// dependency is not resolved, in which case only name information is known.//// Placeholder types may only be returned by the following accessors// as a result of unresolved dependencies://// ╔═══════════════════════════════════╤═════════════════════╗// ║ Accessor │ Descriptor ║// ╠═══════════════════════════════════╪═════════════════════╣// ║ FileImports.FileDescriptor │ FileDescriptor ║// ║ FieldDescriptor.Enum │ EnumDescriptor ║// ║ FieldDescriptor.Message │ MessageDescriptor ║// ║ FieldDescriptor.DefaultEnumValue │ EnumValueDescriptor ║// ║ FieldDescriptor.ContainingMessage │ MessageDescriptor ║// ║ MethodDescriptor.Input │ MessageDescriptor ║// ║ MethodDescriptor.Output │ MessageDescriptor ║// ╚═══════════════════════════════════╧═════════════════════╝//// If true, only Name and FullName are valid.// For FileDescriptor, the Path is also valid.IsPlaceholder() bool// Options returns the descriptor options. The caller must not modify// the returned value.//// To avoid a dependency cycle, this function returns a proto.Message value.// The proto message type returned for each descriptor type is as follows:// ╔═════════════════════╤══════════════════════════════════════════╗// ║ Go type │ Protobuf message type ║// ╠═════════════════════╪══════════════════════════════════════════╣// ║ FileDescriptor │ google.protobuf.FileOptions ║// ║ EnumDescriptor │ google.protobuf.EnumOptions ║// ║ EnumValueDescriptor │ google.protobuf.EnumValueOptions ║// ║ MessageDescriptor │ google.protobuf.MessageOptions ║// ║ FieldDescriptor │ google.protobuf.FieldOptions ║// ║ OneofDescriptor │ google.protobuf.OneofOptions ║// ║ ServiceDescriptor │ google.protobuf.ServiceOptions ║// ║ MethodDescriptor │ google.protobuf.MethodOptions ║// ╚═════════════════════╧══════════════════════════════════════════╝//// This method returns a typed nil-pointer if no options are present.// The caller must import the descriptorpb package to use this.Options() ProtoMessagedoNotImplement}// FileDescriptor describes the types in a complete proto file and// corresponds with the google.protobuf.FileDescriptorProto message.//// Top-level declarations:// [EnumDescriptor], [MessageDescriptor], [FieldDescriptor], and/or [ServiceDescriptor].type FileDescriptor interface {Descriptor // Descriptor.FullName is identical to Package// Path returns the file name, relative to the source tree root.Path() string // e.g., "path/to/file.proto"// Package returns the protobuf package namespace.Package() FullName // e.g., "google.protobuf"// Imports is a list of imported proto files.Imports() FileImports// Enums is a list of the top-level enum declarations.Enums() EnumDescriptors// Messages is a list of the top-level message declarations.Messages() MessageDescriptors// Extensions is a list of the top-level extension declarations.Extensions() ExtensionDescriptors// Services is a list of the top-level service declarations.Services() ServiceDescriptors// SourceLocations is a list of source locations.SourceLocations() SourceLocationsisFileDescriptor}type isFileDescriptor interface{ ProtoType(FileDescriptor) }// FileImports is a list of file imports.type FileImports interface {// Len reports the number of files imported by this proto file.Len() int// Get returns the ith FileImport. It panics if out of bounds.Get(i int) FileImportdoNotImplement}// FileImport is the declaration for a proto file import.type FileImport struct {// FileDescriptor is the file type for the given import.// It is a placeholder descriptor if IsWeak is set or if a dependency has// not been regenerated to implement the new reflection APIs.FileDescriptor// IsPublic reports whether this is a public import, which causes this file// to alias declarations within the imported file. The intended use cases// for this feature is the ability to move proto files without breaking// existing dependencies.//// The current file and the imported file must be within proto package.IsPublic bool// Deprecated: support for weak fields has been removed.IsWeak bool}// MessageDescriptor describes a message and// corresponds with the google.protobuf.DescriptorProto message.//// Nested declarations:// [FieldDescriptor], [OneofDescriptor], [FieldDescriptor], [EnumDescriptor],// and/or [MessageDescriptor].type MessageDescriptor interface {Descriptor// IsMapEntry indicates that this is an auto-generated message type to// represent the entry type for a map field.//// Map entry messages have only two fields:// • a "key" field with a field number of 1// • a "value" field with a field number of 2// The key and value types are determined by these two fields.//// If IsMapEntry is true, it implies that FieldDescriptor.IsMap is true// for some field with this message type.IsMapEntry() bool// Fields is a list of nested field declarations.Fields() FieldDescriptors// Oneofs is a list of nested oneof declarations.Oneofs() OneofDescriptors// ReservedNames is a list of reserved field names.ReservedNames() Names// ReservedRanges is a list of reserved ranges of field numbers.ReservedRanges() FieldRanges// RequiredNumbers is a list of required field numbers.// In Proto3, it is always an empty list.RequiredNumbers() FieldNumbers// ExtensionRanges is the field ranges used for extension fields.// In Proto3, it is always an empty ranges.ExtensionRanges() FieldRanges// ExtensionRangeOptions returns the ith extension range options.//// To avoid a dependency cycle, this method returns a proto.Message] value,// which always contains a google.protobuf.ExtensionRangeOptions message.// This method returns a typed nil-pointer if no options are present.// The caller must import the descriptorpb package to use this.ExtensionRangeOptions(i int) ProtoMessage// Enums is a list of nested enum declarations.Enums() EnumDescriptors// Messages is a list of nested message declarations.Messages() MessageDescriptors// Extensions is a list of nested extension declarations.Extensions() ExtensionDescriptorsisMessageDescriptor}type isMessageDescriptor interface{ ProtoType(MessageDescriptor) }// MessageType encapsulates a [MessageDescriptor] with a concrete Go implementation.// It is recommended that implementations of this interface also implement the// [MessageFieldTypes] interface.type MessageType interface {// New returns a newly allocated empty message.// It may return nil for synthetic messages representing a map entry.New() Message// Zero returns an empty, read-only message.// It may return nil for synthetic messages representing a map entry.Zero() Message// Descriptor returns the message descriptor.//// Invariant: t.Descriptor() == t.New().Descriptor()Descriptor() MessageDescriptor}// MessageFieldTypes extends a [MessageType] by providing type information// regarding enums and messages referenced by the message fields.type MessageFieldTypes interface {MessageType// Enum returns the EnumType for the ith field in MessageDescriptor.Fields.// It returns nil if the ith field is not an enum kind.// It panics if out of bounds.//// Invariant: mt.Enum(i).Descriptor() == mt.Descriptor().Fields(i).Enum()Enum(i int) EnumType// Message returns the MessageType for the ith field in MessageDescriptor.Fields.// It returns nil if the ith field is not a message or group kind.// It panics if out of bounds.//// Invariant: mt.Message(i).Descriptor() == mt.Descriptor().Fields(i).Message()Message(i int) MessageType}// MessageDescriptors is a list of message declarations.type MessageDescriptors interface {// Len reports the number of messages.Len() int// Get returns the ith MessageDescriptor. It panics if out of bounds.Get(i int) MessageDescriptor// ByName returns the MessageDescriptor for a message named s.// It returns nil if not found.ByName(s Name) MessageDescriptordoNotImplement}// FieldDescriptor describes a field within a message and// corresponds with the google.protobuf.FieldDescriptorProto message.//// It is used for both normal fields defined within the parent message// (e.g., [MessageDescriptor.Fields]) and fields that extend some remote message// (e.g., [FileDescriptor.Extensions] or [MessageDescriptor.Extensions]).type FieldDescriptor interface {Descriptor// Number reports the unique number for this field.Number() FieldNumber// Cardinality reports the cardinality for this field.Cardinality() Cardinality// Kind reports the basic kind for this field.Kind() Kind// HasJSONName reports whether this field has an explicitly set JSON name.HasJSONName() bool// JSONName reports the name used for JSON serialization.// It is usually the camel-cased form of the field name.// Extension fields are represented by the full name surrounded by brackets.JSONName() string// TextName reports the name used for text serialization.// It is usually the name of the field, except that groups use the name// of the inlined message, and extension fields are represented by the// full name surrounded by brackets.TextName() string// HasPresence reports whether the field distinguishes between unpopulated// and default values.HasPresence() bool// IsExtension reports whether this is an extension field. If false,// then Parent and ContainingMessage refer to the same message.// Otherwise, ContainingMessage and Parent likely differ.IsExtension() bool// HasOptionalKeyword reports whether the "optional" keyword was explicitly// specified in the source .proto file.HasOptionalKeyword() bool// Deprecated: support for weak fields has been removed.IsWeak() bool// IsPacked reports whether repeated primitive numeric kinds should be// serialized using a packed encoding.// If true, then it implies Cardinality is Repeated.IsPacked() bool// IsList reports whether this field represents a list,// where the value type for the associated field is a List.// It is equivalent to checking whether Cardinality is Repeated and// that IsMap reports false.IsList() bool// IsMap reports whether this field represents a map,// where the value type for the associated field is a Map.// It is equivalent to checking whether Cardinality is Repeated,// that the Kind is MessageKind, and that MessageDescriptor.IsMapEntry reports true.IsMap() bool// MapKey returns the field descriptor for the key in the map entry.// It returns nil if IsMap reports false.MapKey() FieldDescriptor// MapValue returns the field descriptor for the value in the map entry.// It returns nil if IsMap reports false.MapValue() FieldDescriptor// HasDefault reports whether this field has a default value.HasDefault() bool// Default returns the default value for scalar fields.// For proto2, it is the default value as specified in the proto file,// or the zero value if unspecified.// For proto3, it is always the zero value of the scalar.// The Value type is determined by the Kind.Default() Value// DefaultEnumValue returns the enum value descriptor for the default value// of an enum field, and is nil for any other kind of field.DefaultEnumValue() EnumValueDescriptor// ContainingOneof is the containing oneof that this field belongs to,// and is nil if this field is not part of a oneof.ContainingOneof() OneofDescriptor// ContainingMessage is the containing message that this field belongs to.// For extension fields, this may not necessarily be the parent message// that the field is declared within.ContainingMessage() MessageDescriptor// Enum is the enum descriptor if Kind is EnumKind.// It returns nil for any other Kind.Enum() EnumDescriptor// Message is the message descriptor if Kind is// MessageKind or GroupKind. It returns nil for any other Kind.Message() MessageDescriptorisFieldDescriptor}type isFieldDescriptor interface{ ProtoType(FieldDescriptor) }// FieldDescriptors is a list of field declarations.type FieldDescriptors interface {// Len reports the number of fields.Len() int// Get returns the ith FieldDescriptor. It panics if out of bounds.Get(i int) FieldDescriptor// ByName returns the FieldDescriptor for a field named s.// It returns nil if not found.ByName(s Name) FieldDescriptor// ByJSONName returns the FieldDescriptor for a field with s as the JSON name.// It returns nil if not found.ByJSONName(s string) FieldDescriptor// ByTextName returns the FieldDescriptor for a field with s as the text name.// It returns nil if not found.ByTextName(s string) FieldDescriptor// ByNumber returns the FieldDescriptor for a field numbered n.// It returns nil if not found.ByNumber(n FieldNumber) FieldDescriptordoNotImplement}// OneofDescriptor describes a oneof field set within a given message and// corresponds with the google.protobuf.OneofDescriptorProto message.type OneofDescriptor interface {Descriptor// IsSynthetic reports whether this is a synthetic oneof created to support// proto3 optional semantics. If true, Fields contains exactly one field// with FieldDescriptor.HasOptionalKeyword specified.IsSynthetic() bool// Fields is a list of fields belonging to this oneof.Fields() FieldDescriptorsisOneofDescriptor}type isOneofDescriptor interface{ ProtoType(OneofDescriptor) }// OneofDescriptors is a list of oneof declarations.type OneofDescriptors interface {// Len reports the number of oneof fields.Len() int// Get returns the ith OneofDescriptor. It panics if out of bounds.Get(i int) OneofDescriptor// ByName returns the OneofDescriptor for a oneof named s.// It returns nil if not found.ByName(s Name) OneofDescriptordoNotImplement}// ExtensionDescriptor is an alias of [FieldDescriptor] for documentation.type ExtensionDescriptor = FieldDescriptor// ExtensionTypeDescriptor is an [ExtensionDescriptor] with an associated [ExtensionType].type ExtensionTypeDescriptor interface {ExtensionDescriptor// Type returns the associated ExtensionType.Type() ExtensionType// Descriptor returns the plain ExtensionDescriptor without the// associated ExtensionType.Descriptor() ExtensionDescriptor}// ExtensionDescriptors is a list of field declarations.type ExtensionDescriptors interface {// Len reports the number of fields.Len() int// Get returns the ith ExtensionDescriptor. It panics if out of bounds.Get(i int) ExtensionDescriptor// ByName returns the ExtensionDescriptor for a field named s.// It returns nil if not found.ByName(s Name) ExtensionDescriptordoNotImplement}// ExtensionType encapsulates an [ExtensionDescriptor] with a concrete// Go implementation. The nested field descriptor must be for a extension field.//// While a normal field is a member of the parent message that it is declared// within (see [Descriptor.Parent]), an extension field is a member of some other// target message (see [FieldDescriptor.ContainingMessage]) and may have no// relationship with the parent. However, the full name of an extension field is// relative to the parent that it is declared within.//// For example://// syntax = "proto2";// package example;// message FooMessage {// extensions 100 to max;// }// message BarMessage {// extends FooMessage { optional BarMessage bar_field = 100; }// }//// Field "bar_field" is an extension of FooMessage, but its full name is// "example.BarMessage.bar_field" instead of "example.FooMessage.bar_field".type ExtensionType interface {// New returns a new value for the field.// For scalars, this returns the default value in native Go form.New() Value// Zero returns a new value for the field.// For scalars, this returns the default value in native Go form.// For composite types, this returns an empty, read-only message, list, or map.Zero() Value// TypeDescriptor returns the extension type descriptor.TypeDescriptor() ExtensionTypeDescriptor// ValueOf wraps the input and returns it as a Value.// ValueOf panics if the input value is invalid or not the appropriate type.//// ValueOf is more extensive than protoreflect.ValueOf for a given field's// value as it has more type information available.ValueOf(any) Value// InterfaceOf completely unwraps the Value to the underlying Go type.// InterfaceOf panics if the input is nil or does not represent the// appropriate underlying Go type. For composite types, it panics if the// value is not mutable.//// InterfaceOf is able to unwrap the Value further than Value.Interface// as it has more type information available.InterfaceOf(Value) any// IsValidValue reports whether the Value is valid to assign to the field.IsValidValue(Value) bool// IsValidInterface reports whether the input is valid to assign to the field.IsValidInterface(any) bool}// EnumDescriptor describes an enum and// corresponds with the google.protobuf.EnumDescriptorProto message.//// Nested declarations:// [EnumValueDescriptor].type EnumDescriptor interface {Descriptor// Values is a list of nested enum value declarations.Values() EnumValueDescriptors// ReservedNames is a list of reserved enum names.ReservedNames() Names// ReservedRanges is a list of reserved ranges of enum numbers.ReservedRanges() EnumRanges// IsClosed reports whether this enum uses closed semantics.// See https://protobuf.dev/programming-guides/enum/#definitions.// Note: the Go protobuf implementation is not spec compliant and treats// all enums as open enums.IsClosed() boolisEnumDescriptor}type isEnumDescriptor interface{ ProtoType(EnumDescriptor) }// EnumType encapsulates an [EnumDescriptor] with a concrete Go implementation.type EnumType interface {// New returns an instance of this enum type with its value set to n.New(n EnumNumber) Enum// Descriptor returns the enum descriptor.//// Invariant: t.Descriptor() == t.New(0).Descriptor()Descriptor() EnumDescriptor}// EnumDescriptors is a list of enum declarations.type EnumDescriptors interface {// Len reports the number of enum types.Len() int// Get returns the ith EnumDescriptor. It panics if out of bounds.Get(i int) EnumDescriptor// ByName returns the EnumDescriptor for an enum named s.// It returns nil if not found.ByName(s Name) EnumDescriptordoNotImplement}// EnumValueDescriptor describes an enum value and// corresponds with the google.protobuf.EnumValueDescriptorProto message.//// All other proto declarations are in the namespace of the parent.// However, enum values do not follow this rule and are within the namespace// of the parent's parent (i.e., they are a sibling of the containing enum).// Thus, a value named "FOO_VALUE" declared within an enum uniquely identified// as "proto.package.MyEnum" has a full name of "proto.package.FOO_VALUE".type EnumValueDescriptor interface {Descriptor// Number returns the enum value as an integer.Number() EnumNumberisEnumValueDescriptor}type isEnumValueDescriptor interface{ ProtoType(EnumValueDescriptor) }// EnumValueDescriptors is a list of enum value declarations.type EnumValueDescriptors interface {// Len reports the number of enum values.Len() int// Get returns the ith EnumValueDescriptor. It panics if out of bounds.Get(i int) EnumValueDescriptor// ByName returns the EnumValueDescriptor for the enum value named s.// It returns nil if not found.ByName(s Name) EnumValueDescriptor// ByNumber returns the EnumValueDescriptor for the enum value numbered n.// If multiple have the same number, the first one defined is returned// It returns nil if not found.ByNumber(n EnumNumber) EnumValueDescriptordoNotImplement}// ServiceDescriptor describes a service and// corresponds with the google.protobuf.ServiceDescriptorProto message.//// Nested declarations: [MethodDescriptor].type ServiceDescriptor interface {Descriptor// Methods is a list of nested message declarations.Methods() MethodDescriptorsisServiceDescriptor}type isServiceDescriptor interface{ ProtoType(ServiceDescriptor) }// ServiceDescriptors is a list of service declarations.type ServiceDescriptors interface {// Len reports the number of services.Len() int// Get returns the ith ServiceDescriptor. It panics if out of bounds.Get(i int) ServiceDescriptor// ByName returns the ServiceDescriptor for a service named s.// It returns nil if not found.ByName(s Name) ServiceDescriptordoNotImplement}// MethodDescriptor describes a method and// corresponds with the google.protobuf.MethodDescriptorProto message.type MethodDescriptor interface {Descriptor// Input is the input message descriptor.Input() MessageDescriptor// Output is the output message descriptor.Output() MessageDescriptor// IsStreamingClient reports whether the client streams multiple messages.IsStreamingClient() bool// IsStreamingServer reports whether the server streams multiple messages.IsStreamingServer() boolisMethodDescriptor}type isMethodDescriptor interface{ ProtoType(MethodDescriptor) }// MethodDescriptors is a list of method declarations.type MethodDescriptors interface {// Len reports the number of methods.Len() int// Get returns the ith MethodDescriptor. It panics if out of bounds.Get(i int) MethodDescriptor// ByName returns the MethodDescriptor for a service method named s.// It returns nil if not found.ByName(s Name) MethodDescriptordoNotImplement}
![]() |
The pages are generated with Golds v0.8.2. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |