...

Package impl

import "google.golang.org/protobuf/internal/impl"
Overview
Index

Overview ▾

Index ▾

Constants
func AberrantDeriveFullName(t reflect.Type) protoreflect.FullName
func InitExtensionInfo(xi *ExtensionInfo, xd protoreflect.ExtensionDescriptor, goType reflect.Type)
func IsLazy(m protoreflect.Message, fd protoreflect.FieldDescriptor) bool
func LegacyLoadEnumDesc(t reflect.Type) protoreflect.EnumDescriptor
func LegacyLoadMessageDesc(t reflect.Type) protoreflect.MessageDescriptor
type Converter
    func NewConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter
type EnumInfo
    func (t *EnumInfo) Descriptor() protoreflect.EnumDescriptor
    func (t *EnumInfo) New(n protoreflect.EnumNumber) protoreflect.Enum
type Export
    func (Export) ClearWeak(w *WeakFields, num protoreflect.FieldNumber)
    func (Export) CompressGZIP(in []byte) (out []byte)
    func (Export) EnumDescriptorOf(e enum) protoreflect.EnumDescriptor
    func (Export) EnumOf(e enum) protoreflect.Enum
    func (Export) EnumStringOf(ed protoreflect.EnumDescriptor, n protoreflect.EnumNumber) string
    func (Export) EnumTypeOf(e enum) protoreflect.EnumType
    func (Export) GetWeak(w WeakFields, num protoreflect.FieldNumber, name protoreflect.FullName) protoreflect.ProtoMessage
    func (Export) HasWeak(w WeakFields, num protoreflect.FieldNumber) bool
    func (Export) LegacyEnumName(ed protoreflect.EnumDescriptor) string
    func (Export) LegacyMessageTypeOf(m protoiface.MessageV1, name protoreflect.FullName) protoreflect.MessageType
    func (Export) MessageDescriptorOf(m message) protoreflect.MessageDescriptor
    func (Export) MessageOf(m message) protoreflect.Message
    func (Export) MessageStateOf(p Pointer) *messageState
    func (Export) MessageStringOf(m protoreflect.ProtoMessage) string
    func (Export) MessageTypeOf(m message) protoreflect.MessageType
    func (Export) NewError(f string, x ...interface{}) error
    func (Export) ProtoMessageV1Of(m message) protoiface.MessageV1
    func (Export) ProtoMessageV2Of(m message) protoreflect.ProtoMessage
    func (Export) SetWeak(w *WeakFields, num protoreflect.FieldNumber, name protoreflect.FullName, m protoreflect.ProtoMessage)
    func (Export) UnmarshalJSONEnum(ed protoreflect.EnumDescriptor, b []byte) (protoreflect.EnumNumber, error)
type ExtensionField
    func (f ExtensionField) IsSet() bool
    func (f *ExtensionField) Set(t protoreflect.ExtensionType, v protoreflect.Value)
    func (f *ExtensionField) SetLazy(t protoreflect.ExtensionType, fn func() protoreflect.Value)
    func (f ExtensionField) Type() protoreflect.ExtensionType
    func (f *ExtensionField) Value() protoreflect.Value
type ExtensionFields
type ExtensionInfo
    func (xi *ExtensionInfo) InterfaceOf(v protoreflect.Value) interface{}
    func (xi *ExtensionInfo) IsValidInterface(v interface{}) bool
    func (xi *ExtensionInfo) IsValidValue(v protoreflect.Value) bool
    func (xi *ExtensionInfo) New() protoreflect.Value
    func (xi *ExtensionInfo) TypeDescriptor() protoreflect.ExtensionTypeDescriptor
    func (xi *ExtensionInfo) ValueOf(v interface{}) protoreflect.Value
    func (xi *ExtensionInfo) Zero() protoreflect.Value
type MessageInfo
    func (mi *MessageInfo) Descriptor() protoreflect.MessageDescriptor
    func (mi *MessageInfo) Enum(i int) protoreflect.EnumType
    func (mi *MessageInfo) Message(i int) protoreflect.MessageType
    func (mi *MessageInfo) MessageOf(m interface{}) protoreflect.Message
    func (mi *MessageInfo) New() protoreflect.Message
    func (mi *MessageInfo) Zero() protoreflect.Message
type MessageState
type Pointer
type SizeCache
type UnknownFields
type ValidationStatus
    func Validate(mt protoreflect.MessageType, in protoiface.UnmarshalInput) (out protoiface.UnmarshalOutput, _ ValidationStatus)
    func (v ValidationStatus) String() string
type WeakFields

Package files

api_export.go checkinit.go codec_extension.go codec_field.go codec_gen.go codec_map.go codec_map_go112.go codec_message.go codec_messageset.go codec_tables.go codec_unsafe.go convert.go convert_list.go convert_map.go decode.go encode.go enum.go extension.go legacy_enum.go legacy_export.go legacy_extension.go legacy_file.go legacy_message.go merge.go merge_gen.go message.go message_reflect.go message_reflect_field.go message_reflect_gen.go pointer_unsafe.go validate.go weak.go

Constants

const UnsafeEnabled = true

func AberrantDeriveFullName

func AberrantDeriveFullName(t reflect.Type) protoreflect.FullName

AberrantDeriveFullName derives a fully qualified protobuf name for the given Go type The provided name is not guaranteed to be stable nor universally unique. It should be sufficiently unique within a program.

This is exported for testing purposes.

func InitExtensionInfo

func InitExtensionInfo(xi *ExtensionInfo, xd protoreflect.ExtensionDescriptor, goType reflect.Type)

func IsLazy

func IsLazy(m protoreflect.Message, fd protoreflect.FieldDescriptor) bool

IsLazy reports whether a field is lazily encoded. It is exported for testing.

func LegacyLoadEnumDesc

func LegacyLoadEnumDesc(t reflect.Type) protoreflect.EnumDescriptor

LegacyLoadEnumDesc returns an EnumDescriptor derived from the Go type, which must be an int32 kind and not implement the v2 API already.

This is exported for testing purposes.

func LegacyLoadMessageDesc

func LegacyLoadMessageDesc(t reflect.Type) protoreflect.MessageDescriptor

LegacyLoadMessageDesc returns an MessageDescriptor derived from the Go type, which should be a *struct kind and must not implement the v2 API already.

This is exported for testing purposes.

type Converter

A Converter coverts to/from Go reflect.Value types and protobuf protoreflect.Value types.

type Converter interface {
    // PBValueOf converts a reflect.Value to a protoreflect.Value.
    PBValueOf(reflect.Value) protoreflect.Value

    // GoValueOf converts a protoreflect.Value to a reflect.Value.
    GoValueOf(protoreflect.Value) reflect.Value

    // IsValidPB returns whether a protoreflect.Value is compatible with this type.
    IsValidPB(protoreflect.Value) bool

    // IsValidGo returns whether a reflect.Value is compatible with this type.
    IsValidGo(reflect.Value) bool

    // New returns a new field value.
    // For scalars, it returns the default value of the field.
    // For composite types, it returns a new mutable value.
    New() protoreflect.Value

    // Zero returns a new field value.
    // For scalars, it returns the default value of the field.
    // For composite types, it returns an immutable, empty value.
    Zero() protoreflect.Value
}

func NewConverter

func NewConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter

NewConverter matches a Go type with a protobuf field and returns a Converter that converts between the two. Enums must be a named int32 kind that implements protoreflect.Enum, and messages must be pointer to a named struct type that implements protoreflect.ProtoMessage.

This matcher deliberately supports a wider range of Go types than what protoc-gen-go historically generated to be able to automatically wrap some v1 messages generated by other forks of protoc-gen-go.

type EnumInfo

type EnumInfo struct {
    GoReflectType reflect.Type // int32 kind
    Desc          protoreflect.EnumDescriptor
}

func (*EnumInfo) Descriptor

func (t *EnumInfo) Descriptor() protoreflect.EnumDescriptor

func (*EnumInfo) New

func (t *EnumInfo) New(n protoreflect.EnumNumber) protoreflect.Enum

type Export

Export is a zero-length named type that exists only to export a set of functions that we do not want to appear in godoc.

type Export struct{}

func (Export) ClearWeak

func (Export) ClearWeak(w *WeakFields, num protoreflect.FieldNumber)

func (Export) CompressGZIP

func (Export) CompressGZIP(in []byte) (out []byte)

CompressGZIP compresses the input as a GZIP-encoded file. The current implementation does no compression.

func (Export) EnumDescriptorOf

func (Export) EnumDescriptorOf(e enum) protoreflect.EnumDescriptor

EnumDescriptorOf returns the protoreflect.EnumDescriptor for e. It returns nil if e is nil.

func (Export) EnumOf

func (Export) EnumOf(e enum) protoreflect.Enum

EnumOf returns the protoreflect.Enum interface over e. It returns nil if e is nil.

func (Export) EnumStringOf

func (Export) EnumStringOf(ed protoreflect.EnumDescriptor, n protoreflect.EnumNumber) string

EnumStringOf returns the enum value as a string, either as the name if the number is resolvable, or the number formatted as a string.

func (Export) EnumTypeOf

func (Export) EnumTypeOf(e enum) protoreflect.EnumType

EnumTypeOf returns the protoreflect.EnumType for e. It returns nil if e is nil.

func (Export) GetWeak

func (Export) GetWeak(w WeakFields, num protoreflect.FieldNumber, name protoreflect.FullName) protoreflect.ProtoMessage

func (Export) HasWeak

func (Export) HasWeak(w WeakFields, num protoreflect.FieldNumber) bool

func (Export) LegacyEnumName

func (Export) LegacyEnumName(ed protoreflect.EnumDescriptor) string

LegacyEnumName returns the name of enums used in legacy code.

func (Export) LegacyMessageTypeOf

func (Export) LegacyMessageTypeOf(m protoiface.MessageV1, name protoreflect.FullName) protoreflect.MessageType

LegacyMessageTypeOf returns the protoreflect.MessageType for m, with name used as the message name if necessary.

func (Export) MessageDescriptorOf

func (Export) MessageDescriptorOf(m message) protoreflect.MessageDescriptor

MessageDescriptorOf returns the protoreflect.MessageDescriptor for m. It returns nil if m is nil.

func (Export) MessageOf

func (Export) MessageOf(m message) protoreflect.Message

MessageOf returns the protoreflect.Message interface over m. It returns nil if m is nil.

func (Export) MessageStateOf

func (Export) MessageStateOf(p Pointer) *messageState

func (Export) MessageStringOf

func (Export) MessageStringOf(m protoreflect.ProtoMessage) string

MessageStringOf returns the message value as a string, which is the message serialized in the protobuf text format.

func (Export) MessageTypeOf

func (Export) MessageTypeOf(m message) protoreflect.MessageType

MessageTypeOf returns the protoreflect.MessageType for m. It returns nil if m is nil.

func (Export) NewError

func (Export) NewError(f string, x ...interface{}) error

NewError formats a string according to the format specifier and arguments and returns an error that has a "proto" prefix.

func (Export) ProtoMessageV1Of

func (Export) ProtoMessageV1Of(m message) protoiface.MessageV1

ProtoMessageV1Of converts either a v1 or v2 message to a v1 message. It returns nil if m is nil.

func (Export) ProtoMessageV2Of

func (Export) ProtoMessageV2Of(m message) protoreflect.ProtoMessage

ProtoMessageV2Of converts either a v1 or v2 message to a v2 message. It returns nil if m is nil.

func (Export) SetWeak

func (Export) SetWeak(w *WeakFields, num protoreflect.FieldNumber, name protoreflect.FullName, m protoreflect.ProtoMessage)

func (Export) UnmarshalJSONEnum

func (Export) UnmarshalJSONEnum(ed protoreflect.EnumDescriptor, b []byte) (protoreflect.EnumNumber, error)

UnmarshalJSONEnum unmarshals an enum from a JSON-encoded input. The input can either be a string representing the enum value by name, or a number representing the enum number itself.

type ExtensionField

type ExtensionField struct {
    // contains filtered or unexported fields
}

func (ExtensionField) IsSet

func (f ExtensionField) IsSet() bool

IsSet returns whether the extension field is set. This may be called concurrently.

func (*ExtensionField) Set

func (f *ExtensionField) Set(t protoreflect.ExtensionType, v protoreflect.Value)

Set sets the type and value of the extension field. This must not be called concurrently.

func (*ExtensionField) SetLazy

func (f *ExtensionField) SetLazy(t protoreflect.ExtensionType, fn func() protoreflect.Value)

SetLazy sets the type and a value that is to be lazily evaluated upon first use. This must not be called concurrently.

func (ExtensionField) Type

func (f ExtensionField) Type() protoreflect.ExtensionType

Type returns the type of the extension field. This may be called concurrently.

func (*ExtensionField) Value

func (f *ExtensionField) Value() protoreflect.Value

Value returns the value of the extension field. This may be called concurrently.

type ExtensionFields

type ExtensionFields = map[int32]ExtensionField

type ExtensionInfo

ExtensionInfo implements ExtensionType.

This type contains a number of exported fields for legacy compatibility. The only non-deprecated use of this type is through the methods of the ExtensionType interface.

type ExtensionInfo struct {

    // ExtendedType is a typed nil-pointer to the parent message type that
    // is being extended. It is possible for this to be unpopulated in v2
    // since the message may no longer implement the MessageV1 interface.
    //
    // Deprecated: Use the ExtendedType method instead.
    ExtendedType protoiface.MessageV1

    // ExtensionType is the zero value of the extension type.
    //
    // For historical reasons, reflect.TypeOf(ExtensionType) and the
    // type returned by InterfaceOf may not be identical.
    //
    // Deprecated: Use InterfaceOf(xt.Zero()) instead.
    ExtensionType interface{}

    // Field is the field number of the extension.
    //
    // Deprecated: Use the Descriptor().Number method instead.
    Field int32

    // Name is the fully qualified name of extension.
    //
    // Deprecated: Use the Descriptor().FullName method instead.
    Name string

    // Tag is the protobuf struct tag used in the v1 API.
    //
    // Deprecated: Do not use.
    Tag string

    // Filename is the proto filename in which the extension is defined.
    //
    // Deprecated: Use Descriptor().ParentFile().Path() instead.
    Filename string
    // contains filtered or unexported fields
}

func (*ExtensionInfo) InterfaceOf

func (xi *ExtensionInfo) InterfaceOf(v protoreflect.Value) interface{}

func (*ExtensionInfo) IsValidInterface

func (xi *ExtensionInfo) IsValidInterface(v interface{}) bool

func (*ExtensionInfo) IsValidValue

func (xi *ExtensionInfo) IsValidValue(v protoreflect.Value) bool

func (*ExtensionInfo) New

func (xi *ExtensionInfo) New() protoreflect.Value

func (*ExtensionInfo) TypeDescriptor

func (xi *ExtensionInfo) TypeDescriptor() protoreflect.ExtensionTypeDescriptor

func (*ExtensionInfo) ValueOf

func (xi *ExtensionInfo) ValueOf(v interface{}) protoreflect.Value

func (*ExtensionInfo) Zero

func (xi *ExtensionInfo) Zero() protoreflect.Value

type MessageInfo

MessageInfo provides protobuf related functionality for a given Go type that represents a message. A given instance of MessageInfo is tied to exactly one Go type, which must be a pointer to a struct type.

The exported fields must be populated before any methods are called and cannot be mutated after set.

type MessageInfo struct {
    // GoReflectType is the underlying message Go type and must be populated.
    GoReflectType reflect.Type // pointer to struct

    // Desc is the underlying message descriptor type and must be populated.
    Desc protoreflect.MessageDescriptor

    // Exporter must be provided in a purego environment in order to provide
    // access to unexported fields.
    Exporter exporter

    // OneofWrappers is list of pointers to oneof wrapper struct types.
    OneofWrappers []interface{}
    // contains filtered or unexported fields
}

func (*MessageInfo) Descriptor

func (mi *MessageInfo) Descriptor() protoreflect.MessageDescriptor

func (*MessageInfo) Enum

func (mi *MessageInfo) Enum(i int) protoreflect.EnumType

func (*MessageInfo) Message

func (mi *MessageInfo) Message(i int) protoreflect.MessageType

func (*MessageInfo) MessageOf

func (mi *MessageInfo) MessageOf(m interface{}) protoreflect.Message

MessageOf returns a reflective view over a message. The input must be a pointer to a named Go struct. If the provided type has a ProtoReflect method, it must be implemented by calling this method.

func (*MessageInfo) New

func (mi *MessageInfo) New() protoreflect.Message

func (*MessageInfo) Zero

func (mi *MessageInfo) Zero() protoreflect.Message

type MessageState

MessageState is a data structure that is nested as the first field in a concrete message. It provides a way to implement the ProtoReflect method in an allocation-free way without needing to have a shadow Go type generated for every message type. This technique only works using unsafe.

Example generated code:

type M struct {
	state protoimpl.MessageState

	Field1 int32
	Field2 string
	Field3 *BarMessage
	...
}

func (m *M) ProtoReflect() protoreflect.Message {
	mi := &file_fizz_buzz_proto_msgInfos[5]
	if protoimpl.UnsafeEnabled && m != nil {
		ms := protoimpl.X.MessageStateOf(Pointer(m))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(m)
}

The MessageState type holds a *MessageInfo, which must be atomically set to the message info associated with a given message instance. By unsafely converting a *M into a *MessageState, the MessageState object has access to all the information needed to implement protobuf reflection. It has access to the message info as its first field, and a pointer to the MessageState is identical to a pointer to the concrete message value.

Requirements:

type MessageState struct {
    pragma.NoUnkeyedLiterals
    pragma.DoNotCompare
    pragma.DoNotCopy
    // contains filtered or unexported fields
}

type Pointer

Pointer is an opaque pointer type.

type Pointer unsafe.Pointer

type SizeCache

type SizeCache = int32

type UnknownFields

type UnknownFields = unknownFieldsA // TODO: switch to unknownFieldsB

type ValidationStatus

ValidationStatus is the result of validating the wire-format encoding of a message.

type ValidationStatus int
const (
    // ValidationUnknown indicates that unmarshaling the message might succeed or fail.
    // The validator was unable to render a judgement.
    //
    // The only causes of this status are an aberrant message type appearing somewhere
    // in the message or a failure in the extension resolver.
    ValidationUnknown ValidationStatus = iota + 1

    // ValidationInvalid indicates that unmarshaling the message will fail.
    ValidationInvalid

    // ValidationValid indicates that unmarshaling the message will succeed.
    ValidationValid
)

func Validate

func Validate(mt protoreflect.MessageType, in protoiface.UnmarshalInput) (out protoiface.UnmarshalOutput, _ ValidationStatus)

Validate determines whether the contents of the buffer are a valid wire encoding of the message type.

This function is exposed for testing.

func (ValidationStatus) String

func (v ValidationStatus) String() string

type WeakFields

type WeakFields = map[int32]protoreflect.ProtoMessage