2022-07-07 20:11:50 +00:00
|
|
|
// 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.
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// For example, suppose we have t1 and t2 which are both an [MessageDescriptor].
|
2022-07-07 20:11:50 +00:00
|
|
|
// 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 or weak imports:
|
|
|
|
//
|
|
|
|
// ╔═══════════════════════════════════╤═════════════════════╗
|
|
|
|
// ║ 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() ProtoMessage
|
|
|
|
|
|
|
|
doNotImplement
|
|
|
|
}
|
|
|
|
|
|
|
|
// FileDescriptor describes the types in a complete proto file and
|
|
|
|
// corresponds with the google.protobuf.FileDescriptorProto message.
|
|
|
|
//
|
|
|
|
// Top-level declarations:
|
2024-02-24 00:34:55 +00:00
|
|
|
// [EnumDescriptor], [MessageDescriptor], [FieldDescriptor], and/or [ServiceDescriptor].
|
2022-07-07 20:11:50 +00:00
|
|
|
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() SourceLocations
|
|
|
|
|
|
|
|
isFileDescriptor
|
|
|
|
}
|
|
|
|
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) FileImport
|
|
|
|
|
|
|
|
doNotImplement
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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
|
|
|
|
|
|
|
|
// IsWeak reports whether this is a weak import, which does not impose
|
|
|
|
// a direct dependency on the target file.
|
|
|
|
//
|
|
|
|
// Weak imports are a legacy proto1 feature. Equivalent behavior is
|
|
|
|
// achieved using proto2 extension fields or proto3 Any messages.
|
|
|
|
IsWeak bool
|
|
|
|
}
|
|
|
|
|
|
|
|
// MessageDescriptor describes a message and
|
|
|
|
// corresponds with the google.protobuf.DescriptorProto message.
|
|
|
|
//
|
|
|
|
// Nested declarations:
|
2024-02-24 00:34:55 +00:00
|
|
|
// [FieldDescriptor], [OneofDescriptor], [FieldDescriptor], [EnumDescriptor],
|
|
|
|
// and/or [MessageDescriptor].
|
2022-07-07 20:11:50 +00:00
|
|
|
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.
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// To avoid a dependency cycle, this method returns a proto.Message] value,
|
2022-07-07 20:11:50 +00:00
|
|
|
// 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() ExtensionDescriptors
|
|
|
|
|
|
|
|
isMessageDescriptor
|
|
|
|
}
|
|
|
|
type isMessageDescriptor interface{ ProtoType(MessageDescriptor) }
|
|
|
|
|
2024-02-24 00:34:55 +00:00
|
|
|
// MessageType encapsulates a [MessageDescriptor] with a concrete Go implementation.
|
2022-07-07 20:11:50 +00:00
|
|
|
// It is recommended that implementations of this interface also implement the
|
2024-02-24 00:34:55 +00:00
|
|
|
// [MessageFieldTypes] interface.
|
2022-07-07 20:11:50 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2024-02-24 00:34:55 +00:00
|
|
|
// MessageFieldTypes extends a [MessageType] by providing type information
|
2022-07-07 20:11:50 +00:00
|
|
|
// regarding enums and messages referenced by the message fields.
|
|
|
|
type MessageFieldTypes interface {
|
|
|
|
MessageType
|
|
|
|
|
2024-02-24 00:34:55 +00:00
|
|
|
// Enum returns the EnumType for the ith field in MessageDescriptor.Fields.
|
2022-07-07 20:11:50 +00:00
|
|
|
// 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
|
|
|
|
|
2024-02-24 00:34:55 +00:00
|
|
|
// Message returns the MessageType for the ith field in MessageDescriptor.Fields.
|
2022-07-07 20:11:50 +00:00
|
|
|
// 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) MessageDescriptor
|
|
|
|
|
|
|
|
doNotImplement
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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
|
2024-02-24 00:34:55 +00:00
|
|
|
// (e.g., [MessageDescriptor.Fields]) and fields that extend some remote message
|
|
|
|
// (e.g., [FileDescriptor.Extensions] or [MessageDescriptor.Extensions]).
|
2022-07-07 20:11:50 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
// IsWeak reports whether this is a weak field, which does not impose a
|
|
|
|
// direct dependency on the target type.
|
|
|
|
// If true, then Message returns a placeholder type.
|
|
|
|
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,
|
2024-02-24 00:34:55 +00:00
|
|
|
// that the Kind is MessageKind, and that MessageDescriptor.IsMapEntry reports true.
|
2022-07-07 20:11:50 +00:00
|
|
|
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() MessageDescriptor
|
|
|
|
|
|
|
|
isFieldDescriptor
|
|
|
|
}
|
|
|
|
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) FieldDescriptor
|
|
|
|
|
|
|
|
doNotImplement
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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
|
2024-02-24 00:34:55 +00:00
|
|
|
// with FieldDescriptor.HasOptionalKeyword specified.
|
2022-07-07 20:11:50 +00:00
|
|
|
IsSynthetic() bool
|
|
|
|
|
|
|
|
// Fields is a list of fields belonging to this oneof.
|
|
|
|
Fields() FieldDescriptors
|
|
|
|
|
|
|
|
isOneofDescriptor
|
|
|
|
}
|
|
|
|
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) OneofDescriptor
|
|
|
|
|
|
|
|
doNotImplement
|
|
|
|
}
|
|
|
|
|
2024-02-24 00:34:55 +00:00
|
|
|
// ExtensionDescriptor is an alias of [FieldDescriptor] for documentation.
|
2022-07-07 20:11:50 +00:00
|
|
|
type ExtensionDescriptor = FieldDescriptor
|
|
|
|
|
2024-02-24 00:34:55 +00:00
|
|
|
// ExtensionTypeDescriptor is an [ExtensionDescriptor] with an associated [ExtensionType].
|
2022-07-07 20:11:50 +00:00
|
|
|
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) ExtensionDescriptor
|
|
|
|
|
|
|
|
doNotImplement
|
|
|
|
}
|
|
|
|
|
2024-02-24 00:34:55 +00:00
|
|
|
// ExtensionType encapsulates an [ExtensionDescriptor] with a concrete
|
2022-07-07 20:11:50 +00:00
|
|
|
// 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
|
2024-02-24 00:34:55 +00:00
|
|
|
// within (see [Descriptor.Parent]), an extension field is a member of some other
|
|
|
|
// target message (see [FieldDescriptor.ContainingMessage]) and may have no
|
2022-07-07 20:11:50 +00:00
|
|
|
// relationship with the parent. However, the full name of an extension field is
|
|
|
|
// relative to the parent that it is declared within.
|
|
|
|
//
|
|
|
|
// For example:
|
2022-08-26 00:05:39 +00:00
|
|
|
//
|
2022-07-07 20:11:50 +00:00
|
|
|
// 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(interface{}) 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) interface{}
|
|
|
|
|
|
|
|
// 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(interface{}) bool
|
|
|
|
}
|
|
|
|
|
|
|
|
// EnumDescriptor describes an enum and
|
|
|
|
// corresponds with the google.protobuf.EnumDescriptorProto message.
|
|
|
|
//
|
|
|
|
// Nested declarations:
|
2024-02-24 00:34:55 +00:00
|
|
|
// [EnumValueDescriptor].
|
2022-07-07 20:11:50 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
isEnumDescriptor
|
|
|
|
}
|
|
|
|
type isEnumDescriptor interface{ ProtoType(EnumDescriptor) }
|
|
|
|
|
2024-02-24 00:34:55 +00:00
|
|
|
// EnumType encapsulates an [EnumDescriptor] with a concrete Go implementation.
|
2022-07-07 20:11:50 +00:00
|
|
|
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) EnumDescriptor
|
|
|
|
|
|
|
|
doNotImplement
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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() EnumNumber
|
|
|
|
|
|
|
|
isEnumValueDescriptor
|
|
|
|
}
|
|
|
|
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) EnumValueDescriptor
|
|
|
|
|
|
|
|
doNotImplement
|
|
|
|
}
|
|
|
|
|
|
|
|
// ServiceDescriptor describes a service and
|
|
|
|
// corresponds with the google.protobuf.ServiceDescriptorProto message.
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// Nested declarations: [MethodDescriptor].
|
2022-07-07 20:11:50 +00:00
|
|
|
type ServiceDescriptor interface {
|
|
|
|
Descriptor
|
|
|
|
|
|
|
|
// Methods is a list of nested message declarations.
|
|
|
|
Methods() MethodDescriptors
|
|
|
|
|
|
|
|
isServiceDescriptor
|
|
|
|
}
|
|
|
|
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) ServiceDescriptor
|
|
|
|
|
|
|
|
doNotImplement
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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() bool
|
|
|
|
|
|
|
|
isMethodDescriptor
|
|
|
|
}
|
|
|
|
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) MethodDescriptor
|
|
|
|
|
|
|
|
doNotImplement
|
|
|
|
}
|