Documentation
¶
Overview ¶
Package prototype provides builders to construct protobuf types that implement the interfaces defined in the protoreflect package.
Protobuf types can either be constructed as standalone types (e.g., StandaloneMessage), or together as a batch of types in a single proto file (e.g., File). When creating standalone types, additional information must be provided such as the full type name and the proto syntax. When creating an entire file, the syntax and full name is derived from the parent type.
Most types contain options, defined as messages in descriptor.proto. To avoid cyclic dependencies, the prototype package treats these options as opaque protoreflect.ProtoMessage values. In some cases where the option contains semantically important information (e.g., google.protobuf.MessageOptions.map_entry), this information must be provided as a field of the corresponding type (e.g., prototype.Message.MapEntry).
Index ¶
- func GoEnum(ed protoreflect.EnumDescriptor, ...) protoreflect.EnumType
- func GoExtension(xd protoreflect.ExtensionDescriptor, et protoreflect.EnumType, ...) protoreflect.ExtensionType
- func GoMessage(md protoreflect.MessageDescriptor, ...) protoreflect.MessageType
- func NewEnum(t *StandaloneEnum) (protoreflect.EnumDescriptor, error)
- func NewExtension(t *StandaloneExtension) (protoreflect.ExtensionDescriptor, error)
- func NewFile(t *File) (protoreflect.FileDescriptor, error)
- func NewMessage(t *StandaloneMessage) (protoreflect.MessageDescriptor, error)
- func NewMessages(ts []*StandaloneMessage) ([]protoreflect.MessageDescriptor, error)
- func PlaceholderEnum(name protoreflect.FullName) protoreflect.EnumDescriptor
- func PlaceholderFile(path string, pkg protoreflect.FullName) protoreflect.FileDescriptor
- func PlaceholderMessage(name protoreflect.FullName) protoreflect.MessageDescriptor
- type Enum
- type EnumValue
- type Extension
- type Field
- type File
- type Message
- type Method
- type Oneof
- type OptionalBool
- type Service
- type StandaloneEnum
- type StandaloneExtension
- type StandaloneMessage
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GoEnum ¶
func GoEnum(ed protoreflect.EnumDescriptor, fn func(protoreflect.EnumType, protoreflect.EnumNumber) protoreflect.Enum) protoreflect.EnumType
GoEnum creates a new protoreflect.EnumType by combining the provided protoreflect.EnumDescriptor with the provided constructor function.
func GoExtension ¶
func GoExtension(xd protoreflect.ExtensionDescriptor, et protoreflect.EnumType, mt protoreflect.MessageType) protoreflect.ExtensionType
GoExtension creates a new protoreflect.ExtensionType.
An enum type must be provided for enum extension fields if ExtensionDescriptor.EnumType does not implement protoreflect.EnumType, in which case it replaces the original enum in ExtensionDescriptor.
Similarly, a message type must be provided for message extension fields if ExtensionDescriptor.MessageType does not implement protoreflect.MessageType, in which case it replaces the original message in ExtensionDescriptor.
The Go type is currently determined automatically. The type is T for scalars and *[]T for lists (maps are not allowed). The type T is determined as follows:
+------------+-------------------------------------+ | Go type | Protobuf kind | +------------+-------------------------------------+ | bool | BoolKind | | int32 | Int32Kind, Sint32Kind, Sfixed32Kind | | int64 | Int64Kind, Sint64Kind, Sfixed64Kind | | uint32 | Uint32Kind, Fixed32Kind | | uint64 | Uint64Kind, Fixed64Kind | | float32 | FloatKind | | float64 | DoubleKind | | string | StringKind | | []byte | BytesKind | | E | EnumKind | | M | MessageKind, GroupKind | +------------+-------------------------------------+
The type E is the concrete enum type returned by NewEnum, which is often, but not required to be, a named int32 type. The type M is the concrete message type returned by NewMessage, which is often, but not required to be, a pointer to a named struct type.
func GoMessage ¶
func GoMessage(md protoreflect.MessageDescriptor, fn func(protoreflect.MessageType) protoreflect.Message) protoreflect.MessageType
GoMessage creates a new protoreflect.MessageType by combining the provided protoreflect.MessageDescriptor with the provided constructor function.
func NewEnum ¶
func NewEnum(t *StandaloneEnum) (protoreflect.EnumDescriptor, error)
NewEnum creates a new protoreflect.EnumDescriptor. The caller must relinquish full ownership of the input t and must not access or mutate any fields.
func NewExtension ¶
func NewExtension(t *StandaloneExtension) (protoreflect.ExtensionDescriptor, error)
NewExtension creates a new protoreflect.ExtensionDescriptor. The caller must relinquish full ownership of the input t and must not access or mutate any fields.
func NewFile ¶
func NewFile(t *File) (protoreflect.FileDescriptor, error)
NewFile creates a new protoreflect.FileDescriptor from the provided value. The file must represent a valid proto file according to protobuf semantics.
Fields that reference an enum or message that is being declared within the same File can be represented using a placeholder descriptor. NewFile will automatically resolve the placeholder to point to a concrete descriptor. Alternatively, a reference descriptor obtained via Enum.Reference or Message.Reference can be used instead. The placeholder approach makes it possible to declare the file descriptor as a single File literal and is generally easier to use. The reference approach is more performant, but also more error prone.
The caller must relinquish full ownership of the input t and must not access or mutate any fields. The input must not contain slices that are sub-slices of each other.
func NewMessage ¶
func NewMessage(t *StandaloneMessage) (protoreflect.MessageDescriptor, error)
NewMessage creates a new protoreflect.MessageDescriptor. The caller must relinquish full ownership of the input t and must not access or mutate any fields.
func NewMessages ¶
func NewMessages(ts []*StandaloneMessage) ([]protoreflect.MessageDescriptor, error)
NewMessages creates a set of new protoreflect.MessageDescriptors.
This constructor permits the creation of cyclic message types that depend on each other. For example, message A may have a field of type message B, where message B may have a field of type message A. In such a case, a placeholder message is used for these cyclic references.
The caller must relinquish full ownership of the input ts and must not access or mutate any fields.
func PlaceholderEnum ¶
func PlaceholderEnum(name protoreflect.FullName) protoreflect.EnumDescriptor
PlaceholderEnum returns a placeholder protoreflect.EnumType where only the Name and FullName accessors are valid.
A placeholder can be used within File literals when referencing an enum that is declared within that file.
func PlaceholderFile ¶
func PlaceholderFile(path string, pkg protoreflect.FullName) protoreflect.FileDescriptor
PlaceholderFile returns a placeholder protoreflect.FileType where only the Path and Package accessors are valid.
func PlaceholderMessage ¶
func PlaceholderMessage(name protoreflect.FullName) protoreflect.MessageDescriptor
PlaceholderMessage returns a placeholder protoreflect.MessageType where only the Name and FullName accessors are valid.
A placeholder can be used within File literals when referencing a message that is declared within that file.
Types ¶
type Enum ¶
type Enum struct {
Name protoreflect.Name
Values []EnumValue
ReservedNames []protoreflect.Name
ReservedRanges [][2]protoreflect.EnumNumber
Options protoreflect.ProtoMessage
// contains filtered or unexported fields
}
Enum is a constructor for protoreflect.EnumDescriptor.
func (*Enum) Reference ¶
func (e *Enum) Reference() protoreflect.EnumDescriptor
Reference returns e as a reference protoreflect.EnumDescriptor, which can be used to satisfy internal dependencies within a proto file. Methods on the returned descriptor are not valid until the file that this enum belongs to has been constructed via NewFile.
type EnumValue ¶
type EnumValue struct {
Name protoreflect.Name
Number protoreflect.EnumNumber
Options protoreflect.ProtoMessage
// contains filtered or unexported fields
}
EnumValue is a constructor for protoreflect.EnumValueDescriptor.
type Extension ¶
type Extension struct {
Name protoreflect.Name
Number protoreflect.FieldNumber
Cardinality protoreflect.Cardinality
Kind protoreflect.Kind
Default protoreflect.Value
MessageType protoreflect.MessageDescriptor
EnumType protoreflect.EnumDescriptor
ExtendedType protoreflect.MessageDescriptor
Options protoreflect.ProtoMessage
IsPacked OptionalBool
// contains filtered or unexported fields
}
Extension is a constructor for protoreflect.ExtensionDescriptor.
type Field ¶
type Field struct {
Name protoreflect.Name
Number protoreflect.FieldNumber
Cardinality protoreflect.Cardinality
Kind protoreflect.Kind
JSONName string
Default protoreflect.Value
OneofName protoreflect.Name
MessageType protoreflect.MessageDescriptor
EnumType protoreflect.EnumDescriptor
Options protoreflect.ProtoMessage
IsPacked OptionalBool
IsWeak bool
// contains filtered or unexported fields
}
Field is a constructor for protoreflect.FieldDescriptor.
type File ¶
type File struct {
Syntax protoreflect.Syntax
Path string
Package protoreflect.FullName
Imports []protoreflect.FileImport
Options protoreflect.ProtoMessage
Enums []Enum
Messages []Message
Extensions []Extension
Services []Service
// contains filtered or unexported fields
}
File is a constructor for protoreflect.FileDescriptor.
type Message ¶
type Message struct {
Name protoreflect.Name
Fields []Field
Oneofs []Oneof
ReservedNames []protoreflect.Name
ReservedRanges [][2]protoreflect.FieldNumber
ExtensionRanges [][2]protoreflect.FieldNumber
ExtensionRangeOptions []protoreflect.ProtoMessage
Options protoreflect.ProtoMessage
IsMapEntry bool
Enums []Enum
Messages []Message
Extensions []Extension
// contains filtered or unexported fields
}
Message is a constructor for protoreflect.MessageDescriptor.
func (*Message) Reference ¶
func (m *Message) Reference() protoreflect.MessageDescriptor
Reference returns m as a reference protoreflect.MessageDescriptor, which can be used to satisfy internal dependencies within a proto file. Methods on the returned descriptor are not valid until the file that this message belongs to has been constructed via NewFile.
type Method ¶
type Method struct {
Name protoreflect.Name
InputType protoreflect.MessageDescriptor
OutputType protoreflect.MessageDescriptor
IsStreamingClient bool
IsStreamingServer bool
Options protoreflect.ProtoMessage
// contains filtered or unexported fields
}
Method is a constructor for protoreflect.MethodDescriptor.
type Oneof ¶
type Oneof struct {
Name protoreflect.Name
Options protoreflect.ProtoMessage
// contains filtered or unexported fields
}
Oneof is a constructor for protoreflect.OneofDescriptor.
type OptionalBool ¶
type OptionalBool uint8
OptionalBool is a tristate boolean.
const ( DefaultBool OptionalBool = iota True False )
Tristate boolean values.
type Service ¶
type Service struct {
Name protoreflect.Name
Methods []Method
Options protoreflect.ProtoMessage
// contains filtered or unexported fields
}
Service is a constructor for protoreflect.ServiceDescriptor.
type StandaloneEnum ¶
type StandaloneEnum struct {
Syntax protoreflect.Syntax
FullName protoreflect.FullName
Values []EnumValue
ReservedNames []protoreflect.Name
ReservedRanges [][2]protoreflect.EnumNumber
Options protoreflect.ProtoMessage
// contains filtered or unexported fields
}
StandaloneEnum is a constructor for a protoreflect.EnumDescriptor that does not have a parent.
type StandaloneExtension ¶
type StandaloneExtension struct {
FullName protoreflect.FullName
Number protoreflect.FieldNumber
Cardinality protoreflect.Cardinality
Kind protoreflect.Kind
Default protoreflect.Value
MessageType protoreflect.MessageDescriptor
EnumType protoreflect.EnumDescriptor
ExtendedType protoreflect.MessageDescriptor
Options protoreflect.ProtoMessage
IsPacked OptionalBool
// contains filtered or unexported fields
}
StandaloneExtension is a constructor for a protoreflect.ExtensionDescriptor that does not have a parent.
type StandaloneMessage ¶
type StandaloneMessage struct {
Syntax protoreflect.Syntax
FullName protoreflect.FullName
Fields []Field
Oneofs []Oneof
ReservedNames []protoreflect.Name
ReservedRanges [][2]protoreflect.FieldNumber
ExtensionRanges [][2]protoreflect.FieldNumber
ExtensionRangeOptions []protoreflect.ProtoMessage
Options protoreflect.ProtoMessage
IsMapEntry bool
// contains filtered or unexported fields
}
StandaloneMessage is a constructor for a protoreflect.MessageDescriptor that does not have a parent and has no child declarations.