mirror of https://github.com/docker/cli.git
vendor: google.golang.org/protobuf v1.35.1
full diff: https://github.com/protocolbuffers/protobuf-go/compare/v1.34.1...v1.35.1
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
(cherry picked from commit 1bba009944
)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
2521abdb1b
commit
3f28d05292
|
@ -101,5 +101,5 @@ require (
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect
|
||||||
google.golang.org/grpc v1.66.2 // indirect
|
google.golang.org/grpc v1.66.2 // indirect
|
||||||
google.golang.org/protobuf v1.34.1 // indirect
|
google.golang.org/protobuf v1.35.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
|
@ -425,8 +425,8 @@ google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo=
|
||||||
google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y=
|
google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y=
|
||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
|
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
|
||||||
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||||
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/cenkalti/backoff.v2 v2.2.1 h1:eJ9UAg01/HIHG987TwxvnzK2MgxXq97YY6rYDpY9aII=
|
gopkg.in/cenkalti/backoff.v2 v2.2.1 h1:eJ9UAg01/HIHG987TwxvnzK2MgxXq97YY6rYDpY9aII=
|
||||||
|
|
|
@ -102,7 +102,7 @@ type decoder struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// newError returns an error object with position info.
|
// newError returns an error object with position info.
|
||||||
func (d decoder) newError(pos int, f string, x ...interface{}) error {
|
func (d decoder) newError(pos int, f string, x ...any) error {
|
||||||
line, column := d.Position(pos)
|
line, column := d.Position(pos)
|
||||||
head := fmt.Sprintf("(line %d:%d): ", line, column)
|
head := fmt.Sprintf("(line %d:%d): ", line, column)
|
||||||
return errors.New(head+f, x...)
|
return errors.New(head+f, x...)
|
||||||
|
@ -114,7 +114,7 @@ func (d decoder) unexpectedTokenError(tok json.Token) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// syntaxError returns a syntax error for given position.
|
// syntaxError returns a syntax error for given position.
|
||||||
func (d decoder) syntaxError(pos int, f string, x ...interface{}) error {
|
func (d decoder) syntaxError(pos int, f string, x ...any) error {
|
||||||
line, column := d.Position(pos)
|
line, column := d.Position(pos)
|
||||||
head := fmt.Sprintf("syntax error (line %d:%d): ", line, column)
|
head := fmt.Sprintf("syntax error (line %d:%d): ", line, column)
|
||||||
return errors.New(head+f, x...)
|
return errors.New(head+f, x...)
|
||||||
|
@ -351,7 +351,7 @@ func (d decoder) unmarshalScalar(fd protoreflect.FieldDescriptor) (protoreflect.
|
||||||
panic(fmt.Sprintf("unmarshalScalar: invalid scalar kind %v", kind))
|
panic(fmt.Sprintf("unmarshalScalar: invalid scalar kind %v", kind))
|
||||||
}
|
}
|
||||||
|
|
||||||
return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v type: %v", kind, tok.RawString())
|
return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v field %v: %v", kind, fd.JSONName(), tok.RawString())
|
||||||
}
|
}
|
||||||
|
|
||||||
func unmarshalInt(tok json.Token, bitSize int) (protoreflect.Value, bool) {
|
func unmarshalInt(tok json.Token, bitSize int) (protoreflect.Value, bool) {
|
||||||
|
|
|
@ -216,9 +216,7 @@ func (m unpopulatedFieldRanger) Range(f func(protoreflect.FieldDescriptor, proto
|
||||||
}
|
}
|
||||||
|
|
||||||
v := m.Get(fd)
|
v := m.Get(fd)
|
||||||
isProto2Scalar := fd.Syntax() == protoreflect.Proto2 && fd.Default().IsValid()
|
if fd.HasPresence() {
|
||||||
isSingularMessage := fd.Cardinality() != protoreflect.Repeated && fd.Message() != nil
|
|
||||||
if isProto2Scalar || isSingularMessage {
|
|
||||||
if m.skipNull {
|
if m.skipNull {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ type decoder struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// newError returns an error object with position info.
|
// newError returns an error object with position info.
|
||||||
func (d decoder) newError(pos int, f string, x ...interface{}) error {
|
func (d decoder) newError(pos int, f string, x ...any) error {
|
||||||
line, column := d.Position(pos)
|
line, column := d.Position(pos)
|
||||||
head := fmt.Sprintf("(line %d:%d): ", line, column)
|
head := fmt.Sprintf("(line %d:%d): ", line, column)
|
||||||
return errors.New(head+f, x...)
|
return errors.New(head+f, x...)
|
||||||
|
@ -96,7 +96,7 @@ func (d decoder) unexpectedTokenError(tok text.Token) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// syntaxError returns a syntax error for given position.
|
// syntaxError returns a syntax error for given position.
|
||||||
func (d decoder) syntaxError(pos int, f string, x ...interface{}) error {
|
func (d decoder) syntaxError(pos int, f string, x ...any) error {
|
||||||
line, column := d.Position(pos)
|
line, column := d.Position(pos)
|
||||||
head := fmt.Sprintf("syntax error (line %d:%d): ", line, column)
|
head := fmt.Sprintf("syntax error (line %d:%d): ", line, column)
|
||||||
return errors.New(head+f, x...)
|
return errors.New(head+f, x...)
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
// dependency on the descriptor proto package).
|
// dependency on the descriptor proto package).
|
||||||
package descopts
|
package descopts
|
||||||
|
|
||||||
import pref "google.golang.org/protobuf/reflect/protoreflect"
|
import "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
|
||||||
// These variables are set by the init function in descriptor.pb.go via logic
|
// These variables are set by the init function in descriptor.pb.go via logic
|
||||||
// in internal/filetype. In other words, so long as the descriptor proto package
|
// in internal/filetype. In other words, so long as the descriptor proto package
|
||||||
|
@ -17,13 +17,13 @@ import pref "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
//
|
//
|
||||||
// Each variable is populated with a nil pointer to the options struct.
|
// Each variable is populated with a nil pointer to the options struct.
|
||||||
var (
|
var (
|
||||||
File pref.ProtoMessage
|
File protoreflect.ProtoMessage
|
||||||
Enum pref.ProtoMessage
|
Enum protoreflect.ProtoMessage
|
||||||
EnumValue pref.ProtoMessage
|
EnumValue protoreflect.ProtoMessage
|
||||||
Message pref.ProtoMessage
|
Message protoreflect.ProtoMessage
|
||||||
Field pref.ProtoMessage
|
Field protoreflect.ProtoMessage
|
||||||
Oneof pref.ProtoMessage
|
Oneof protoreflect.ProtoMessage
|
||||||
ExtensionRange pref.ProtoMessage
|
ExtensionRange protoreflect.ProtoMessage
|
||||||
Service pref.ProtoMessage
|
Service protoreflect.ProtoMessage
|
||||||
Method pref.ProtoMessage
|
Method protoreflect.ProtoMessage
|
||||||
)
|
)
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
// Package editionssupport defines constants for editions that are supported.
|
// Package editionssupport defines constants for editions that are supported.
|
||||||
package editionssupport
|
package editionssupport
|
||||||
|
|
||||||
import descriptorpb "google.golang.org/protobuf/types/descriptorpb"
|
import "google.golang.org/protobuf/types/descriptorpb"
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Minimum = descriptorpb.Edition_EDITION_PROTO2
|
Minimum = descriptorpb.Edition_EDITION_PROTO2
|
||||||
|
|
|
@ -214,7 +214,7 @@ func (d *Decoder) parseNext() (Token, error) {
|
||||||
|
|
||||||
// newSyntaxError returns an error with line and column information useful for
|
// newSyntaxError returns an error with line and column information useful for
|
||||||
// syntax errors.
|
// syntax errors.
|
||||||
func (d *Decoder) newSyntaxError(pos int, f string, x ...interface{}) error {
|
func (d *Decoder) newSyntaxError(pos int, f string, x ...any) error {
|
||||||
e := errors.New(f, x...)
|
e := errors.New(f, x...)
|
||||||
line, column := d.Position(pos)
|
line, column := d.Position(pos)
|
||||||
return errors.New("syntax error (line %d:%d): %v", line, column, e)
|
return errors.New("syntax error (line %d:%d): %v", line, column, e)
|
||||||
|
|
|
@ -601,7 +601,7 @@ func (d *Decoder) consumeToken(kind Kind, size int, attrs uint8) Token {
|
||||||
|
|
||||||
// newSyntaxError returns a syntax error with line and column information for
|
// newSyntaxError returns a syntax error with line and column information for
|
||||||
// current position.
|
// current position.
|
||||||
func (d *Decoder) newSyntaxError(f string, x ...interface{}) error {
|
func (d *Decoder) newSyntaxError(f string, x ...any) error {
|
||||||
e := errors.New(f, x...)
|
e := errors.New(f, x...)
|
||||||
line, column := d.Position(len(d.orig) - len(d.in))
|
line, column := d.Position(len(d.orig) - len(d.in))
|
||||||
return errors.New("syntax error (line %d:%d): %v", line, column, e)
|
return errors.New("syntax error (line %d:%d): %v", line, column, e)
|
||||||
|
|
|
@ -17,7 +17,7 @@ var Error = errors.New("protobuf error")
|
||||||
|
|
||||||
// New formats a string according to the format specifier and arguments and
|
// New formats a string according to the format specifier and arguments and
|
||||||
// returns an error that has a "proto" prefix.
|
// returns an error that has a "proto" prefix.
|
||||||
func New(f string, x ...interface{}) error {
|
func New(f string, x ...any) error {
|
||||||
return &prefixError{s: format(f, x...)}
|
return &prefixError{s: format(f, x...)}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ func (e *prefixError) Unwrap() error {
|
||||||
|
|
||||||
// Wrap returns an error that has a "proto" prefix, the formatted string described
|
// Wrap returns an error that has a "proto" prefix, the formatted string described
|
||||||
// by the format specifier and arguments, and a suffix of err. The error wraps err.
|
// by the format specifier and arguments, and a suffix of err. The error wraps err.
|
||||||
func Wrap(err error, f string, x ...interface{}) error {
|
func Wrap(err error, f string, x ...any) error {
|
||||||
return &wrapError{
|
return &wrapError{
|
||||||
s: format(f, x...),
|
s: format(f, x...),
|
||||||
err: err,
|
err: err,
|
||||||
|
@ -67,7 +67,7 @@ func (e *wrapError) Is(target error) bool {
|
||||||
return target == Error
|
return target == Error
|
||||||
}
|
}
|
||||||
|
|
||||||
func format(f string, x ...interface{}) string {
|
func format(f string, x ...any) string {
|
||||||
// avoid "proto: " prefix when chaining
|
// avoid "proto: " prefix when chaining
|
||||||
for i := 0; i < len(x); i++ {
|
for i := 0; i < len(x); i++ {
|
||||||
switch e := x[i].(type) {
|
switch e := x[i].(type) {
|
||||||
|
|
|
@ -258,6 +258,7 @@ type (
|
||||||
StringName stringName
|
StringName stringName
|
||||||
IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto
|
IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto
|
||||||
IsWeak bool // promoted from google.protobuf.FieldOptions
|
IsWeak bool // promoted from google.protobuf.FieldOptions
|
||||||
|
IsLazy bool // promoted from google.protobuf.FieldOptions
|
||||||
Default defaultValue
|
Default defaultValue
|
||||||
ContainingOneof protoreflect.OneofDescriptor // must be consistent with Message.Oneofs.Fields
|
ContainingOneof protoreflect.OneofDescriptor // must be consistent with Message.Oneofs.Fields
|
||||||
Enum protoreflect.EnumDescriptor
|
Enum protoreflect.EnumDescriptor
|
||||||
|
@ -351,6 +352,7 @@ func (fd *Field) IsPacked() bool {
|
||||||
}
|
}
|
||||||
func (fd *Field) IsExtension() bool { return false }
|
func (fd *Field) IsExtension() bool { return false }
|
||||||
func (fd *Field) IsWeak() bool { return fd.L1.IsWeak }
|
func (fd *Field) IsWeak() bool { return fd.L1.IsWeak }
|
||||||
|
func (fd *Field) IsLazy() bool { return fd.L1.IsLazy }
|
||||||
func (fd *Field) IsList() bool { return fd.Cardinality() == protoreflect.Repeated && !fd.IsMap() }
|
func (fd *Field) IsList() bool { return fd.Cardinality() == protoreflect.Repeated && !fd.IsMap() }
|
||||||
func (fd *Field) IsMap() bool { return fd.Message() != nil && fd.Message().IsMapEntry() }
|
func (fd *Field) IsMap() bool { return fd.Message() != nil && fd.Message().IsMapEntry() }
|
||||||
func (fd *Field) MapKey() protoreflect.FieldDescriptor {
|
func (fd *Field) MapKey() protoreflect.FieldDescriptor {
|
||||||
|
@ -383,6 +385,10 @@ func (fd *Field) Message() protoreflect.MessageDescriptor {
|
||||||
}
|
}
|
||||||
return fd.L1.Message
|
return fd.L1.Message
|
||||||
}
|
}
|
||||||
|
func (fd *Field) IsMapEntry() bool {
|
||||||
|
parent, ok := fd.L0.Parent.(protoreflect.MessageDescriptor)
|
||||||
|
return ok && parent.IsMapEntry()
|
||||||
|
}
|
||||||
func (fd *Field) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, fd) }
|
func (fd *Field) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, fd) }
|
||||||
func (fd *Field) ProtoType(protoreflect.FieldDescriptor) {}
|
func (fd *Field) ProtoType(protoreflect.FieldDescriptor) {}
|
||||||
|
|
||||||
|
@ -421,6 +427,7 @@ type (
|
||||||
Extendee protoreflect.MessageDescriptor
|
Extendee protoreflect.MessageDescriptor
|
||||||
Cardinality protoreflect.Cardinality
|
Cardinality protoreflect.Cardinality
|
||||||
Kind protoreflect.Kind
|
Kind protoreflect.Kind
|
||||||
|
IsLazy bool
|
||||||
EditionFeatures EditionFeatures
|
EditionFeatures EditionFeatures
|
||||||
}
|
}
|
||||||
ExtensionL2 struct {
|
ExtensionL2 struct {
|
||||||
|
@ -461,6 +468,7 @@ func (xd *Extension) IsPacked() bool {
|
||||||
}
|
}
|
||||||
func (xd *Extension) IsExtension() bool { return true }
|
func (xd *Extension) IsExtension() bool { return true }
|
||||||
func (xd *Extension) IsWeak() bool { return false }
|
func (xd *Extension) IsWeak() bool { return false }
|
||||||
|
func (xd *Extension) IsLazy() bool { return xd.L1.IsLazy }
|
||||||
func (xd *Extension) IsList() bool { return xd.Cardinality() == protoreflect.Repeated }
|
func (xd *Extension) IsList() bool { return xd.Cardinality() == protoreflect.Repeated }
|
||||||
func (xd *Extension) IsMap() bool { return false }
|
func (xd *Extension) IsMap() bool { return false }
|
||||||
func (xd *Extension) MapKey() protoreflect.FieldDescriptor { return nil }
|
func (xd *Extension) MapKey() protoreflect.FieldDescriptor { return nil }
|
||||||
|
|
|
@ -495,6 +495,8 @@ func (xd *Extension) unmarshalOptions(b []byte) {
|
||||||
switch num {
|
switch num {
|
||||||
case genid.FieldOptions_Packed_field_number:
|
case genid.FieldOptions_Packed_field_number:
|
||||||
xd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)
|
xd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)
|
||||||
|
case genid.FieldOptions_Lazy_field_number:
|
||||||
|
xd.L1.IsLazy = protowire.DecodeBool(v)
|
||||||
}
|
}
|
||||||
case protowire.BytesType:
|
case protowire.BytesType:
|
||||||
v, m := protowire.ConsumeBytes(b)
|
v, m := protowire.ConsumeBytes(b)
|
||||||
|
@ -534,7 +536,7 @@ func (sd *Service) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protor
|
||||||
}
|
}
|
||||||
|
|
||||||
var nameBuilderPool = sync.Pool{
|
var nameBuilderPool = sync.Pool{
|
||||||
New: func() interface{} { return new(strs.Builder) },
|
New: func() any { return new(strs.Builder) },
|
||||||
}
|
}
|
||||||
|
|
||||||
func getBuilder() *strs.Builder {
|
func getBuilder() *strs.Builder {
|
||||||
|
|
|
@ -45,6 +45,11 @@ func (file *File) resolveMessages() {
|
||||||
case protoreflect.MessageKind, protoreflect.GroupKind:
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
fd.L1.Message = file.resolveMessageDependency(fd.L1.Message, listFieldDeps, depIdx)
|
fd.L1.Message = file.resolveMessageDependency(fd.L1.Message, listFieldDeps, depIdx)
|
||||||
depIdx++
|
depIdx++
|
||||||
|
if fd.L1.Kind == protoreflect.GroupKind && (fd.IsMap() || fd.IsMapEntry()) {
|
||||||
|
// A map field might inherit delimited encoding from a file-wide default feature.
|
||||||
|
// But maps never actually use delimited encoding. (At least for now...)
|
||||||
|
fd.L1.Kind = protoreflect.MessageKind
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default is resolved here since it depends on Enum being resolved.
|
// Default is resolved here since it depends on Enum being resolved.
|
||||||
|
@ -499,6 +504,8 @@ func (fd *Field) unmarshalOptions(b []byte) {
|
||||||
fd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)
|
fd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)
|
||||||
case genid.FieldOptions_Weak_field_number:
|
case genid.FieldOptions_Weak_field_number:
|
||||||
fd.L1.IsWeak = protowire.DecodeBool(v)
|
fd.L1.IsWeak = protowire.DecodeBool(v)
|
||||||
|
case genid.FieldOptions_Lazy_field_number:
|
||||||
|
fd.L1.IsLazy = protowire.DecodeBool(v)
|
||||||
case FieldOptions_EnforceUTF8:
|
case FieldOptions_EnforceUTF8:
|
||||||
fd.L1.EditionFeatures.IsUTF8Validated = protowire.DecodeBool(v)
|
fd.L1.EditionFeatures.IsUTF8Validated = protowire.DecodeBool(v)
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ func unmarshalFeatureSet(b []byte, parent EditionFeatures) EditionFeatures {
|
||||||
v, m := protowire.ConsumeBytes(b)
|
v, m := protowire.ConsumeBytes(b)
|
||||||
b = b[m:]
|
b = b[m:]
|
||||||
switch num {
|
switch num {
|
||||||
case genid.GoFeatures_LegacyUnmarshalJsonEnum_field_number:
|
case genid.FeatureSet_Go_ext_number:
|
||||||
parent = unmarshalGoFeature(v, parent)
|
parent = unmarshalGoFeature(v, parent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ type Builder struct {
|
||||||
// and for input and output messages referenced by service methods.
|
// and for input and output messages referenced by service methods.
|
||||||
// Dependencies must come after declarations, but the ordering of
|
// Dependencies must come after declarations, but the ordering of
|
||||||
// dependencies themselves is unspecified.
|
// dependencies themselves is unspecified.
|
||||||
GoTypes []interface{}
|
GoTypes []any
|
||||||
|
|
||||||
// DependencyIndexes is an ordered list of indexes into GoTypes for the
|
// DependencyIndexes is an ordered list of indexes into GoTypes for the
|
||||||
// dependencies of messages, extensions, or services.
|
// dependencies of messages, extensions, or services.
|
||||||
|
@ -268,7 +268,7 @@ func (x depIdxs) Get(i, j int32) int32 {
|
||||||
|
|
||||||
type (
|
type (
|
||||||
resolverByIndex struct {
|
resolverByIndex struct {
|
||||||
goTypes []interface{}
|
goTypes []any
|
||||||
depIdxs depIdxs
|
depIdxs depIdxs
|
||||||
fileRegistry
|
fileRegistry
|
||||||
}
|
}
|
||||||
|
|
|
@ -860,11 +860,13 @@ const (
|
||||||
EnumValueOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
EnumValueOptions_Deprecated_field_name protoreflect.Name = "deprecated"
|
||||||
EnumValueOptions_Features_field_name protoreflect.Name = "features"
|
EnumValueOptions_Features_field_name protoreflect.Name = "features"
|
||||||
EnumValueOptions_DebugRedact_field_name protoreflect.Name = "debug_redact"
|
EnumValueOptions_DebugRedact_field_name protoreflect.Name = "debug_redact"
|
||||||
|
EnumValueOptions_FeatureSupport_field_name protoreflect.Name = "feature_support"
|
||||||
EnumValueOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
EnumValueOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
|
||||||
|
|
||||||
EnumValueOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.deprecated"
|
EnumValueOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.deprecated"
|
||||||
EnumValueOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.features"
|
EnumValueOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.features"
|
||||||
EnumValueOptions_DebugRedact_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.debug_redact"
|
EnumValueOptions_DebugRedact_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.debug_redact"
|
||||||
|
EnumValueOptions_FeatureSupport_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.feature_support"
|
||||||
EnumValueOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.uninterpreted_option"
|
EnumValueOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.uninterpreted_option"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -873,6 +875,7 @@ const (
|
||||||
EnumValueOptions_Deprecated_field_number protoreflect.FieldNumber = 1
|
EnumValueOptions_Deprecated_field_number protoreflect.FieldNumber = 1
|
||||||
EnumValueOptions_Features_field_number protoreflect.FieldNumber = 2
|
EnumValueOptions_Features_field_number protoreflect.FieldNumber = 2
|
||||||
EnumValueOptions_DebugRedact_field_number protoreflect.FieldNumber = 3
|
EnumValueOptions_DebugRedact_field_number protoreflect.FieldNumber = 3
|
||||||
|
EnumValueOptions_FeatureSupport_field_number protoreflect.FieldNumber = 4
|
||||||
EnumValueOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
EnumValueOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,6 @@
|
||||||
// and the well-known types.
|
// and the well-known types.
|
||||||
package genid
|
package genid
|
||||||
|
|
||||||
import protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
import "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
|
||||||
const GoogleProtobuf_package protoreflect.FullName = "google.protobuf"
|
const GoogleProtobuf_package protoreflect.FullName = "google.protobuf"
|
||||||
|
|
|
@ -12,20 +12,25 @@ import (
|
||||||
|
|
||||||
const File_google_protobuf_go_features_proto = "google/protobuf/go_features.proto"
|
const File_google_protobuf_go_features_proto = "google/protobuf/go_features.proto"
|
||||||
|
|
||||||
// Names for google.protobuf.GoFeatures.
|
// Names for pb.GoFeatures.
|
||||||
const (
|
const (
|
||||||
GoFeatures_message_name protoreflect.Name = "GoFeatures"
|
GoFeatures_message_name protoreflect.Name = "GoFeatures"
|
||||||
GoFeatures_message_fullname protoreflect.FullName = "google.protobuf.GoFeatures"
|
GoFeatures_message_fullname protoreflect.FullName = "pb.GoFeatures"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field names for google.protobuf.GoFeatures.
|
// Field names for pb.GoFeatures.
|
||||||
const (
|
const (
|
||||||
GoFeatures_LegacyUnmarshalJsonEnum_field_name protoreflect.Name = "legacy_unmarshal_json_enum"
|
GoFeatures_LegacyUnmarshalJsonEnum_field_name protoreflect.Name = "legacy_unmarshal_json_enum"
|
||||||
|
|
||||||
GoFeatures_LegacyUnmarshalJsonEnum_field_fullname protoreflect.FullName = "google.protobuf.GoFeatures.legacy_unmarshal_json_enum"
|
GoFeatures_LegacyUnmarshalJsonEnum_field_fullname protoreflect.FullName = "pb.GoFeatures.legacy_unmarshal_json_enum"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Field numbers for google.protobuf.GoFeatures.
|
// Field numbers for pb.GoFeatures.
|
||||||
const (
|
const (
|
||||||
GoFeatures_LegacyUnmarshalJsonEnum_field_number protoreflect.FieldNumber = 1
|
GoFeatures_LegacyUnmarshalJsonEnum_field_number protoreflect.FieldNumber = 1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Extension numbers
|
||||||
|
const (
|
||||||
|
FeatureSet_Go_ext_number protoreflect.FieldNumber = 1002
|
||||||
|
)
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
package genid
|
package genid
|
||||||
|
|
||||||
import protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
import "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
|
||||||
// Generic field names and numbers for synthetic map entry messages.
|
// Generic field names and numbers for synthetic map entry messages.
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
package genid
|
package genid
|
||||||
|
|
||||||
import protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
import "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
|
||||||
// Generic field name and number for messages in wrappers.proto.
|
// Generic field name and number for messages in wrappers.proto.
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -22,13 +22,13 @@ type Export struct{}
|
||||||
|
|
||||||
// NewError formats a string according to the format specifier and arguments and
|
// NewError formats a string according to the format specifier and arguments and
|
||||||
// returns an error that has a "proto" prefix.
|
// returns an error that has a "proto" prefix.
|
||||||
func (Export) NewError(f string, x ...interface{}) error {
|
func (Export) NewError(f string, x ...any) error {
|
||||||
return errors.New(f, x...)
|
return errors.New(f, x...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// enum is any enum type generated by protoc-gen-go
|
// enum is any enum type generated by protoc-gen-go
|
||||||
// and must be a named int32 type.
|
// and must be a named int32 type.
|
||||||
type enum = interface{}
|
type enum = any
|
||||||
|
|
||||||
// EnumOf returns the protoreflect.Enum interface over e.
|
// EnumOf returns the protoreflect.Enum interface over e.
|
||||||
// It returns nil if e is nil.
|
// It returns nil if e is nil.
|
||||||
|
@ -81,7 +81,7 @@ func (Export) EnumStringOf(ed protoreflect.EnumDescriptor, n protoreflect.EnumNu
|
||||||
|
|
||||||
// message is any message type generated by protoc-gen-go
|
// message is any message type generated by protoc-gen-go
|
||||||
// and must be a pointer to a named struct type.
|
// and must be a pointer to a named struct type.
|
||||||
type message = interface{}
|
type message = any
|
||||||
|
|
||||||
// legacyMessageWrapper wraps a v2 message as a v1 message.
|
// legacyMessageWrapper wraps a v2 message as a v1 message.
|
||||||
type legacyMessageWrapper struct{ m protoreflect.ProtoMessage }
|
type legacyMessageWrapper struct{ m protoreflect.ProtoMessage }
|
||||||
|
|
|
@ -68,7 +68,7 @@ func (mi *MessageInfo) isInitExtensions(ext *map[int32]ExtensionField) error {
|
||||||
}
|
}
|
||||||
for _, x := range *ext {
|
for _, x := range *ext {
|
||||||
ei := getExtensionFieldInfo(x.Type())
|
ei := getExtensionFieldInfo(x.Type())
|
||||||
if ei.funcs.isInit == nil {
|
if ei.funcs.isInit == nil || x.isUnexpandedLazy() {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
v := x.Value()
|
v := x.Value()
|
||||||
|
|
|
@ -67,7 +67,6 @@ type lazyExtensionValue struct {
|
||||||
xi *extensionFieldInfo
|
xi *extensionFieldInfo
|
||||||
value protoreflect.Value
|
value protoreflect.Value
|
||||||
b []byte
|
b []byte
|
||||||
fn func() protoreflect.Value
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type ExtensionField struct {
|
type ExtensionField struct {
|
||||||
|
@ -99,6 +98,28 @@ func (f *ExtensionField) canLazy(xt protoreflect.ExtensionType) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// isUnexpandedLazy returns true if the ExensionField is lazy and not
|
||||||
|
// yet expanded, which means it's present and already checked for
|
||||||
|
// initialized required fields.
|
||||||
|
func (f *ExtensionField) isUnexpandedLazy() bool {
|
||||||
|
return f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// lazyBuffer retrieves the buffer for a lazy extension if it's not yet expanded.
|
||||||
|
//
|
||||||
|
// The returned buffer has to be kept over whatever operation we're planning,
|
||||||
|
// as re-retrieving it will fail after the message is lazily decoded.
|
||||||
|
func (f *ExtensionField) lazyBuffer() []byte {
|
||||||
|
// This function might be in the critical path, so check the atomic without
|
||||||
|
// taking a look first, then only take the lock if needed.
|
||||||
|
if !f.isUnexpandedLazy() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
f.lazy.mu.Lock()
|
||||||
|
defer f.lazy.mu.Unlock()
|
||||||
|
return f.lazy.b
|
||||||
|
}
|
||||||
|
|
||||||
func (f *ExtensionField) lazyInit() {
|
func (f *ExtensionField) lazyInit() {
|
||||||
f.lazy.mu.Lock()
|
f.lazy.mu.Lock()
|
||||||
defer f.lazy.mu.Unlock()
|
defer f.lazy.mu.Unlock()
|
||||||
|
@ -136,10 +157,9 @@ func (f *ExtensionField) lazyInit() {
|
||||||
}
|
}
|
||||||
f.lazy.value = val
|
f.lazy.value = val
|
||||||
} else {
|
} else {
|
||||||
f.lazy.value = f.lazy.fn()
|
panic("No support for lazy fns for ExtensionField")
|
||||||
}
|
}
|
||||||
f.lazy.xi = nil
|
f.lazy.xi = nil
|
||||||
f.lazy.fn = nil
|
|
||||||
f.lazy.b = nil
|
f.lazy.b = nil
|
||||||
atomic.StoreUint32(&f.lazy.atomicOnce, 1)
|
atomic.StoreUint32(&f.lazy.atomicOnce, 1)
|
||||||
}
|
}
|
||||||
|
@ -152,13 +172,6 @@ func (f *ExtensionField) Set(t protoreflect.ExtensionType, v protoreflect.Value)
|
||||||
f.lazy = nil
|
f.lazy = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetLazy sets the type and a value that is to be lazily evaluated upon first use.
|
|
||||||
// This must not be called concurrently.
|
|
||||||
func (f *ExtensionField) SetLazy(t protoreflect.ExtensionType, fn func() protoreflect.Value) {
|
|
||||||
f.typ = t
|
|
||||||
f.lazy = &lazyExtensionValue{fn: fn}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Value returns the value of the extension field.
|
// Value returns the value of the extension field.
|
||||||
// This may be called concurrently.
|
// This may be called concurrently.
|
||||||
func (f *ExtensionField) Value() protoreflect.Value {
|
func (f *ExtensionField) Value() protoreflect.Value {
|
||||||
|
|
|
@ -65,6 +65,9 @@ func (mi *MessageInfo) initOneofFieldCoders(od protoreflect.OneofDescriptor, si
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return out, err
|
return out, err
|
||||||
}
|
}
|
||||||
|
if cf.funcs.isInit == nil {
|
||||||
|
out.initialized = true
|
||||||
|
}
|
||||||
vi.Set(vw)
|
vi.Set(vw)
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -189,6 +189,9 @@ func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) {
|
||||||
if mi.methods.Merge == nil {
|
if mi.methods.Merge == nil {
|
||||||
mi.methods.Merge = mi.merge
|
mi.methods.Merge = mi.merge
|
||||||
}
|
}
|
||||||
|
if mi.methods.Equal == nil {
|
||||||
|
mi.methods.Equal = equal
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// getUnknownBytes returns a *[]byte for the unknown fields.
|
// getUnknownBytes returns a *[]byte for the unknown fields.
|
||||||
|
|
|
@ -26,6 +26,15 @@ func sizeMessageSet(mi *MessageInfo, p pointer, opts marshalOptions) (size int)
|
||||||
}
|
}
|
||||||
num, _ := protowire.DecodeTag(xi.wiretag)
|
num, _ := protowire.DecodeTag(xi.wiretag)
|
||||||
size += messageset.SizeField(num)
|
size += messageset.SizeField(num)
|
||||||
|
if fullyLazyExtensions(opts) {
|
||||||
|
// Don't expand the extension, instead use the buffer to calculate size
|
||||||
|
if lb := x.lazyBuffer(); lb != nil {
|
||||||
|
// We got hold of the buffer, so it's still lazy.
|
||||||
|
// Don't count the tag size in the extension buffer, it's already added.
|
||||||
|
size += protowire.SizeTag(messageset.FieldMessage) + len(lb) - xi.tagsize
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
size += xi.funcs.size(x.Value(), protowire.SizeTag(messageset.FieldMessage), opts)
|
size += xi.funcs.size(x.Value(), protowire.SizeTag(messageset.FieldMessage), opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,6 +94,19 @@ func marshalMessageSetField(mi *MessageInfo, b []byte, x ExtensionField, opts ma
|
||||||
xi := getExtensionFieldInfo(x.Type())
|
xi := getExtensionFieldInfo(x.Type())
|
||||||
num, _ := protowire.DecodeTag(xi.wiretag)
|
num, _ := protowire.DecodeTag(xi.wiretag)
|
||||||
b = messageset.AppendFieldStart(b, num)
|
b = messageset.AppendFieldStart(b, num)
|
||||||
|
|
||||||
|
if fullyLazyExtensions(opts) {
|
||||||
|
// Don't expand the extension if it's still in wire format, instead use the buffer content.
|
||||||
|
if lb := x.lazyBuffer(); lb != nil {
|
||||||
|
// The tag inside the lazy buffer is a different tag (the extension
|
||||||
|
// number), but what we need here is the tag for FieldMessage:
|
||||||
|
b = protowire.AppendVarint(b, protowire.EncodeTag(messageset.FieldMessage, protowire.BytesType))
|
||||||
|
b = append(b, lb[xi.tagsize:]...)
|
||||||
|
b = messageset.AppendFieldEnd(b)
|
||||||
|
return b, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
b, err := xi.funcs.marshal(b, x.Value(), protowire.EncodeTag(messageset.FieldMessage, protowire.BytesType), opts)
|
b, err := xi.funcs.marshal(b, x.Value(), protowire.EncodeTag(messageset.FieldMessage, protowire.BytesType), opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return b, err
|
return b, err
|
||||||
|
|
|
@ -1,210 +0,0 @@
|
||||||
// Copyright 2019 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.
|
|
||||||
|
|
||||||
//go:build purego || appengine
|
|
||||||
// +build purego appengine
|
|
||||||
|
|
||||||
package impl
|
|
||||||
|
|
||||||
import (
|
|
||||||
"reflect"
|
|
||||||
|
|
||||||
"google.golang.org/protobuf/encoding/protowire"
|
|
||||||
)
|
|
||||||
|
|
||||||
func sizeEnum(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) {
|
|
||||||
v := p.v.Elem().Int()
|
|
||||||
return f.tagsize + protowire.SizeVarint(uint64(v))
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendEnum(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
|
|
||||||
v := p.v.Elem().Int()
|
|
||||||
b = protowire.AppendVarint(b, f.wiretag)
|
|
||||||
b = protowire.AppendVarint(b, uint64(v))
|
|
||||||
return b, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func consumeEnum(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) {
|
|
||||||
if wtyp != protowire.VarintType {
|
|
||||||
return out, errUnknown
|
|
||||||
}
|
|
||||||
v, n := protowire.ConsumeVarint(b)
|
|
||||||
if n < 0 {
|
|
||||||
return out, errDecode
|
|
||||||
}
|
|
||||||
p.v.Elem().SetInt(int64(v))
|
|
||||||
out.n = n
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func mergeEnum(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
|
|
||||||
dst.v.Elem().Set(src.v.Elem())
|
|
||||||
}
|
|
||||||
|
|
||||||
var coderEnum = pointerCoderFuncs{
|
|
||||||
size: sizeEnum,
|
|
||||||
marshal: appendEnum,
|
|
||||||
unmarshal: consumeEnum,
|
|
||||||
merge: mergeEnum,
|
|
||||||
}
|
|
||||||
|
|
||||||
func sizeEnumNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
|
|
||||||
if p.v.Elem().Int() == 0 {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
return sizeEnum(p, f, opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendEnumNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
|
|
||||||
if p.v.Elem().Int() == 0 {
|
|
||||||
return b, nil
|
|
||||||
}
|
|
||||||
return appendEnum(b, p, f, opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
func mergeEnumNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
|
|
||||||
if src.v.Elem().Int() != 0 {
|
|
||||||
dst.v.Elem().Set(src.v.Elem())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var coderEnumNoZero = pointerCoderFuncs{
|
|
||||||
size: sizeEnumNoZero,
|
|
||||||
marshal: appendEnumNoZero,
|
|
||||||
unmarshal: consumeEnum,
|
|
||||||
merge: mergeEnumNoZero,
|
|
||||||
}
|
|
||||||
|
|
||||||
func sizeEnumPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
|
|
||||||
return sizeEnum(pointer{p.v.Elem()}, f, opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendEnumPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
|
|
||||||
return appendEnum(b, pointer{p.v.Elem()}, f, opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
func consumeEnumPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
|
||||||
if wtyp != protowire.VarintType {
|
|
||||||
return out, errUnknown
|
|
||||||
}
|
|
||||||
if p.v.Elem().IsNil() {
|
|
||||||
p.v.Elem().Set(reflect.New(p.v.Elem().Type().Elem()))
|
|
||||||
}
|
|
||||||
return consumeEnum(b, pointer{p.v.Elem()}, wtyp, f, opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
func mergeEnumPtr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
|
|
||||||
if !src.v.Elem().IsNil() {
|
|
||||||
v := reflect.New(dst.v.Type().Elem().Elem())
|
|
||||||
v.Elem().Set(src.v.Elem().Elem())
|
|
||||||
dst.v.Elem().Set(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var coderEnumPtr = pointerCoderFuncs{
|
|
||||||
size: sizeEnumPtr,
|
|
||||||
marshal: appendEnumPtr,
|
|
||||||
unmarshal: consumeEnumPtr,
|
|
||||||
merge: mergeEnumPtr,
|
|
||||||
}
|
|
||||||
|
|
||||||
func sizeEnumSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
|
|
||||||
s := p.v.Elem()
|
|
||||||
for i, llen := 0, s.Len(); i < llen; i++ {
|
|
||||||
size += protowire.SizeVarint(uint64(s.Index(i).Int())) + f.tagsize
|
|
||||||
}
|
|
||||||
return size
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendEnumSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
|
|
||||||
s := p.v.Elem()
|
|
||||||
for i, llen := 0, s.Len(); i < llen; i++ {
|
|
||||||
b = protowire.AppendVarint(b, f.wiretag)
|
|
||||||
b = protowire.AppendVarint(b, uint64(s.Index(i).Int()))
|
|
||||||
}
|
|
||||||
return b, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func consumeEnumSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
|
|
||||||
s := p.v.Elem()
|
|
||||||
if wtyp == protowire.BytesType {
|
|
||||||
b, n := protowire.ConsumeBytes(b)
|
|
||||||
if n < 0 {
|
|
||||||
return out, errDecode
|
|
||||||
}
|
|
||||||
for len(b) > 0 {
|
|
||||||
v, n := protowire.ConsumeVarint(b)
|
|
||||||
if n < 0 {
|
|
||||||
return out, errDecode
|
|
||||||
}
|
|
||||||
rv := reflect.New(s.Type().Elem()).Elem()
|
|
||||||
rv.SetInt(int64(v))
|
|
||||||
s.Set(reflect.Append(s, rv))
|
|
||||||
b = b[n:]
|
|
||||||
}
|
|
||||||
out.n = n
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
if wtyp != protowire.VarintType {
|
|
||||||
return out, errUnknown
|
|
||||||
}
|
|
||||||
v, n := protowire.ConsumeVarint(b)
|
|
||||||
if n < 0 {
|
|
||||||
return out, errDecode
|
|
||||||
}
|
|
||||||
rv := reflect.New(s.Type().Elem()).Elem()
|
|
||||||
rv.SetInt(int64(v))
|
|
||||||
s.Set(reflect.Append(s, rv))
|
|
||||||
out.n = n
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func mergeEnumSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
|
|
||||||
dst.v.Elem().Set(reflect.AppendSlice(dst.v.Elem(), src.v.Elem()))
|
|
||||||
}
|
|
||||||
|
|
||||||
var coderEnumSlice = pointerCoderFuncs{
|
|
||||||
size: sizeEnumSlice,
|
|
||||||
marshal: appendEnumSlice,
|
|
||||||
unmarshal: consumeEnumSlice,
|
|
||||||
merge: mergeEnumSlice,
|
|
||||||
}
|
|
||||||
|
|
||||||
func sizeEnumPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
|
|
||||||
s := p.v.Elem()
|
|
||||||
llen := s.Len()
|
|
||||||
if llen == 0 {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
n := 0
|
|
||||||
for i := 0; i < llen; i++ {
|
|
||||||
n += protowire.SizeVarint(uint64(s.Index(i).Int()))
|
|
||||||
}
|
|
||||||
return f.tagsize + protowire.SizeBytes(n)
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendEnumPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
|
|
||||||
s := p.v.Elem()
|
|
||||||
llen := s.Len()
|
|
||||||
if llen == 0 {
|
|
||||||
return b, nil
|
|
||||||
}
|
|
||||||
b = protowire.AppendVarint(b, f.wiretag)
|
|
||||||
n := 0
|
|
||||||
for i := 0; i < llen; i++ {
|
|
||||||
n += protowire.SizeVarint(uint64(s.Index(i).Int()))
|
|
||||||
}
|
|
||||||
b = protowire.AppendVarint(b, uint64(n))
|
|
||||||
for i := 0; i < llen; i++ {
|
|
||||||
b = protowire.AppendVarint(b, uint64(s.Index(i).Int()))
|
|
||||||
}
|
|
||||||
return b, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var coderEnumPackedSlice = pointerCoderFuncs{
|
|
||||||
size: sizeEnumPackedSlice,
|
|
||||||
marshal: appendEnumPackedSlice,
|
|
||||||
unmarshal: consumeEnumSlice,
|
|
||||||
merge: mergeEnumSlice,
|
|
||||||
}
|
|
|
@ -2,9 +2,6 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine
|
|
||||||
// +build !purego,!appengine
|
|
||||||
|
|
||||||
package impl
|
package impl
|
||||||
|
|
||||||
// When using unsafe pointers, we can just treat enum values as int32s.
|
// When using unsafe pointers, we can just treat enum values as int32s.
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
// unwrapper unwraps the value to the underlying value.
|
// unwrapper unwraps the value to the underlying value.
|
||||||
// This is implemented by List and Map.
|
// This is implemented by List and Map.
|
||||||
type unwrapper interface {
|
type unwrapper interface {
|
||||||
protoUnwrap() interface{}
|
protoUnwrap() any
|
||||||
}
|
}
|
||||||
|
|
||||||
// A Converter coverts to/from Go reflect.Value types and protobuf protoreflect.Value types.
|
// A Converter coverts to/from Go reflect.Value types and protobuf protoreflect.Value types.
|
||||||
|
@ -322,7 +322,7 @@ func (c *stringConverter) PBValueOf(v reflect.Value) protoreflect.Value {
|
||||||
return protoreflect.ValueOfString(v.Convert(stringType).String())
|
return protoreflect.ValueOfString(v.Convert(stringType).String())
|
||||||
}
|
}
|
||||||
func (c *stringConverter) GoValueOf(v protoreflect.Value) reflect.Value {
|
func (c *stringConverter) GoValueOf(v protoreflect.Value) reflect.Value {
|
||||||
// pref.Value.String never panics, so we go through an interface
|
// protoreflect.Value.String never panics, so we go through an interface
|
||||||
// conversion here to check the type.
|
// conversion here to check the type.
|
||||||
s := v.Interface().(string)
|
s := v.Interface().(string)
|
||||||
if c.goType.Kind() == reflect.Slice && s == "" {
|
if c.goType.Kind() == reflect.Slice && s == "" {
|
||||||
|
|
|
@ -136,6 +136,6 @@ func (ls *listReflect) NewElement() protoreflect.Value {
|
||||||
func (ls *listReflect) IsValid() bool {
|
func (ls *listReflect) IsValid() bool {
|
||||||
return !ls.v.IsNil()
|
return !ls.v.IsNil()
|
||||||
}
|
}
|
||||||
func (ls *listReflect) protoUnwrap() interface{} {
|
func (ls *listReflect) protoUnwrap() any {
|
||||||
return ls.v.Interface()
|
return ls.v.Interface()
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,6 +116,6 @@ func (ms *mapReflect) NewValue() protoreflect.Value {
|
||||||
func (ms *mapReflect) IsValid() bool {
|
func (ms *mapReflect) IsValid() bool {
|
||||||
return !ms.v.IsNil()
|
return !ms.v.IsNil()
|
||||||
}
|
}
|
||||||
func (ms *mapReflect) protoUnwrap() interface{} {
|
func (ms *mapReflect) protoUnwrap() any {
|
||||||
return ms.v.Interface()
|
return ms.v.Interface()
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
"google.golang.org/protobuf/internal/flags"
|
"google.golang.org/protobuf/internal/flags"
|
||||||
proto "google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
piface "google.golang.org/protobuf/runtime/protoiface"
|
piface "google.golang.org/protobuf/runtime/protoiface"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -49,8 +49,11 @@ func (mi *MessageInfo) sizePointer(p pointer, opts marshalOptions) (size int) {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
if opts.UseCachedSize() && mi.sizecacheOffset.IsValid() {
|
if opts.UseCachedSize() && mi.sizecacheOffset.IsValid() {
|
||||||
if size := atomic.LoadInt32(p.Apply(mi.sizecacheOffset).Int32()); size >= 0 {
|
// The size cache contains the size + 1, to allow the
|
||||||
return int(size)
|
// zero value to be invalid, while also allowing for a
|
||||||
|
// 0 size to be cached.
|
||||||
|
if size := atomic.LoadInt32(p.Apply(mi.sizecacheOffset).Int32()); size > 0 {
|
||||||
|
return int(size - 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return mi.sizePointerSlow(p, opts)
|
return mi.sizePointerSlow(p, opts)
|
||||||
|
@ -60,7 +63,7 @@ func (mi *MessageInfo) sizePointerSlow(p pointer, opts marshalOptions) (size int
|
||||||
if flags.ProtoLegacy && mi.isMessageSet {
|
if flags.ProtoLegacy && mi.isMessageSet {
|
||||||
size = sizeMessageSet(mi, p, opts)
|
size = sizeMessageSet(mi, p, opts)
|
||||||
if mi.sizecacheOffset.IsValid() {
|
if mi.sizecacheOffset.IsValid() {
|
||||||
atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size))
|
atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size+1))
|
||||||
}
|
}
|
||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
@ -84,13 +87,16 @@ func (mi *MessageInfo) sizePointerSlow(p pointer, opts marshalOptions) (size int
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if mi.sizecacheOffset.IsValid() {
|
if mi.sizecacheOffset.IsValid() {
|
||||||
if size > math.MaxInt32 {
|
if size > (math.MaxInt32 - 1) {
|
||||||
// The size is too large for the int32 sizecache field.
|
// The size is too large for the int32 sizecache field.
|
||||||
// We will need to recompute the size when encoding;
|
// We will need to recompute the size when encoding;
|
||||||
// unfortunately expensive, but better than invalid output.
|
// unfortunately expensive, but better than invalid output.
|
||||||
atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), -1)
|
atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), 0)
|
||||||
} else {
|
} else {
|
||||||
atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size))
|
// The size cache contains the size + 1, to allow the
|
||||||
|
// zero value to be invalid, while also allowing for a
|
||||||
|
// 0 size to be cached.
|
||||||
|
atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size+1))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return size
|
return size
|
||||||
|
@ -149,6 +155,14 @@ func (mi *MessageInfo) marshalAppendPointer(b []byte, p pointer, opts marshalOpt
|
||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fullyLazyExtensions returns true if we should attempt to keep extensions lazy over size and marshal.
|
||||||
|
func fullyLazyExtensions(opts marshalOptions) bool {
|
||||||
|
// When deterministic marshaling is requested, force an unmarshal for lazy
|
||||||
|
// extensions to produce a deterministic result, instead of passing through
|
||||||
|
// bytes lazily that may or may not match what Go Protobuf would produce.
|
||||||
|
return opts.flags&piface.MarshalDeterministic == 0
|
||||||
|
}
|
||||||
|
|
||||||
func (mi *MessageInfo) sizeExtensions(ext *map[int32]ExtensionField, opts marshalOptions) (n int) {
|
func (mi *MessageInfo) sizeExtensions(ext *map[int32]ExtensionField, opts marshalOptions) (n int) {
|
||||||
if ext == nil {
|
if ext == nil {
|
||||||
return 0
|
return 0
|
||||||
|
@ -158,6 +172,14 @@ func (mi *MessageInfo) sizeExtensions(ext *map[int32]ExtensionField, opts marsha
|
||||||
if xi.funcs.size == nil {
|
if xi.funcs.size == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if fullyLazyExtensions(opts) {
|
||||||
|
// Don't expand the extension, instead use the buffer to calculate size
|
||||||
|
if lb := x.lazyBuffer(); lb != nil {
|
||||||
|
// We got hold of the buffer, so it's still lazy.
|
||||||
|
n += len(lb)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
n += xi.funcs.size(x.Value(), xi.tagsize, opts)
|
n += xi.funcs.size(x.Value(), xi.tagsize, opts)
|
||||||
}
|
}
|
||||||
return n
|
return n
|
||||||
|
@ -176,6 +198,13 @@ func (mi *MessageInfo) appendExtensions(b []byte, ext *map[int32]ExtensionField,
|
||||||
var err error
|
var err error
|
||||||
for _, x := range *ext {
|
for _, x := range *ext {
|
||||||
xi := getExtensionFieldInfo(x.Type())
|
xi := getExtensionFieldInfo(x.Type())
|
||||||
|
if fullyLazyExtensions(opts) {
|
||||||
|
// Don't expand the extension if it's still in wire format, instead use the buffer content.
|
||||||
|
if lb := x.lazyBuffer(); lb != nil {
|
||||||
|
b = append(b, lb...)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
b, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts)
|
b, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts)
|
||||||
}
|
}
|
||||||
return b, err
|
return b, err
|
||||||
|
@ -191,6 +220,13 @@ func (mi *MessageInfo) appendExtensions(b []byte, ext *map[int32]ExtensionField,
|
||||||
for _, k := range keys {
|
for _, k := range keys {
|
||||||
x := (*ext)[int32(k)]
|
x := (*ext)[int32(k)]
|
||||||
xi := getExtensionFieldInfo(x.Type())
|
xi := getExtensionFieldInfo(x.Type())
|
||||||
|
if fullyLazyExtensions(opts) {
|
||||||
|
// Don't expand the extension if it's still in wire format, instead use the buffer content.
|
||||||
|
if lb := x.lazyBuffer(); lb != nil {
|
||||||
|
b = append(b, lb...)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
b, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts)
|
b, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return b, err
|
return b, err
|
||||||
|
|
|
@ -0,0 +1,224 @@
|
||||||
|
// Copyright 2024 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 impl
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
|
||||||
|
"google.golang.org/protobuf/encoding/protowire"
|
||||||
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
|
)
|
||||||
|
|
||||||
|
func equal(in protoiface.EqualInput) protoiface.EqualOutput {
|
||||||
|
return protoiface.EqualOutput{Equal: equalMessage(in.MessageA, in.MessageB)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// equalMessage is a fast-path variant of protoreflect.equalMessage.
|
||||||
|
// It takes advantage of the internal messageState type to avoid
|
||||||
|
// unnecessary allocations, type assertions.
|
||||||
|
func equalMessage(mx, my protoreflect.Message) bool {
|
||||||
|
if mx == nil || my == nil {
|
||||||
|
return mx == my
|
||||||
|
}
|
||||||
|
if mx.Descriptor() != my.Descriptor() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
msx, ok := mx.(*messageState)
|
||||||
|
if !ok {
|
||||||
|
return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))
|
||||||
|
}
|
||||||
|
msy, ok := my.(*messageState)
|
||||||
|
if !ok {
|
||||||
|
return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))
|
||||||
|
}
|
||||||
|
|
||||||
|
mi := msx.messageInfo()
|
||||||
|
miy := msy.messageInfo()
|
||||||
|
if mi != miy {
|
||||||
|
return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))
|
||||||
|
}
|
||||||
|
mi.init()
|
||||||
|
// Compares regular fields
|
||||||
|
// Modified Message.Range code that compares two messages of the same type
|
||||||
|
// while going over the fields.
|
||||||
|
for _, ri := range mi.rangeInfos {
|
||||||
|
var fd protoreflect.FieldDescriptor
|
||||||
|
var vx, vy protoreflect.Value
|
||||||
|
|
||||||
|
switch ri := ri.(type) {
|
||||||
|
case *fieldInfo:
|
||||||
|
hx := ri.has(msx.pointer())
|
||||||
|
hy := ri.has(msy.pointer())
|
||||||
|
if hx != hy {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if !hx {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fd = ri.fieldDesc
|
||||||
|
vx = ri.get(msx.pointer())
|
||||||
|
vy = ri.get(msy.pointer())
|
||||||
|
case *oneofInfo:
|
||||||
|
fnx := ri.which(msx.pointer())
|
||||||
|
fny := ri.which(msy.pointer())
|
||||||
|
if fnx != fny {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if fnx <= 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fi := mi.fields[fnx]
|
||||||
|
fd = fi.fieldDesc
|
||||||
|
vx = fi.get(msx.pointer())
|
||||||
|
vy = fi.get(msy.pointer())
|
||||||
|
}
|
||||||
|
|
||||||
|
if !equalValue(fd, vx, vy) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compare extensions.
|
||||||
|
// This is more complicated because mx or my could have empty/nil extension maps,
|
||||||
|
// however some populated extension map values are equal to nil extension maps.
|
||||||
|
emx := mi.extensionMap(msx.pointer())
|
||||||
|
emy := mi.extensionMap(msy.pointer())
|
||||||
|
if emx != nil {
|
||||||
|
for k, x := range *emx {
|
||||||
|
xd := x.Type().TypeDescriptor()
|
||||||
|
xv := x.Value()
|
||||||
|
var y ExtensionField
|
||||||
|
ok := false
|
||||||
|
if emy != nil {
|
||||||
|
y, ok = (*emy)[k]
|
||||||
|
}
|
||||||
|
// We need to treat empty lists as equal to nil values
|
||||||
|
if emy == nil || !ok {
|
||||||
|
if xd.IsList() && xv.List().Len() == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if !equalValue(xd, xv, y.Value()) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if emy != nil {
|
||||||
|
// emy may have extensions emx does not have, need to check them as well
|
||||||
|
for k, y := range *emy {
|
||||||
|
if emx != nil {
|
||||||
|
// emx has the field, so we already checked it
|
||||||
|
if _, ok := (*emx)[k]; ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Empty lists are equal to nil
|
||||||
|
if y.Type().TypeDescriptor().IsList() && y.Value().List().Len() == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cant be equal if the extension is populated
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return equalUnknown(mx.GetUnknown(), my.GetUnknown())
|
||||||
|
}
|
||||||
|
|
||||||
|
func equalValue(fd protoreflect.FieldDescriptor, vx, vy protoreflect.Value) bool {
|
||||||
|
// slow path
|
||||||
|
if fd.Kind() != protoreflect.MessageKind {
|
||||||
|
return vx.Equal(vy)
|
||||||
|
}
|
||||||
|
|
||||||
|
// fast path special cases
|
||||||
|
if fd.IsMap() {
|
||||||
|
if fd.MapValue().Kind() == protoreflect.MessageKind {
|
||||||
|
return equalMessageMap(vx.Map(), vy.Map())
|
||||||
|
}
|
||||||
|
return vx.Equal(vy)
|
||||||
|
}
|
||||||
|
|
||||||
|
if fd.IsList() {
|
||||||
|
return equalMessageList(vx.List(), vy.List())
|
||||||
|
}
|
||||||
|
|
||||||
|
return equalMessage(vx.Message(), vy.Message())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mostly copied from protoreflect.equalMap.
|
||||||
|
// This variant only works for messages as map types.
|
||||||
|
// All other map types should be handled via Value.Equal.
|
||||||
|
func equalMessageMap(mx, my protoreflect.Map) bool {
|
||||||
|
if mx.Len() != my.Len() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
equal := true
|
||||||
|
mx.Range(func(k protoreflect.MapKey, vx protoreflect.Value) bool {
|
||||||
|
if !my.Has(k) {
|
||||||
|
equal = false
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
vy := my.Get(k)
|
||||||
|
equal = equalMessage(vx.Message(), vy.Message())
|
||||||
|
return equal
|
||||||
|
})
|
||||||
|
return equal
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mostly copied from protoreflect.equalList.
|
||||||
|
// The only change is the usage of equalImpl instead of protoreflect.equalValue.
|
||||||
|
func equalMessageList(lx, ly protoreflect.List) bool {
|
||||||
|
if lx.Len() != ly.Len() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for i := 0; i < lx.Len(); i++ {
|
||||||
|
// We only operate on messages here since equalImpl will not call us in any other case.
|
||||||
|
if !equalMessage(lx.Get(i).Message(), ly.Get(i).Message()) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// equalUnknown compares unknown fields by direct comparison on the raw bytes
|
||||||
|
// of each individual field number.
|
||||||
|
// Copied from protoreflect.equalUnknown.
|
||||||
|
func equalUnknown(x, y protoreflect.RawFields) bool {
|
||||||
|
if len(x) != len(y) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if bytes.Equal([]byte(x), []byte(y)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
mx := make(map[protoreflect.FieldNumber]protoreflect.RawFields)
|
||||||
|
my := make(map[protoreflect.FieldNumber]protoreflect.RawFields)
|
||||||
|
for len(x) > 0 {
|
||||||
|
fnum, _, n := protowire.ConsumeField(x)
|
||||||
|
mx[fnum] = append(mx[fnum], x[:n]...)
|
||||||
|
x = x[n:]
|
||||||
|
}
|
||||||
|
for len(y) > 0 {
|
||||||
|
fnum, _, n := protowire.ConsumeField(y)
|
||||||
|
my[fnum] = append(my[fnum], y[:n]...)
|
||||||
|
y = y[n:]
|
||||||
|
}
|
||||||
|
if len(mx) != len(my) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v1 := range mx {
|
||||||
|
if v2, ok := my[k]; !ok || !bytes.Equal([]byte(v1), []byte(v2)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
|
@ -53,7 +53,7 @@ type ExtensionInfo struct {
|
||||||
// type returned by InterfaceOf may not be identical.
|
// type returned by InterfaceOf may not be identical.
|
||||||
//
|
//
|
||||||
// Deprecated: Use InterfaceOf(xt.Zero()) instead.
|
// Deprecated: Use InterfaceOf(xt.Zero()) instead.
|
||||||
ExtensionType interface{}
|
ExtensionType any
|
||||||
|
|
||||||
// Field is the field number of the extension.
|
// Field is the field number of the extension.
|
||||||
//
|
//
|
||||||
|
@ -95,16 +95,16 @@ func (xi *ExtensionInfo) New() protoreflect.Value {
|
||||||
func (xi *ExtensionInfo) Zero() protoreflect.Value {
|
func (xi *ExtensionInfo) Zero() protoreflect.Value {
|
||||||
return xi.lazyInit().Zero()
|
return xi.lazyInit().Zero()
|
||||||
}
|
}
|
||||||
func (xi *ExtensionInfo) ValueOf(v interface{}) protoreflect.Value {
|
func (xi *ExtensionInfo) ValueOf(v any) protoreflect.Value {
|
||||||
return xi.lazyInit().PBValueOf(reflect.ValueOf(v))
|
return xi.lazyInit().PBValueOf(reflect.ValueOf(v))
|
||||||
}
|
}
|
||||||
func (xi *ExtensionInfo) InterfaceOf(v protoreflect.Value) interface{} {
|
func (xi *ExtensionInfo) InterfaceOf(v protoreflect.Value) any {
|
||||||
return xi.lazyInit().GoValueOf(v).Interface()
|
return xi.lazyInit().GoValueOf(v).Interface()
|
||||||
}
|
}
|
||||||
func (xi *ExtensionInfo) IsValidValue(v protoreflect.Value) bool {
|
func (xi *ExtensionInfo) IsValidValue(v protoreflect.Value) bool {
|
||||||
return xi.lazyInit().IsValidPB(v)
|
return xi.lazyInit().IsValidPB(v)
|
||||||
}
|
}
|
||||||
func (xi *ExtensionInfo) IsValidInterface(v interface{}) bool {
|
func (xi *ExtensionInfo) IsValidInterface(v any) bool {
|
||||||
return xi.lazyInit().IsValidGo(reflect.ValueOf(v))
|
return xi.lazyInit().IsValidGo(reflect.ValueOf(v))
|
||||||
}
|
}
|
||||||
func (xi *ExtensionInfo) TypeDescriptor() protoreflect.ExtensionTypeDescriptor {
|
func (xi *ExtensionInfo) TypeDescriptor() protoreflect.ExtensionTypeDescriptor {
|
||||||
|
|
|
@ -97,7 +97,7 @@ func (e *legacyEnumWrapper) Number() protoreflect.EnumNumber {
|
||||||
func (e *legacyEnumWrapper) ProtoReflect() protoreflect.Enum {
|
func (e *legacyEnumWrapper) ProtoReflect() protoreflect.Enum {
|
||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
func (e *legacyEnumWrapper) protoUnwrap() interface{} {
|
func (e *legacyEnumWrapper) protoUnwrap() any {
|
||||||
v := reflect.New(e.goTyp).Elem()
|
v := reflect.New(e.goTyp).Elem()
|
||||||
v.SetInt(int64(e.num))
|
v.SetInt(int64(e.num))
|
||||||
return v.Interface()
|
return v.Interface()
|
||||||
|
|
|
@ -160,6 +160,7 @@ func (x placeholderExtension) HasPresence() bool
|
||||||
func (x placeholderExtension) HasOptionalKeyword() bool { return false }
|
func (x placeholderExtension) HasOptionalKeyword() bool { return false }
|
||||||
func (x placeholderExtension) IsExtension() bool { return true }
|
func (x placeholderExtension) IsExtension() bool { return true }
|
||||||
func (x placeholderExtension) IsWeak() bool { return false }
|
func (x placeholderExtension) IsWeak() bool { return false }
|
||||||
|
func (x placeholderExtension) IsLazy() bool { return false }
|
||||||
func (x placeholderExtension) IsPacked() bool { return false }
|
func (x placeholderExtension) IsPacked() bool { return false }
|
||||||
func (x placeholderExtension) IsList() bool { return false }
|
func (x placeholderExtension) IsList() bool { return false }
|
||||||
func (x placeholderExtension) IsMap() bool { return false }
|
func (x placeholderExtension) IsMap() bool { return false }
|
||||||
|
|
|
@ -216,7 +216,7 @@ func aberrantLoadMessageDescReentrant(t reflect.Type, name protoreflect.FullName
|
||||||
}
|
}
|
||||||
for _, fn := range methods {
|
for _, fn := range methods {
|
||||||
for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) {
|
for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) {
|
||||||
if vs, ok := v.Interface().([]interface{}); ok {
|
if vs, ok := v.Interface().([]any); ok {
|
||||||
for _, v := range vs {
|
for _, v := range vs {
|
||||||
oneofWrappers = append(oneofWrappers, reflect.TypeOf(v))
|
oneofWrappers = append(oneofWrappers, reflect.TypeOf(v))
|
||||||
}
|
}
|
||||||
|
@ -567,6 +567,6 @@ func (m aberrantMessage) IsValid() bool {
|
||||||
func (m aberrantMessage) ProtoMethods() *protoiface.Methods {
|
func (m aberrantMessage) ProtoMethods() *protoiface.Methods {
|
||||||
return aberrantProtoMethods
|
return aberrantProtoMethods
|
||||||
}
|
}
|
||||||
func (m aberrantMessage) protoUnwrap() interface{} {
|
func (m aberrantMessage) protoUnwrap() any {
|
||||||
return m.v.Interface()
|
return m.v.Interface()
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,12 +30,12 @@ type MessageInfo struct {
|
||||||
// Desc is the underlying message descriptor type and must be populated.
|
// Desc is the underlying message descriptor type and must be populated.
|
||||||
Desc protoreflect.MessageDescriptor
|
Desc protoreflect.MessageDescriptor
|
||||||
|
|
||||||
// Exporter must be provided in a purego environment in order to provide
|
// Deprecated: Exporter will be removed the next time we bump
|
||||||
// access to unexported fields.
|
// protoimpl.GenVersion. See https://github.com/golang/protobuf/issues/1640
|
||||||
Exporter exporter
|
Exporter exporter
|
||||||
|
|
||||||
// OneofWrappers is list of pointers to oneof wrapper struct types.
|
// OneofWrappers is list of pointers to oneof wrapper struct types.
|
||||||
OneofWrappers []interface{}
|
OneofWrappers []any
|
||||||
|
|
||||||
initMu sync.Mutex // protects all unexported fields
|
initMu sync.Mutex // protects all unexported fields
|
||||||
initDone uint32
|
initDone uint32
|
||||||
|
@ -47,7 +47,7 @@ type MessageInfo struct {
|
||||||
// exporter is a function that returns a reference to the ith field of v,
|
// exporter is a function that returns a reference to the ith field of v,
|
||||||
// where v is a pointer to a struct. It returns nil if it does not support
|
// where v is a pointer to a struct. It returns nil if it does not support
|
||||||
// exporting the requested field (e.g., already exported).
|
// exporting the requested field (e.g., already exported).
|
||||||
type exporter func(v interface{}, i int) interface{}
|
type exporter func(v any, i int) any
|
||||||
|
|
||||||
// getMessageInfo returns the MessageInfo for any message type that
|
// getMessageInfo returns the MessageInfo for any message type that
|
||||||
// is generated by our implementation of protoc-gen-go (for v2 and on).
|
// is generated by our implementation of protoc-gen-go (for v2 and on).
|
||||||
|
@ -201,7 +201,7 @@ fieldLoop:
|
||||||
}
|
}
|
||||||
for _, fn := range methods {
|
for _, fn := range methods {
|
||||||
for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) {
|
for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) {
|
||||||
if vs, ok := v.Interface().([]interface{}); ok {
|
if vs, ok := v.Interface().([]any); ok {
|
||||||
oneofWrappers = vs
|
oneofWrappers = vs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -256,7 +256,7 @@ func (mi *MessageInfo) Message(i int) protoreflect.MessageType {
|
||||||
|
|
||||||
type mapEntryType struct {
|
type mapEntryType struct {
|
||||||
desc protoreflect.MessageDescriptor
|
desc protoreflect.MessageDescriptor
|
||||||
valType interface{} // zero value of enum or message type
|
valType any // zero value of enum or message type
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mt mapEntryType) New() protoreflect.Message {
|
func (mt mapEntryType) New() protoreflect.Message {
|
||||||
|
|
|
@ -20,7 +20,7 @@ type reflectMessageInfo struct {
|
||||||
// fieldTypes contains the zero value of an enum or message field.
|
// fieldTypes contains the zero value of an enum or message field.
|
||||||
// For lists, it contains the element type.
|
// For lists, it contains the element type.
|
||||||
// For maps, it contains the entry value type.
|
// For maps, it contains the entry value type.
|
||||||
fieldTypes map[protoreflect.FieldNumber]interface{}
|
fieldTypes map[protoreflect.FieldNumber]any
|
||||||
|
|
||||||
// denseFields is a subset of fields where:
|
// denseFields is a subset of fields where:
|
||||||
// 0 < fieldDesc.Number() < len(denseFields)
|
// 0 < fieldDesc.Number() < len(denseFields)
|
||||||
|
@ -28,7 +28,7 @@ type reflectMessageInfo struct {
|
||||||
denseFields []*fieldInfo
|
denseFields []*fieldInfo
|
||||||
|
|
||||||
// rangeInfos is a list of all fields (not belonging to a oneof) and oneofs.
|
// rangeInfos is a list of all fields (not belonging to a oneof) and oneofs.
|
||||||
rangeInfos []interface{} // either *fieldInfo or *oneofInfo
|
rangeInfos []any // either *fieldInfo or *oneofInfo
|
||||||
|
|
||||||
getUnknown func(pointer) protoreflect.RawFields
|
getUnknown func(pointer) protoreflect.RawFields
|
||||||
setUnknown func(pointer, protoreflect.RawFields)
|
setUnknown func(pointer, protoreflect.RawFields)
|
||||||
|
@ -224,7 +224,7 @@ func (mi *MessageInfo) makeFieldTypes(si structInfo) {
|
||||||
}
|
}
|
||||||
if ft != nil {
|
if ft != nil {
|
||||||
if mi.fieldTypes == nil {
|
if mi.fieldTypes == nil {
|
||||||
mi.fieldTypes = make(map[protoreflect.FieldNumber]interface{})
|
mi.fieldTypes = make(map[protoreflect.FieldNumber]any)
|
||||||
}
|
}
|
||||||
mi.fieldTypes[fd.Number()] = reflect.Zero(ft).Interface()
|
mi.fieldTypes[fd.Number()] = reflect.Zero(ft).Interface()
|
||||||
}
|
}
|
||||||
|
@ -255,6 +255,10 @@ func (m *extensionMap) Has(xd protoreflect.ExtensionTypeDescriptor) (ok bool) {
|
||||||
if !ok {
|
if !ok {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
if x.isUnexpandedLazy() {
|
||||||
|
// Avoid calling x.Value(), which triggers a lazy unmarshal.
|
||||||
|
return true
|
||||||
|
}
|
||||||
switch {
|
switch {
|
||||||
case xd.IsList():
|
case xd.IsList():
|
||||||
return x.Value().List().Len() > 0
|
return x.Value().List().Len() > 0
|
||||||
|
@ -389,7 +393,7 @@ var (
|
||||||
// MessageOf returns a reflective view over a message. The input must be a
|
// 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,
|
// pointer to a named Go struct. If the provided type has a ProtoReflect method,
|
||||||
// it must be implemented by calling this method.
|
// it must be implemented by calling this method.
|
||||||
func (mi *MessageInfo) MessageOf(m interface{}) protoreflect.Message {
|
func (mi *MessageInfo) MessageOf(m any) protoreflect.Message {
|
||||||
if reflect.TypeOf(m) != mi.GoReflectType {
|
if reflect.TypeOf(m) != mi.GoReflectType {
|
||||||
panic(fmt.Sprintf("type mismatch: got %T, want %v", m, mi.GoReflectType))
|
panic(fmt.Sprintf("type mismatch: got %T, want %v", m, mi.GoReflectType))
|
||||||
}
|
}
|
||||||
|
@ -417,7 +421,7 @@ func (m *messageIfaceWrapper) Reset() {
|
||||||
func (m *messageIfaceWrapper) ProtoReflect() protoreflect.Message {
|
func (m *messageIfaceWrapper) ProtoReflect() protoreflect.Message {
|
||||||
return (*messageReflectWrapper)(m)
|
return (*messageReflectWrapper)(m)
|
||||||
}
|
}
|
||||||
func (m *messageIfaceWrapper) protoUnwrap() interface{} {
|
func (m *messageIfaceWrapper) protoUnwrap() any {
|
||||||
return m.p.AsIfaceOf(m.mi.GoReflectType.Elem())
|
return m.p.AsIfaceOf(m.mi.GoReflectType.Elem())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ func (m *messageState) New() protoreflect.Message {
|
||||||
func (m *messageState) Interface() protoreflect.ProtoMessage {
|
func (m *messageState) Interface() protoreflect.ProtoMessage {
|
||||||
return m.protoUnwrap().(protoreflect.ProtoMessage)
|
return m.protoUnwrap().(protoreflect.ProtoMessage)
|
||||||
}
|
}
|
||||||
func (m *messageState) protoUnwrap() interface{} {
|
func (m *messageState) protoUnwrap() any {
|
||||||
return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem())
|
return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem())
|
||||||
}
|
}
|
||||||
func (m *messageState) ProtoMethods() *protoiface.Methods {
|
func (m *messageState) ProtoMethods() *protoiface.Methods {
|
||||||
|
@ -154,7 +154,7 @@ func (m *messageReflectWrapper) Interface() protoreflect.ProtoMessage {
|
||||||
}
|
}
|
||||||
return (*messageIfaceWrapper)(m)
|
return (*messageIfaceWrapper)(m)
|
||||||
}
|
}
|
||||||
func (m *messageReflectWrapper) protoUnwrap() interface{} {
|
func (m *messageReflectWrapper) protoUnwrap() any {
|
||||||
return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem())
|
return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem())
|
||||||
}
|
}
|
||||||
func (m *messageReflectWrapper) ProtoMethods() *protoiface.Methods {
|
func (m *messageReflectWrapper) ProtoMethods() *protoiface.Methods {
|
||||||
|
|
|
@ -1,215 +0,0 @@
|
||||||
// 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.
|
|
||||||
|
|
||||||
//go:build purego || appengine
|
|
||||||
// +build purego appengine
|
|
||||||
|
|
||||||
package impl
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"reflect"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
const UnsafeEnabled = false
|
|
||||||
|
|
||||||
// Pointer is an opaque pointer type.
|
|
||||||
type Pointer interface{}
|
|
||||||
|
|
||||||
// offset represents the offset to a struct field, accessible from a pointer.
|
|
||||||
// The offset is the field index into a struct.
|
|
||||||
type offset struct {
|
|
||||||
index int
|
|
||||||
export exporter
|
|
||||||
}
|
|
||||||
|
|
||||||
// offsetOf returns a field offset for the struct field.
|
|
||||||
func offsetOf(f reflect.StructField, x exporter) offset {
|
|
||||||
if len(f.Index) != 1 {
|
|
||||||
panic("embedded structs are not supported")
|
|
||||||
}
|
|
||||||
if f.PkgPath == "" {
|
|
||||||
return offset{index: f.Index[0]} // field is already exported
|
|
||||||
}
|
|
||||||
if x == nil {
|
|
||||||
panic("exporter must be provided for unexported field")
|
|
||||||
}
|
|
||||||
return offset{index: f.Index[0], export: x}
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsValid reports whether the offset is valid.
|
|
||||||
func (f offset) IsValid() bool { return f.index >= 0 }
|
|
||||||
|
|
||||||
// invalidOffset is an invalid field offset.
|
|
||||||
var invalidOffset = offset{index: -1}
|
|
||||||
|
|
||||||
// zeroOffset is a noop when calling pointer.Apply.
|
|
||||||
var zeroOffset = offset{index: 0}
|
|
||||||
|
|
||||||
// pointer is an abstract representation of a pointer to a struct or field.
|
|
||||||
type pointer struct{ v reflect.Value }
|
|
||||||
|
|
||||||
// pointerOf returns p as a pointer.
|
|
||||||
func pointerOf(p Pointer) pointer {
|
|
||||||
return pointerOfIface(p)
|
|
||||||
}
|
|
||||||
|
|
||||||
// pointerOfValue returns v as a pointer.
|
|
||||||
func pointerOfValue(v reflect.Value) pointer {
|
|
||||||
return pointer{v: v}
|
|
||||||
}
|
|
||||||
|
|
||||||
// pointerOfIface returns the pointer portion of an interface.
|
|
||||||
func pointerOfIface(v interface{}) pointer {
|
|
||||||
return pointer{v: reflect.ValueOf(v)}
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsNil reports whether the pointer is nil.
|
|
||||||
func (p pointer) IsNil() bool {
|
|
||||||
return p.v.IsNil()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Apply adds an offset to the pointer to derive a new pointer
|
|
||||||
// to a specified field. The current pointer must be pointing at a struct.
|
|
||||||
func (p pointer) Apply(f offset) pointer {
|
|
||||||
if f.export != nil {
|
|
||||||
if v := reflect.ValueOf(f.export(p.v.Interface(), f.index)); v.IsValid() {
|
|
||||||
return pointer{v: v}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return pointer{v: p.v.Elem().Field(f.index).Addr()}
|
|
||||||
}
|
|
||||||
|
|
||||||
// AsValueOf treats p as a pointer to an object of type t and returns the value.
|
|
||||||
// It is equivalent to reflect.ValueOf(p.AsIfaceOf(t))
|
|
||||||
func (p pointer) AsValueOf(t reflect.Type) reflect.Value {
|
|
||||||
if got := p.v.Type().Elem(); got != t {
|
|
||||||
panic(fmt.Sprintf("invalid type: got %v, want %v", got, t))
|
|
||||||
}
|
|
||||||
return p.v
|
|
||||||
}
|
|
||||||
|
|
||||||
// AsIfaceOf treats p as a pointer to an object of type t and returns the value.
|
|
||||||
// It is equivalent to p.AsValueOf(t).Interface()
|
|
||||||
func (p pointer) AsIfaceOf(t reflect.Type) interface{} {
|
|
||||||
return p.AsValueOf(t).Interface()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) Bool() *bool { return p.v.Interface().(*bool) }
|
|
||||||
func (p pointer) BoolPtr() **bool { return p.v.Interface().(**bool) }
|
|
||||||
func (p pointer) BoolSlice() *[]bool { return p.v.Interface().(*[]bool) }
|
|
||||||
func (p pointer) Int32() *int32 { return p.v.Interface().(*int32) }
|
|
||||||
func (p pointer) Int32Ptr() **int32 { return p.v.Interface().(**int32) }
|
|
||||||
func (p pointer) Int32Slice() *[]int32 { return p.v.Interface().(*[]int32) }
|
|
||||||
func (p pointer) Int64() *int64 { return p.v.Interface().(*int64) }
|
|
||||||
func (p pointer) Int64Ptr() **int64 { return p.v.Interface().(**int64) }
|
|
||||||
func (p pointer) Int64Slice() *[]int64 { return p.v.Interface().(*[]int64) }
|
|
||||||
func (p pointer) Uint32() *uint32 { return p.v.Interface().(*uint32) }
|
|
||||||
func (p pointer) Uint32Ptr() **uint32 { return p.v.Interface().(**uint32) }
|
|
||||||
func (p pointer) Uint32Slice() *[]uint32 { return p.v.Interface().(*[]uint32) }
|
|
||||||
func (p pointer) Uint64() *uint64 { return p.v.Interface().(*uint64) }
|
|
||||||
func (p pointer) Uint64Ptr() **uint64 { return p.v.Interface().(**uint64) }
|
|
||||||
func (p pointer) Uint64Slice() *[]uint64 { return p.v.Interface().(*[]uint64) }
|
|
||||||
func (p pointer) Float32() *float32 { return p.v.Interface().(*float32) }
|
|
||||||
func (p pointer) Float32Ptr() **float32 { return p.v.Interface().(**float32) }
|
|
||||||
func (p pointer) Float32Slice() *[]float32 { return p.v.Interface().(*[]float32) }
|
|
||||||
func (p pointer) Float64() *float64 { return p.v.Interface().(*float64) }
|
|
||||||
func (p pointer) Float64Ptr() **float64 { return p.v.Interface().(**float64) }
|
|
||||||
func (p pointer) Float64Slice() *[]float64 { return p.v.Interface().(*[]float64) }
|
|
||||||
func (p pointer) String() *string { return p.v.Interface().(*string) }
|
|
||||||
func (p pointer) StringPtr() **string { return p.v.Interface().(**string) }
|
|
||||||
func (p pointer) StringSlice() *[]string { return p.v.Interface().(*[]string) }
|
|
||||||
func (p pointer) Bytes() *[]byte { return p.v.Interface().(*[]byte) }
|
|
||||||
func (p pointer) BytesPtr() **[]byte { return p.v.Interface().(**[]byte) }
|
|
||||||
func (p pointer) BytesSlice() *[][]byte { return p.v.Interface().(*[][]byte) }
|
|
||||||
func (p pointer) WeakFields() *weakFields { return (*weakFields)(p.v.Interface().(*WeakFields)) }
|
|
||||||
func (p pointer) Extensions() *map[int32]ExtensionField {
|
|
||||||
return p.v.Interface().(*map[int32]ExtensionField)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) Elem() pointer {
|
|
||||||
return pointer{v: p.v.Elem()}
|
|
||||||
}
|
|
||||||
|
|
||||||
// PointerSlice copies []*T from p as a new []pointer.
|
|
||||||
// This behavior differs from the implementation in pointer_unsafe.go.
|
|
||||||
func (p pointer) PointerSlice() []pointer {
|
|
||||||
// TODO: reconsider this
|
|
||||||
if p.v.IsNil() {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
n := p.v.Elem().Len()
|
|
||||||
s := make([]pointer, n)
|
|
||||||
for i := 0; i < n; i++ {
|
|
||||||
s[i] = pointer{v: p.v.Elem().Index(i)}
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
// AppendPointerSlice appends v to p, which must be a []*T.
|
|
||||||
func (p pointer) AppendPointerSlice(v pointer) {
|
|
||||||
sp := p.v.Elem()
|
|
||||||
sp.Set(reflect.Append(sp, v.v))
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetPointer sets *p to v.
|
|
||||||
func (p pointer) SetPointer(v pointer) {
|
|
||||||
p.v.Elem().Set(v.v)
|
|
||||||
}
|
|
||||||
|
|
||||||
func growSlice(p pointer, addCap int) {
|
|
||||||
// TODO: Once we only support Go 1.20 and newer, use reflect.Grow.
|
|
||||||
in := p.v.Elem()
|
|
||||||
out := reflect.MakeSlice(in.Type(), in.Len(), in.Len()+addCap)
|
|
||||||
reflect.Copy(out, in)
|
|
||||||
p.v.Elem().Set(out)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growBoolSlice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growInt32Slice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growUint32Slice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growInt64Slice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growUint64Slice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growFloat64Slice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p pointer) growFloat32Slice(addCap int) {
|
|
||||||
growSlice(p, addCap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (Export) MessageStateOf(p Pointer) *messageState { panic("not supported") }
|
|
||||||
func (ms *messageState) pointer() pointer { panic("not supported") }
|
|
||||||
func (ms *messageState) messageInfo() *MessageInfo { panic("not supported") }
|
|
||||||
func (ms *messageState) LoadMessageInfo() *MessageInfo { panic("not supported") }
|
|
||||||
func (ms *messageState) StoreMessageInfo(mi *MessageInfo) { panic("not supported") }
|
|
||||||
|
|
||||||
type atomicNilMessage struct {
|
|
||||||
once sync.Once
|
|
||||||
m messageReflectWrapper
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *atomicNilMessage) Init(mi *MessageInfo) *messageReflectWrapper {
|
|
||||||
m.once.Do(func() {
|
|
||||||
m.m.p = pointerOfIface(reflect.Zero(mi.GoReflectType).Interface())
|
|
||||||
m.m.mi = mi
|
|
||||||
})
|
|
||||||
return &m.m
|
|
||||||
}
|
|
|
@ -2,9 +2,6 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine
|
|
||||||
// +build !purego,!appengine
|
|
||||||
|
|
||||||
package impl
|
package impl
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
@ -50,7 +47,7 @@ func pointerOfValue(v reflect.Value) pointer {
|
||||||
}
|
}
|
||||||
|
|
||||||
// pointerOfIface returns the pointer portion of an interface.
|
// pointerOfIface returns the pointer portion of an interface.
|
||||||
func pointerOfIface(v interface{}) pointer {
|
func pointerOfIface(v any) pointer {
|
||||||
type ifaceHeader struct {
|
type ifaceHeader struct {
|
||||||
Type unsafe.Pointer
|
Type unsafe.Pointer
|
||||||
Data unsafe.Pointer
|
Data unsafe.Pointer
|
||||||
|
@ -80,7 +77,7 @@ func (p pointer) AsValueOf(t reflect.Type) reflect.Value {
|
||||||
|
|
||||||
// AsIfaceOf treats p as a pointer to an object of type t and returns the value.
|
// AsIfaceOf treats p as a pointer to an object of type t and returns the value.
|
||||||
// It is equivalent to p.AsValueOf(t).Interface()
|
// It is equivalent to p.AsValueOf(t).Interface()
|
||||||
func (p pointer) AsIfaceOf(t reflect.Type) interface{} {
|
func (p pointer) AsIfaceOf(t reflect.Type) any {
|
||||||
// TODO: Use tricky unsafe magic to directly create ifaceHeader.
|
// TODO: Use tricky unsafe magic to directly create ifaceHeader.
|
||||||
return p.AsValueOf(t).Interface()
|
return p.AsValueOf(t).Interface()
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ type messageField struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
var messageFieldPool = sync.Pool{
|
var messageFieldPool = sync.Pool{
|
||||||
New: func() interface{} { return new([]messageField) },
|
New: func() any { return new([]messageField) },
|
||||||
}
|
}
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
@ -69,7 +69,7 @@ type mapEntry struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
var mapEntryPool = sync.Pool{
|
var mapEntryPool = sync.Pool{
|
||||||
New: func() interface{} { return new([]mapEntry) },
|
New: func() any { return new([]mapEntry) },
|
||||||
}
|
}
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
// 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.
|
|
||||||
|
|
||||||
//go:build purego || appengine
|
|
||||||
// +build purego appengine
|
|
||||||
|
|
||||||
package strs
|
|
||||||
|
|
||||||
import pref "google.golang.org/protobuf/reflect/protoreflect"
|
|
||||||
|
|
||||||
func UnsafeString(b []byte) string {
|
|
||||||
return string(b)
|
|
||||||
}
|
|
||||||
|
|
||||||
func UnsafeBytes(s string) []byte {
|
|
||||||
return []byte(s)
|
|
||||||
}
|
|
||||||
|
|
||||||
type Builder struct{}
|
|
||||||
|
|
||||||
func (*Builder) AppendFullName(prefix pref.FullName, name pref.Name) pref.FullName {
|
|
||||||
return prefix.Append(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*Builder) MakeString(b []byte) string {
|
|
||||||
return string(b)
|
|
||||||
}
|
|
|
@ -2,8 +2,7 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine && !go1.21
|
//go:build !go1.21
|
||||||
// +build !purego,!appengine,!go1.21
|
|
||||||
|
|
||||||
package strs
|
package strs
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine && go1.21
|
//go:build go1.21
|
||||||
// +build !purego,!appengine,go1.21
|
|
||||||
|
|
||||||
package strs
|
package strs
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ import (
|
||||||
// 10. Send out the CL for review and submit it.
|
// 10. Send out the CL for review and submit it.
|
||||||
const (
|
const (
|
||||||
Major = 1
|
Major = 1
|
||||||
Minor = 34
|
Minor = 35
|
||||||
Patch = 1
|
Patch = 1
|
||||||
PreRelease = ""
|
PreRelease = ""
|
||||||
)
|
)
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
"google.golang.org/protobuf/runtime/protoiface"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Equal reports whether two messages are equal,
|
// Equal reports whether two messages are equal,
|
||||||
|
@ -51,6 +52,14 @@ func Equal(x, y Message) bool {
|
||||||
if mx.IsValid() != my.IsValid() {
|
if mx.IsValid() != my.IsValid() {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only one of the messages needs to implement the fast-path for it to work.
|
||||||
|
pmx := protoMethods(mx)
|
||||||
|
pmy := protoMethods(my)
|
||||||
|
if pmx != nil && pmy != nil && pmx.Equal != nil && pmy.Equal != nil {
|
||||||
|
return pmx.Equal(protoiface.EqualInput{MessageA: mx, MessageB: my}).Equal
|
||||||
|
}
|
||||||
|
|
||||||
vx := protoreflect.ValueOfMessage(mx)
|
vx := protoreflect.ValueOfMessage(mx)
|
||||||
vy := protoreflect.ValueOfMessage(my)
|
vy := protoreflect.ValueOfMessage(my)
|
||||||
return vx.Equal(vy)
|
return vx.Equal(vy)
|
||||||
|
|
|
@ -39,7 +39,49 @@ func ClearExtension(m Message, xt protoreflect.ExtensionType) {
|
||||||
// If the field is unpopulated, it returns the default value for
|
// If the field is unpopulated, it returns the default value for
|
||||||
// scalars and an immutable, empty value for lists or messages.
|
// scalars and an immutable, empty value for lists or messages.
|
||||||
// It panics if xt does not extend m.
|
// It panics if xt does not extend m.
|
||||||
func GetExtension(m Message, xt protoreflect.ExtensionType) interface{} {
|
//
|
||||||
|
// The type of the value is dependent on the field type of the extension.
|
||||||
|
// For extensions generated by protoc-gen-go, the Go type is as follows:
|
||||||
|
//
|
||||||
|
// ╔═══════════════════╤═════════════════════════╗
|
||||||
|
// ║ Go type │ Protobuf kind ║
|
||||||
|
// ╠═══════════════════╪═════════════════════════╣
|
||||||
|
// ║ bool │ bool ║
|
||||||
|
// ║ int32 │ int32, sint32, sfixed32 ║
|
||||||
|
// ║ int64 │ int64, sint64, sfixed64 ║
|
||||||
|
// ║ uint32 │ uint32, fixed32 ║
|
||||||
|
// ║ uint64 │ uint64, fixed64 ║
|
||||||
|
// ║ float32 │ float ║
|
||||||
|
// ║ float64 │ double ║
|
||||||
|
// ║ string │ string ║
|
||||||
|
// ║ []byte │ bytes ║
|
||||||
|
// ║ protoreflect.Enum │ enum ║
|
||||||
|
// ║ proto.Message │ message, group ║
|
||||||
|
// ╚═══════════════════╧═════════════════════════╝
|
||||||
|
//
|
||||||
|
// The protoreflect.Enum and proto.Message types are the concrete Go type
|
||||||
|
// associated with the named enum or message. Repeated fields are represented
|
||||||
|
// using a Go slice of the base element type.
|
||||||
|
//
|
||||||
|
// If a generated extension descriptor variable is directly passed to
|
||||||
|
// GetExtension, then the call should be followed immediately by a
|
||||||
|
// type assertion to the expected output value. For example:
|
||||||
|
//
|
||||||
|
// mm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage)
|
||||||
|
//
|
||||||
|
// This pattern enables static analysis tools to verify that the asserted type
|
||||||
|
// matches the Go type associated with the extension field and
|
||||||
|
// also enables a possible future migration to a type-safe extension API.
|
||||||
|
//
|
||||||
|
// Since singular messages are the most common extension type, the pattern of
|
||||||
|
// calling HasExtension followed by GetExtension may be simplified to:
|
||||||
|
//
|
||||||
|
// if mm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage); mm != nil {
|
||||||
|
// ... // make use of mm
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// The mm variable is non-nil if and only if HasExtension reports true.
|
||||||
|
func GetExtension(m Message, xt protoreflect.ExtensionType) any {
|
||||||
// Treat nil message interface as an empty message; return the default.
|
// Treat nil message interface as an empty message; return the default.
|
||||||
if m == nil {
|
if m == nil {
|
||||||
return xt.InterfaceOf(xt.Zero())
|
return xt.InterfaceOf(xt.Zero())
|
||||||
|
@ -51,7 +93,36 @@ func GetExtension(m Message, xt protoreflect.ExtensionType) interface{} {
|
||||||
// SetExtension stores the value of an extension field.
|
// SetExtension stores the value of an extension field.
|
||||||
// It panics if m is invalid, xt does not extend m, or if type of v
|
// It panics if m is invalid, xt does not extend m, or if type of v
|
||||||
// is invalid for the specified extension field.
|
// is invalid for the specified extension field.
|
||||||
func SetExtension(m Message, xt protoreflect.ExtensionType, v interface{}) {
|
//
|
||||||
|
// The type of the value is dependent on the field type of the extension.
|
||||||
|
// For extensions generated by protoc-gen-go, the Go type is as follows:
|
||||||
|
//
|
||||||
|
// ╔═══════════════════╤═════════════════════════╗
|
||||||
|
// ║ Go type │ Protobuf kind ║
|
||||||
|
// ╠═══════════════════╪═════════════════════════╣
|
||||||
|
// ║ bool │ bool ║
|
||||||
|
// ║ int32 │ int32, sint32, sfixed32 ║
|
||||||
|
// ║ int64 │ int64, sint64, sfixed64 ║
|
||||||
|
// ║ uint32 │ uint32, fixed32 ║
|
||||||
|
// ║ uint64 │ uint64, fixed64 ║
|
||||||
|
// ║ float32 │ float ║
|
||||||
|
// ║ float64 │ double ║
|
||||||
|
// ║ string │ string ║
|
||||||
|
// ║ []byte │ bytes ║
|
||||||
|
// ║ protoreflect.Enum │ enum ║
|
||||||
|
// ║ proto.Message │ message, group ║
|
||||||
|
// ╚═══════════════════╧═════════════════════════╝
|
||||||
|
//
|
||||||
|
// The protoreflect.Enum and proto.Message types are the concrete Go type
|
||||||
|
// associated with the named enum or message. Repeated fields are represented
|
||||||
|
// using a Go slice of the base element type.
|
||||||
|
//
|
||||||
|
// If a generated extension descriptor variable is directly passed to
|
||||||
|
// SetExtension (e.g., foopb.E_MyExtension), then the value should be a
|
||||||
|
// concrete type that matches the expected Go type for the extension descriptor
|
||||||
|
// so that static analysis tools can verify type correctness.
|
||||||
|
// This also enables a possible future migration to a type-safe extension API.
|
||||||
|
func SetExtension(m Message, xt protoreflect.ExtensionType, v any) {
|
||||||
xd := xt.TypeDescriptor()
|
xd := xt.TypeDescriptor()
|
||||||
pv := xt.ValueOf(v)
|
pv := xt.ValueOf(v)
|
||||||
|
|
||||||
|
@ -78,7 +149,7 @@ func SetExtension(m Message, xt protoreflect.ExtensionType, v interface{}) {
|
||||||
// It returns immediately if f returns false.
|
// It returns immediately if f returns false.
|
||||||
// While iterating, mutating operations may only be performed
|
// While iterating, mutating operations may only be performed
|
||||||
// on the current extension field.
|
// on the current extension field.
|
||||||
func RangeExtensions(m Message, f func(protoreflect.ExtensionType, interface{}) bool) {
|
func RangeExtensions(m Message, f func(protoreflect.ExtensionType, any) bool) {
|
||||||
// Treat nil message interface as an empty message; nothing to range over.
|
// Treat nil message interface as an empty message; nothing to range over.
|
||||||
if m == nil {
|
if m == nil {
|
||||||
return
|
return
|
||||||
|
|
|
@ -150,6 +150,7 @@ func (r descsByName) initFieldsFromDescriptorProto(fds []*descriptorpb.FieldDesc
|
||||||
opts = proto.Clone(opts).(*descriptorpb.FieldOptions)
|
opts = proto.Clone(opts).(*descriptorpb.FieldOptions)
|
||||||
f.L1.Options = func() protoreflect.ProtoMessage { return opts }
|
f.L1.Options = func() protoreflect.ProtoMessage { return opts }
|
||||||
f.L1.IsWeak = opts.GetWeak()
|
f.L1.IsWeak = opts.GetWeak()
|
||||||
|
f.L1.IsLazy = opts.GetLazy()
|
||||||
if opts.Packed != nil {
|
if opts.Packed != nil {
|
||||||
f.L1.EditionFeatures.IsPacked = opts.GetPacked()
|
f.L1.EditionFeatures.IsPacked = opts.GetPacked()
|
||||||
}
|
}
|
||||||
|
@ -214,6 +215,9 @@ func (r descsByName) initExtensionDeclarations(xds []*descriptorpb.FieldDescript
|
||||||
if xd.JsonName != nil {
|
if xd.JsonName != nil {
|
||||||
x.L2.StringName.InitJSON(xd.GetJsonName())
|
x.L2.StringName.InitJSON(xd.GetJsonName())
|
||||||
}
|
}
|
||||||
|
if x.L1.Kind == protoreflect.MessageKind && x.L1.EditionFeatures.IsDelimitedEncoded {
|
||||||
|
x.L1.Kind = protoreflect.GroupKind
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return xs, nil
|
return xs, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,11 @@ func (r *resolver) resolveMessageDependencies(ms []filedesc.Message, mds []*desc
|
||||||
if f.L1.Kind, f.L1.Enum, f.L1.Message, err = r.findTarget(f.Kind(), f.Parent().FullName(), partialName(fd.GetTypeName()), f.IsWeak()); err != nil {
|
if f.L1.Kind, f.L1.Enum, f.L1.Message, err = r.findTarget(f.Kind(), f.Parent().FullName(), partialName(fd.GetTypeName()), f.IsWeak()); err != nil {
|
||||||
return errors.New("message field %q cannot resolve type: %v", f.FullName(), err)
|
return errors.New("message field %q cannot resolve type: %v", f.FullName(), err)
|
||||||
}
|
}
|
||||||
|
if f.L1.Kind == protoreflect.GroupKind && (f.IsMap() || f.IsMapEntry()) {
|
||||||
|
// A map field might inherit delimited encoding from a file-wide default feature.
|
||||||
|
// But maps never actually use delimited encoding. (At least for now...)
|
||||||
|
f.L1.Kind = protoreflect.MessageKind
|
||||||
|
}
|
||||||
if fd.DefaultValue != nil {
|
if fd.DefaultValue != nil {
|
||||||
v, ev, err := unmarshalDefault(fd.GetDefaultValue(), f, r.allowUnresolvable)
|
v, ev, err := unmarshalDefault(fd.GetDefaultValue(), f, r.allowUnresolvable)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -116,18 +116,6 @@ func validateMessageDeclarations(file *filedesc.File, ms []filedesc.Message, mds
|
||||||
if m.ExtensionRanges().Len() > 0 {
|
if m.ExtensionRanges().Len() > 0 {
|
||||||
return errors.New("message %q using proto3 semantics cannot have extension ranges", m.FullName())
|
return errors.New("message %q using proto3 semantics cannot have extension ranges", m.FullName())
|
||||||
}
|
}
|
||||||
// Verify that field names in proto3 do not conflict if lowercased
|
|
||||||
// with all underscores removed.
|
|
||||||
// See protoc v3.8.0: src/google/protobuf/descriptor.cc:5830-5847
|
|
||||||
names := map[string]protoreflect.FieldDescriptor{}
|
|
||||||
for i := 0; i < m.Fields().Len(); i++ {
|
|
||||||
f1 := m.Fields().Get(i)
|
|
||||||
s := strings.Replace(strings.ToLower(string(f1.Name())), "_", "", -1)
|
|
||||||
if f2, ok := names[s]; ok {
|
|
||||||
return errors.New("message %q using proto3 semantics has conflict: %q with %q", m.FullName(), f1.Name(), f2.Name())
|
|
||||||
}
|
|
||||||
names[s] = f1
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for j, fd := range md.GetField() {
|
for j, fd := range md.GetField() {
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
"google.golang.org/protobuf/types/descriptorpb"
|
"google.golang.org/protobuf/types/descriptorpb"
|
||||||
gofeaturespb "google.golang.org/protobuf/types/gofeaturespb"
|
"google.golang.org/protobuf/types/gofeaturespb"
|
||||||
)
|
)
|
||||||
|
|
||||||
var defaults = &descriptorpb.FeatureSetDefaults{}
|
var defaults = &descriptorpb.FeatureSetDefaults{}
|
||||||
|
|
|
@ -23,6 +23,7 @@ type (
|
||||||
Unmarshal func(unmarshalInput) (unmarshalOutput, error)
|
Unmarshal func(unmarshalInput) (unmarshalOutput, error)
|
||||||
Merge func(mergeInput) mergeOutput
|
Merge func(mergeInput) mergeOutput
|
||||||
CheckInitialized func(checkInitializedInput) (checkInitializedOutput, error)
|
CheckInitialized func(checkInitializedInput) (checkInitializedOutput, error)
|
||||||
|
Equal func(equalInput) equalOutput
|
||||||
}
|
}
|
||||||
supportFlags = uint64
|
supportFlags = uint64
|
||||||
sizeInput = struct {
|
sizeInput = struct {
|
||||||
|
@ -75,4 +76,13 @@ type (
|
||||||
checkInitializedOutput = struct {
|
checkInitializedOutput = struct {
|
||||||
pragma.NoUnkeyedLiterals
|
pragma.NoUnkeyedLiterals
|
||||||
}
|
}
|
||||||
|
equalInput = struct {
|
||||||
|
pragma.NoUnkeyedLiterals
|
||||||
|
MessageA Message
|
||||||
|
MessageB Message
|
||||||
|
}
|
||||||
|
equalOutput = struct {
|
||||||
|
pragma.NoUnkeyedLiterals
|
||||||
|
Equal bool
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -485,6 +485,8 @@ func (p *SourcePath) appendEnumValueOptions(b []byte) []byte {
|
||||||
b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
|
b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
|
||||||
case 3:
|
case 3:
|
||||||
b = p.appendSingularField(b, "debug_redact", nil)
|
b = p.appendSingularField(b, "debug_redact", nil)
|
||||||
|
case 4:
|
||||||
|
b = p.appendSingularField(b, "feature_support", (*SourcePath).appendFieldOptions_FeatureSupport)
|
||||||
case 999:
|
case 999:
|
||||||
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
|
||||||
}
|
}
|
||||||
|
|
|
@ -510,7 +510,7 @@ type ExtensionType interface {
|
||||||
//
|
//
|
||||||
// ValueOf is more extensive than protoreflect.ValueOf for a given field's
|
// ValueOf is more extensive than protoreflect.ValueOf for a given field's
|
||||||
// value as it has more type information available.
|
// value as it has more type information available.
|
||||||
ValueOf(interface{}) Value
|
ValueOf(any) Value
|
||||||
|
|
||||||
// InterfaceOf completely unwraps the Value to the underlying Go type.
|
// InterfaceOf completely unwraps the Value to the underlying Go type.
|
||||||
// InterfaceOf panics if the input is nil or does not represent the
|
// InterfaceOf panics if the input is nil or does not represent the
|
||||||
|
@ -519,13 +519,13 @@ type ExtensionType interface {
|
||||||
//
|
//
|
||||||
// InterfaceOf is able to unwrap the Value further than Value.Interface
|
// InterfaceOf is able to unwrap the Value further than Value.Interface
|
||||||
// as it has more type information available.
|
// as it has more type information available.
|
||||||
InterfaceOf(Value) interface{}
|
InterfaceOf(Value) any
|
||||||
|
|
||||||
// IsValidValue reports whether the Value is valid to assign to the field.
|
// IsValidValue reports whether the Value is valid to assign to the field.
|
||||||
IsValidValue(Value) bool
|
IsValidValue(Value) bool
|
||||||
|
|
||||||
// IsValidInterface reports whether the input is valid to assign to the field.
|
// IsValidInterface reports whether the input is valid to assign to the field.
|
||||||
IsValidInterface(interface{}) bool
|
IsValidInterface(any) bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// EnumDescriptor describes an enum and
|
// EnumDescriptor describes an enum and
|
||||||
|
|
|
@ -1,60 +0,0 @@
|
||||||
// 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.
|
|
||||||
|
|
||||||
//go:build purego || appengine
|
|
||||||
// +build purego appengine
|
|
||||||
|
|
||||||
package protoreflect
|
|
||||||
|
|
||||||
import "google.golang.org/protobuf/internal/pragma"
|
|
||||||
|
|
||||||
type valueType int
|
|
||||||
|
|
||||||
const (
|
|
||||||
nilType valueType = iota
|
|
||||||
boolType
|
|
||||||
int32Type
|
|
||||||
int64Type
|
|
||||||
uint32Type
|
|
||||||
uint64Type
|
|
||||||
float32Type
|
|
||||||
float64Type
|
|
||||||
stringType
|
|
||||||
bytesType
|
|
||||||
enumType
|
|
||||||
ifaceType
|
|
||||||
)
|
|
||||||
|
|
||||||
// value is a union where only one type can be represented at a time.
|
|
||||||
// This uses a distinct field for each type. This is type safe in Go, but
|
|
||||||
// occupies more memory than necessary (72B).
|
|
||||||
type value struct {
|
|
||||||
pragma.DoNotCompare // 0B
|
|
||||||
|
|
||||||
typ valueType // 8B
|
|
||||||
num uint64 // 8B
|
|
||||||
str string // 16B
|
|
||||||
bin []byte // 24B
|
|
||||||
iface interface{} // 16B
|
|
||||||
}
|
|
||||||
|
|
||||||
func valueOfString(v string) Value {
|
|
||||||
return Value{typ: stringType, str: v}
|
|
||||||
}
|
|
||||||
func valueOfBytes(v []byte) Value {
|
|
||||||
return Value{typ: bytesType, bin: v}
|
|
||||||
}
|
|
||||||
func valueOfIface(v interface{}) Value {
|
|
||||||
return Value{typ: ifaceType, iface: v}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v Value) getString() string {
|
|
||||||
return v.str
|
|
||||||
}
|
|
||||||
func (v Value) getBytes() []byte {
|
|
||||||
return v.bin
|
|
||||||
}
|
|
||||||
func (v Value) getIface() interface{} {
|
|
||||||
return v.iface
|
|
||||||
}
|
|
|
@ -69,8 +69,8 @@ import (
|
||||||
// composite Value. Modifying an empty, read-only value panics.
|
// composite Value. Modifying an empty, read-only value panics.
|
||||||
type Value value
|
type Value value
|
||||||
|
|
||||||
// The protoreflect API uses a custom Value union type instead of interface{}
|
// The protoreflect API uses a custom Value union type instead of any
|
||||||
// to keep the future open for performance optimizations. Using an interface{}
|
// to keep the future open for performance optimizations. Using an any
|
||||||
// always incurs an allocation for primitives (e.g., int64) since it needs to
|
// always incurs an allocation for primitives (e.g., int64) since it needs to
|
||||||
// be boxed on the heap (as interfaces can only contain pointers natively).
|
// be boxed on the heap (as interfaces can only contain pointers natively).
|
||||||
// Instead, we represent the Value union as a flat struct that internally keeps
|
// Instead, we represent the Value union as a flat struct that internally keeps
|
||||||
|
@ -85,7 +85,7 @@ type Value value
|
||||||
// ValueOf returns a Value initialized with the concrete value stored in v.
|
// ValueOf returns a Value initialized with the concrete value stored in v.
|
||||||
// This panics if the type does not match one of the allowed types in the
|
// This panics if the type does not match one of the allowed types in the
|
||||||
// Value union.
|
// Value union.
|
||||||
func ValueOf(v interface{}) Value {
|
func ValueOf(v any) Value {
|
||||||
switch v := v.(type) {
|
switch v := v.(type) {
|
||||||
case nil:
|
case nil:
|
||||||
return Value{}
|
return Value{}
|
||||||
|
@ -192,10 +192,10 @@ func (v Value) IsValid() bool {
|
||||||
return v.typ != nilType
|
return v.typ != nilType
|
||||||
}
|
}
|
||||||
|
|
||||||
// Interface returns v as an interface{}.
|
// Interface returns v as an any.
|
||||||
//
|
//
|
||||||
// Invariant: v == ValueOf(v).Interface()
|
// Invariant: v == ValueOf(v).Interface()
|
||||||
func (v Value) Interface() interface{} {
|
func (v Value) Interface() any {
|
||||||
switch v.typ {
|
switch v.typ {
|
||||||
case nilType:
|
case nilType:
|
||||||
return nil
|
return nil
|
||||||
|
@ -406,8 +406,8 @@ func (k MapKey) IsValid() bool {
|
||||||
return Value(k).IsValid()
|
return Value(k).IsValid()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Interface returns k as an interface{}.
|
// Interface returns k as an any.
|
||||||
func (k MapKey) Interface() interface{} {
|
func (k MapKey) Interface() any {
|
||||||
return Value(k).Interface()
|
return Value(k).Interface()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine && !go1.21
|
//go:build !go1.21
|
||||||
// +build !purego,!appengine,!go1.21
|
|
||||||
|
|
||||||
package protoreflect
|
package protoreflect
|
||||||
|
|
||||||
|
@ -45,7 +44,7 @@ var (
|
||||||
|
|
||||||
// typeOf returns a pointer to the Go type information.
|
// typeOf returns a pointer to the Go type information.
|
||||||
// The pointer is comparable and equal if and only if the types are identical.
|
// The pointer is comparable and equal if and only if the types are identical.
|
||||||
func typeOf(t interface{}) unsafe.Pointer {
|
func typeOf(t any) unsafe.Pointer {
|
||||||
return (*ifaceHeader)(unsafe.Pointer(&t)).Type
|
return (*ifaceHeader)(unsafe.Pointer(&t)).Type
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +79,7 @@ func valueOfBytes(v []byte) Value {
|
||||||
p := (*sliceHeader)(unsafe.Pointer(&v))
|
p := (*sliceHeader)(unsafe.Pointer(&v))
|
||||||
return Value{typ: bytesType, ptr: p.Data, num: uint64(len(v))}
|
return Value{typ: bytesType, ptr: p.Data, num: uint64(len(v))}
|
||||||
}
|
}
|
||||||
func valueOfIface(v interface{}) Value {
|
func valueOfIface(v any) Value {
|
||||||
p := (*ifaceHeader)(unsafe.Pointer(&v))
|
p := (*ifaceHeader)(unsafe.Pointer(&v))
|
||||||
return Value{typ: p.Type, ptr: p.Data}
|
return Value{typ: p.Type, ptr: p.Data}
|
||||||
}
|
}
|
||||||
|
@ -93,7 +92,7 @@ func (v Value) getBytes() (x []byte) {
|
||||||
*(*sliceHeader)(unsafe.Pointer(&x)) = sliceHeader{Data: v.ptr, Len: int(v.num), Cap: int(v.num)}
|
*(*sliceHeader)(unsafe.Pointer(&x)) = sliceHeader{Data: v.ptr, Len: int(v.num), Cap: int(v.num)}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
func (v Value) getIface() (x interface{}) {
|
func (v Value) getIface() (x any) {
|
||||||
*(*ifaceHeader)(unsafe.Pointer(&x)) = ifaceHeader{Type: v.typ, Data: v.ptr}
|
*(*ifaceHeader)(unsafe.Pointer(&x)) = ifaceHeader{Type: v.typ, Data: v.ptr}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build !purego && !appengine && go1.21
|
//go:build go1.21
|
||||||
// +build !purego,!appengine,go1.21
|
|
||||||
|
|
||||||
package protoreflect
|
package protoreflect
|
||||||
|
|
||||||
|
@ -15,7 +14,7 @@ import (
|
||||||
|
|
||||||
type (
|
type (
|
||||||
ifaceHeader struct {
|
ifaceHeader struct {
|
||||||
_ [0]interface{} // if interfaces have greater alignment than unsafe.Pointer, this will enforce it.
|
_ [0]any // if interfaces have greater alignment than unsafe.Pointer, this will enforce it.
|
||||||
Type unsafe.Pointer
|
Type unsafe.Pointer
|
||||||
Data unsafe.Pointer
|
Data unsafe.Pointer
|
||||||
}
|
}
|
||||||
|
@ -37,7 +36,7 @@ var (
|
||||||
|
|
||||||
// typeOf returns a pointer to the Go type information.
|
// typeOf returns a pointer to the Go type information.
|
||||||
// The pointer is comparable and equal if and only if the types are identical.
|
// The pointer is comparable and equal if and only if the types are identical.
|
||||||
func typeOf(t interface{}) unsafe.Pointer {
|
func typeOf(t any) unsafe.Pointer {
|
||||||
return (*ifaceHeader)(unsafe.Pointer(&t)).Type
|
return (*ifaceHeader)(unsafe.Pointer(&t)).Type
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +69,7 @@ func valueOfString(v string) Value {
|
||||||
func valueOfBytes(v []byte) Value {
|
func valueOfBytes(v []byte) Value {
|
||||||
return Value{typ: bytesType, ptr: unsafe.Pointer(unsafe.SliceData(v)), num: uint64(len(v))}
|
return Value{typ: bytesType, ptr: unsafe.Pointer(unsafe.SliceData(v)), num: uint64(len(v))}
|
||||||
}
|
}
|
||||||
func valueOfIface(v interface{}) Value {
|
func valueOfIface(v any) Value {
|
||||||
p := (*ifaceHeader)(unsafe.Pointer(&v))
|
p := (*ifaceHeader)(unsafe.Pointer(&v))
|
||||||
return Value{typ: p.Type, ptr: p.Data}
|
return Value{typ: p.Type, ptr: p.Data}
|
||||||
}
|
}
|
||||||
|
@ -81,7 +80,7 @@ func (v Value) getString() string {
|
||||||
func (v Value) getBytes() []byte {
|
func (v Value) getBytes() []byte {
|
||||||
return unsafe.Slice((*byte)(v.ptr), v.num)
|
return unsafe.Slice((*byte)(v.ptr), v.num)
|
||||||
}
|
}
|
||||||
func (v Value) getIface() (x interface{}) {
|
func (v Value) getIface() (x any) {
|
||||||
*(*ifaceHeader)(unsafe.Pointer(&x)) = ifaceHeader{Type: v.typ, Data: v.ptr}
|
*(*ifaceHeader)(unsafe.Pointer(&x)) = ifaceHeader{Type: v.typ, Data: v.ptr}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,7 @@ type Files struct {
|
||||||
// multiple files. Only top-level declarations are registered.
|
// multiple files. Only top-level declarations are registered.
|
||||||
// Note that enum values are in the top-level since that are in the same
|
// Note that enum values are in the top-level since that are in the same
|
||||||
// scope as the parent enum.
|
// scope as the parent enum.
|
||||||
descsByName map[protoreflect.FullName]interface{}
|
descsByName map[protoreflect.FullName]any
|
||||||
filesByPath map[string][]protoreflect.FileDescriptor
|
filesByPath map[string][]protoreflect.FileDescriptor
|
||||||
numFiles int
|
numFiles int
|
||||||
}
|
}
|
||||||
|
@ -117,7 +117,7 @@ func (r *Files) RegisterFile(file protoreflect.FileDescriptor) error {
|
||||||
defer globalMutex.Unlock()
|
defer globalMutex.Unlock()
|
||||||
}
|
}
|
||||||
if r.descsByName == nil {
|
if r.descsByName == nil {
|
||||||
r.descsByName = map[protoreflect.FullName]interface{}{
|
r.descsByName = map[protoreflect.FullName]any{
|
||||||
"": &packageDescriptor{},
|
"": &packageDescriptor{},
|
||||||
}
|
}
|
||||||
r.filesByPath = make(map[string][]protoreflect.FileDescriptor)
|
r.filesByPath = make(map[string][]protoreflect.FileDescriptor)
|
||||||
|
@ -485,7 +485,7 @@ type Types struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type (
|
type (
|
||||||
typesByName map[protoreflect.FullName]interface{}
|
typesByName map[protoreflect.FullName]any
|
||||||
extensionsByMessage map[protoreflect.FullName]extensionsByNumber
|
extensionsByMessage map[protoreflect.FullName]extensionsByNumber
|
||||||
extensionsByNumber map[protoreflect.FieldNumber]protoreflect.ExtensionType
|
extensionsByNumber map[protoreflect.FieldNumber]protoreflect.ExtensionType
|
||||||
)
|
)
|
||||||
|
@ -570,7 +570,7 @@ func (r *Types) RegisterExtension(xt protoreflect.ExtensionType) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Types) register(kind string, desc protoreflect.Descriptor, typ interface{}) error {
|
func (r *Types) register(kind string, desc protoreflect.Descriptor, typ any) error {
|
||||||
name := desc.FullName()
|
name := desc.FullName()
|
||||||
prev := r.typesByName[name]
|
prev := r.typesByName[name]
|
||||||
if prev != nil {
|
if prev != nil {
|
||||||
|
@ -841,7 +841,7 @@ func (r *Types) RangeExtensionsByMessage(message protoreflect.FullName, f func(p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func typeName(t interface{}) string {
|
func typeName(t any) string {
|
||||||
switch t.(type) {
|
switch t.(type) {
|
||||||
case protoreflect.EnumType:
|
case protoreflect.EnumType:
|
||||||
return "enum"
|
return "enum"
|
||||||
|
@ -854,7 +854,7 @@ func typeName(t interface{}) string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func amendErrorWithCaller(err error, prev, curr interface{}) error {
|
func amendErrorWithCaller(err error, prev, curr any) error {
|
||||||
prevPkg := goPackage(prev)
|
prevPkg := goPackage(prev)
|
||||||
currPkg := goPackage(curr)
|
currPkg := goPackage(curr)
|
||||||
if prevPkg == "" || currPkg == "" || prevPkg == currPkg {
|
if prevPkg == "" || currPkg == "" || prevPkg == currPkg {
|
||||||
|
@ -863,7 +863,7 @@ func amendErrorWithCaller(err error, prev, curr interface{}) error {
|
||||||
return errors.New("%s\n\tpreviously from: %q\n\tcurrently from: %q", err, prevPkg, currPkg)
|
return errors.New("%s\n\tpreviously from: %q\n\tcurrently from: %q", err, prevPkg, currPkg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func goPackage(v interface{}) string {
|
func goPackage(v any) string {
|
||||||
switch d := v.(type) {
|
switch d := v.(type) {
|
||||||
case protoreflect.EnumType:
|
case protoreflect.EnumType:
|
||||||
v = d.Descriptor()
|
v = d.Descriptor()
|
||||||
|
|
|
@ -39,6 +39,9 @@ type Methods = struct {
|
||||||
|
|
||||||
// CheckInitialized returns an error if any required fields in the message are not set.
|
// CheckInitialized returns an error if any required fields in the message are not set.
|
||||||
CheckInitialized func(CheckInitializedInput) (CheckInitializedOutput, error)
|
CheckInitialized func(CheckInitializedInput) (CheckInitializedOutput, error)
|
||||||
|
|
||||||
|
// Equal compares two messages and returns EqualOutput.Equal == true if they are equal.
|
||||||
|
Equal func(EqualInput) EqualOutput
|
||||||
}
|
}
|
||||||
|
|
||||||
// SupportFlags indicate support for optional features.
|
// SupportFlags indicate support for optional features.
|
||||||
|
@ -166,3 +169,18 @@ type CheckInitializedInput = struct {
|
||||||
type CheckInitializedOutput = struct {
|
type CheckInitializedOutput = struct {
|
||||||
pragma.NoUnkeyedLiterals
|
pragma.NoUnkeyedLiterals
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EqualInput is input to the Equal method.
|
||||||
|
type EqualInput = struct {
|
||||||
|
pragma.NoUnkeyedLiterals
|
||||||
|
|
||||||
|
MessageA protoreflect.Message
|
||||||
|
MessageB protoreflect.Message
|
||||||
|
}
|
||||||
|
|
||||||
|
// EqualOutput is output from the Equal method.
|
||||||
|
type EqualOutput = struct {
|
||||||
|
pragma.NoUnkeyedLiterals
|
||||||
|
|
||||||
|
Equal bool
|
||||||
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -29,11 +29,9 @@ type GoFeatures struct {
|
||||||
|
|
||||||
func (x *GoFeatures) Reset() {
|
func (x *GoFeatures) Reset() {
|
||||||
*x = GoFeatures{}
|
*x = GoFeatures{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_go_features_proto_msgTypes[0]
|
||||||
mi := &file_google_protobuf_go_features_proto_msgTypes[0]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *GoFeatures) String() string {
|
func (x *GoFeatures) String() string {
|
||||||
|
@ -44,7 +42,7 @@ func (*GoFeatures) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *GoFeatures) ProtoReflect() protoreflect.Message {
|
func (x *GoFeatures) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_go_features_proto_msgTypes[0]
|
mi := &file_google_protobuf_go_features_proto_msgTypes[0]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -90,27 +88,27 @@ var file_google_protobuf_go_features_proto_rawDesc = []byte{
|
||||||
0x66, 0x2f, 0x67, 0x6f, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x2e, 0x70, 0x72,
|
0x66, 0x2f, 0x67, 0x6f, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x2e, 0x70, 0x72,
|
||||||
0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
|
0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
|
||||||
0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc9, 0x01, 0x0a, 0x0a, 0x47, 0x6f,
|
0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xcd, 0x01, 0x0a, 0x0a, 0x47, 0x6f,
|
||||||
0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0xba, 0x01, 0x0a, 0x1a, 0x6c, 0x65, 0x67,
|
0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0xbe, 0x01, 0x0a, 0x1a, 0x6c, 0x65, 0x67,
|
||||||
0x61, 0x63, 0x79, 0x5f, 0x75, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x5f, 0x6a, 0x73,
|
0x61, 0x63, 0x79, 0x5f, 0x75, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x5f, 0x6a, 0x73,
|
||||||
0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x7d, 0x88,
|
0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x80, 0x01,
|
||||||
0x01, 0x01, 0x98, 0x01, 0x06, 0xa2, 0x01, 0x09, 0x12, 0x04, 0x74, 0x72, 0x75, 0x65, 0x18, 0x84,
|
0x88, 0x01, 0x01, 0x98, 0x01, 0x06, 0x98, 0x01, 0x01, 0xa2, 0x01, 0x09, 0x12, 0x04, 0x74, 0x72,
|
||||||
0x07, 0xa2, 0x01, 0x0a, 0x12, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x18, 0xe7, 0x07, 0xb2, 0x01,
|
0x75, 0x65, 0x18, 0x84, 0x07, 0xa2, 0x01, 0x0a, 0x12, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x18,
|
||||||
0x5b, 0x08, 0xe8, 0x07, 0x10, 0xe8, 0x07, 0x1a, 0x53, 0x54, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x67,
|
0xe7, 0x07, 0xb2, 0x01, 0x5b, 0x08, 0xe8, 0x07, 0x10, 0xe8, 0x07, 0x1a, 0x53, 0x54, 0x68, 0x65,
|
||||||
0x61, 0x63, 0x79, 0x20, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x4a, 0x53, 0x4f,
|
0x20, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x20, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61,
|
||||||
0x4e, 0x20, 0x41, 0x50, 0x49, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61,
|
0x6c, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x41, 0x50, 0x49, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x70,
|
||||||
0x74, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20,
|
0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c,
|
||||||
0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x66, 0x75, 0x74,
|
0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61,
|
||||||
0x75, 0x72, 0x65, 0x20, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x17, 0x6c, 0x65,
|
0x20, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x20, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
|
||||||
0x67, 0x61, 0x63, 0x79, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x4a, 0x73, 0x6f,
|
0x52, 0x17, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61,
|
||||||
0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x3c, 0x0a, 0x02, 0x67, 0x6f, 0x12, 0x1b, 0x2e, 0x67, 0x6f,
|
0x6c, 0x4a, 0x73, 0x6f, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x3c, 0x0a, 0x02, 0x67, 0x6f, 0x12,
|
||||||
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65,
|
0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
|
||||||
0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x18, 0xea, 0x07, 0x20,
|
||||||
0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x6f, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52,
|
0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x6f, 0x46, 0x65, 0x61, 0x74, 0x75,
|
||||||
0x02, 0x67, 0x6f, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f,
|
0x72, 0x65, 0x73, 0x52, 0x02, 0x67, 0x6f, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
||||||
0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
|
0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f,
|
||||||
0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x67, 0x6f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72,
|
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x67, 0x6f, 0x66, 0x65,
|
||||||
0x65, 0x73, 0x70, 0x62,
|
0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x70, 0x62,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -126,7 +124,7 @@ func file_google_protobuf_go_features_proto_rawDescGZIP() []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_google_protobuf_go_features_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
var file_google_protobuf_go_features_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
||||||
var file_google_protobuf_go_features_proto_goTypes = []interface{}{
|
var file_google_protobuf_go_features_proto_goTypes = []any{
|
||||||
(*GoFeatures)(nil), // 0: pb.GoFeatures
|
(*GoFeatures)(nil), // 0: pb.GoFeatures
|
||||||
(*descriptorpb.FeatureSet)(nil), // 1: google.protobuf.FeatureSet
|
(*descriptorpb.FeatureSet)(nil), // 1: google.protobuf.FeatureSet
|
||||||
}
|
}
|
||||||
|
@ -145,20 +143,6 @@ func file_google_protobuf_go_features_proto_init() {
|
||||||
if File_google_protobuf_go_features_proto != nil {
|
if File_google_protobuf_go_features_proto != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !protoimpl.UnsafeEnabled {
|
|
||||||
file_google_protobuf_go_features_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*GoFeatures); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
type x struct{}
|
type x struct{}
|
||||||
out := protoimpl.TypeBuilder{
|
out := protoimpl.TypeBuilder{
|
||||||
File: protoimpl.DescBuilder{
|
File: protoimpl.DescBuilder{
|
||||||
|
|
|
@ -368,11 +368,9 @@ func (x *Any) UnmarshalNew() (proto.Message, error) {
|
||||||
|
|
||||||
func (x *Any) Reset() {
|
func (x *Any) Reset() {
|
||||||
*x = Any{}
|
*x = Any{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_any_proto_msgTypes[0]
|
||||||
mi := &file_google_protobuf_any_proto_msgTypes[0]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Any) String() string {
|
func (x *Any) String() string {
|
||||||
|
@ -383,7 +381,7 @@ func (*Any) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *Any) ProtoReflect() protoreflect.Message {
|
func (x *Any) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_any_proto_msgTypes[0]
|
mi := &file_google_protobuf_any_proto_msgTypes[0]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -445,7 +443,7 @@ func file_google_protobuf_any_proto_rawDescGZIP() []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_google_protobuf_any_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
var file_google_protobuf_any_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
||||||
var file_google_protobuf_any_proto_goTypes = []interface{}{
|
var file_google_protobuf_any_proto_goTypes = []any{
|
||||||
(*Any)(nil), // 0: google.protobuf.Any
|
(*Any)(nil), // 0: google.protobuf.Any
|
||||||
}
|
}
|
||||||
var file_google_protobuf_any_proto_depIdxs = []int32{
|
var file_google_protobuf_any_proto_depIdxs = []int32{
|
||||||
|
@ -461,20 +459,6 @@ func file_google_protobuf_any_proto_init() {
|
||||||
if File_google_protobuf_any_proto != nil {
|
if File_google_protobuf_any_proto != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !protoimpl.UnsafeEnabled {
|
|
||||||
file_google_protobuf_any_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*Any); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
type x struct{}
|
type x struct{}
|
||||||
out := protoimpl.TypeBuilder{
|
out := protoimpl.TypeBuilder{
|
||||||
File: protoimpl.DescBuilder{
|
File: protoimpl.DescBuilder{
|
||||||
|
|
|
@ -245,11 +245,9 @@ func (x *Duration) check() uint {
|
||||||
|
|
||||||
func (x *Duration) Reset() {
|
func (x *Duration) Reset() {
|
||||||
*x = Duration{}
|
*x = Duration{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_duration_proto_msgTypes[0]
|
||||||
mi := &file_google_protobuf_duration_proto_msgTypes[0]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Duration) String() string {
|
func (x *Duration) String() string {
|
||||||
|
@ -260,7 +258,7 @@ func (*Duration) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *Duration) ProtoReflect() protoreflect.Message {
|
func (x *Duration) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_duration_proto_msgTypes[0]
|
mi := &file_google_protobuf_duration_proto_msgTypes[0]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -323,7 +321,7 @@ func file_google_protobuf_duration_proto_rawDescGZIP() []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_google_protobuf_duration_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
var file_google_protobuf_duration_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
||||||
var file_google_protobuf_duration_proto_goTypes = []interface{}{
|
var file_google_protobuf_duration_proto_goTypes = []any{
|
||||||
(*Duration)(nil), // 0: google.protobuf.Duration
|
(*Duration)(nil), // 0: google.protobuf.Duration
|
||||||
}
|
}
|
||||||
var file_google_protobuf_duration_proto_depIdxs = []int32{
|
var file_google_protobuf_duration_proto_depIdxs = []int32{
|
||||||
|
@ -339,20 +337,6 @@ func file_google_protobuf_duration_proto_init() {
|
||||||
if File_google_protobuf_duration_proto != nil {
|
if File_google_protobuf_duration_proto != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !protoimpl.UnsafeEnabled {
|
|
||||||
file_google_protobuf_duration_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*Duration); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
type x struct{}
|
type x struct{}
|
||||||
out := protoimpl.TypeBuilder{
|
out := protoimpl.TypeBuilder{
|
||||||
File: protoimpl.DescBuilder{
|
File: protoimpl.DescBuilder{
|
||||||
|
|
|
@ -467,11 +467,9 @@ func rangeFields(path string, f func(field string) bool) bool {
|
||||||
|
|
||||||
func (x *FieldMask) Reset() {
|
func (x *FieldMask) Reset() {
|
||||||
*x = FieldMask{}
|
*x = FieldMask{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_field_mask_proto_msgTypes[0]
|
||||||
mi := &file_google_protobuf_field_mask_proto_msgTypes[0]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *FieldMask) String() string {
|
func (x *FieldMask) String() string {
|
||||||
|
@ -482,7 +480,7 @@ func (*FieldMask) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *FieldMask) ProtoReflect() protoreflect.Message {
|
func (x *FieldMask) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_field_mask_proto_msgTypes[0]
|
mi := &file_google_protobuf_field_mask_proto_msgTypes[0]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -537,7 +535,7 @@ func file_google_protobuf_field_mask_proto_rawDescGZIP() []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_google_protobuf_field_mask_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
var file_google_protobuf_field_mask_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
||||||
var file_google_protobuf_field_mask_proto_goTypes = []interface{}{
|
var file_google_protobuf_field_mask_proto_goTypes = []any{
|
||||||
(*FieldMask)(nil), // 0: google.protobuf.FieldMask
|
(*FieldMask)(nil), // 0: google.protobuf.FieldMask
|
||||||
}
|
}
|
||||||
var file_google_protobuf_field_mask_proto_depIdxs = []int32{
|
var file_google_protobuf_field_mask_proto_depIdxs = []int32{
|
||||||
|
@ -553,20 +551,6 @@ func file_google_protobuf_field_mask_proto_init() {
|
||||||
if File_google_protobuf_field_mask_proto != nil {
|
if File_google_protobuf_field_mask_proto != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !protoimpl.UnsafeEnabled {
|
|
||||||
file_google_protobuf_field_mask_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*FieldMask); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
type x struct{}
|
type x struct{}
|
||||||
out := protoimpl.TypeBuilder{
|
out := protoimpl.TypeBuilder{
|
||||||
File: protoimpl.DescBuilder{
|
File: protoimpl.DescBuilder{
|
||||||
|
|
|
@ -49,11 +49,11 @@
|
||||||
// The standard Go "encoding/json" package has functionality to serialize
|
// The standard Go "encoding/json" package has functionality to serialize
|
||||||
// arbitrary types to a large degree. The Value.AsInterface, Struct.AsMap, and
|
// arbitrary types to a large degree. The Value.AsInterface, Struct.AsMap, and
|
||||||
// ListValue.AsSlice methods can convert the protobuf message representation into
|
// ListValue.AsSlice methods can convert the protobuf message representation into
|
||||||
// a form represented by interface{}, map[string]interface{}, and []interface{}.
|
// a form represented by any, map[string]any, and []any.
|
||||||
// This form can be used with other packages that operate on such data structures
|
// This form can be used with other packages that operate on such data structures
|
||||||
// and also directly with the standard json package.
|
// and also directly with the standard json package.
|
||||||
//
|
//
|
||||||
// In order to convert the interface{}, map[string]interface{}, and []interface{}
|
// In order to convert the any, map[string]any, and []any
|
||||||
// forms back as Value, Struct, and ListValue messages, use the NewStruct,
|
// forms back as Value, Struct, and ListValue messages, use the NewStruct,
|
||||||
// NewList, and NewValue constructor functions.
|
// NewList, and NewValue constructor functions.
|
||||||
//
|
//
|
||||||
|
@ -88,28 +88,28 @@
|
||||||
//
|
//
|
||||||
// To construct a Value message representing the above JSON object:
|
// To construct a Value message representing the above JSON object:
|
||||||
//
|
//
|
||||||
// m, err := structpb.NewValue(map[string]interface{}{
|
// m, err := structpb.NewValue(map[string]any{
|
||||||
// "firstName": "John",
|
// "firstName": "John",
|
||||||
// "lastName": "Smith",
|
// "lastName": "Smith",
|
||||||
// "isAlive": true,
|
// "isAlive": true,
|
||||||
// "age": 27,
|
// "age": 27,
|
||||||
// "address": map[string]interface{}{
|
// "address": map[string]any{
|
||||||
// "streetAddress": "21 2nd Street",
|
// "streetAddress": "21 2nd Street",
|
||||||
// "city": "New York",
|
// "city": "New York",
|
||||||
// "state": "NY",
|
// "state": "NY",
|
||||||
// "postalCode": "10021-3100",
|
// "postalCode": "10021-3100",
|
||||||
// },
|
// },
|
||||||
// "phoneNumbers": []interface{}{
|
// "phoneNumbers": []any{
|
||||||
// map[string]interface{}{
|
// map[string]any{
|
||||||
// "type": "home",
|
// "type": "home",
|
||||||
// "number": "212 555-1234",
|
// "number": "212 555-1234",
|
||||||
// },
|
// },
|
||||||
// map[string]interface{}{
|
// map[string]any{
|
||||||
// "type": "office",
|
// "type": "office",
|
||||||
// "number": "646 555-4567",
|
// "number": "646 555-4567",
|
||||||
// },
|
// },
|
||||||
// },
|
// },
|
||||||
// "children": []interface{}{},
|
// "children": []any{},
|
||||||
// "spouse": nil,
|
// "spouse": nil,
|
||||||
// })
|
// })
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
|
@ -120,6 +120,7 @@ package structpb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
base64 "encoding/base64"
|
base64 "encoding/base64"
|
||||||
|
json "encoding/json"
|
||||||
protojson "google.golang.org/protobuf/encoding/protojson"
|
protojson "google.golang.org/protobuf/encoding/protojson"
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
|
@ -197,7 +198,7 @@ type Struct struct {
|
||||||
// NewStruct constructs a Struct from a general-purpose Go map.
|
// NewStruct constructs a Struct from a general-purpose Go map.
|
||||||
// The map keys must be valid UTF-8.
|
// The map keys must be valid UTF-8.
|
||||||
// The map values are converted using NewValue.
|
// The map values are converted using NewValue.
|
||||||
func NewStruct(v map[string]interface{}) (*Struct, error) {
|
func NewStruct(v map[string]any) (*Struct, error) {
|
||||||
x := &Struct{Fields: make(map[string]*Value, len(v))}
|
x := &Struct{Fields: make(map[string]*Value, len(v))}
|
||||||
for k, v := range v {
|
for k, v := range v {
|
||||||
if !utf8.ValidString(k) {
|
if !utf8.ValidString(k) {
|
||||||
|
@ -214,9 +215,9 @@ func NewStruct(v map[string]interface{}) (*Struct, error) {
|
||||||
|
|
||||||
// AsMap converts x to a general-purpose Go map.
|
// AsMap converts x to a general-purpose Go map.
|
||||||
// The map values are converted by calling Value.AsInterface.
|
// The map values are converted by calling Value.AsInterface.
|
||||||
func (x *Struct) AsMap() map[string]interface{} {
|
func (x *Struct) AsMap() map[string]any {
|
||||||
f := x.GetFields()
|
f := x.GetFields()
|
||||||
vs := make(map[string]interface{}, len(f))
|
vs := make(map[string]any, len(f))
|
||||||
for k, v := range f {
|
for k, v := range f {
|
||||||
vs[k] = v.AsInterface()
|
vs[k] = v.AsInterface()
|
||||||
}
|
}
|
||||||
|
@ -233,11 +234,9 @@ func (x *Struct) UnmarshalJSON(b []byte) error {
|
||||||
|
|
||||||
func (x *Struct) Reset() {
|
func (x *Struct) Reset() {
|
||||||
*x = Struct{}
|
*x = Struct{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_struct_proto_msgTypes[0]
|
||||||
mi := &file_google_protobuf_struct_proto_msgTypes[0]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Struct) String() string {
|
func (x *Struct) String() string {
|
||||||
|
@ -248,7 +247,7 @@ func (*Struct) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *Struct) ProtoReflect() protoreflect.Message {
|
func (x *Struct) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_struct_proto_msgTypes[0]
|
mi := &file_google_protobuf_struct_proto_msgTypes[0]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -296,23 +295,24 @@ type Value struct {
|
||||||
|
|
||||||
// NewValue constructs a Value from a general-purpose Go interface.
|
// NewValue constructs a Value from a general-purpose Go interface.
|
||||||
//
|
//
|
||||||
// ╔════════════════════════╤════════════════════════════════════════════╗
|
// ╔═══════════════════════════════════════╤════════════════════════════════════════════╗
|
||||||
// ║ Go type │ Conversion ║
|
// ║ Go type │ Conversion ║
|
||||||
// ╠════════════════════════╪════════════════════════════════════════════╣
|
// ╠═══════════════════════════════════════╪════════════════════════════════════════════╣
|
||||||
// ║ nil │ stored as NullValue ║
|
// ║ nil │ stored as NullValue ║
|
||||||
// ║ bool │ stored as BoolValue ║
|
// ║ bool │ stored as BoolValue ║
|
||||||
// ║ int, int32, int64 │ stored as NumberValue ║
|
// ║ int, int8, int16, int32, int64 │ stored as NumberValue ║
|
||||||
// ║ uint, uint32, uint64 │ stored as NumberValue ║
|
// ║ uint, uint8, uint16, uint32, uint64 │ stored as NumberValue ║
|
||||||
// ║ float32, float64 │ stored as NumberValue ║
|
// ║ float32, float64 │ stored as NumberValue ║
|
||||||
// ║ string │ stored as StringValue; must be valid UTF-8 ║
|
// ║ json.Number │ stored as NumberValue ║
|
||||||
// ║ []byte │ stored as StringValue; base64-encoded ║
|
// ║ string │ stored as StringValue; must be valid UTF-8 ║
|
||||||
// ║ map[string]interface{} │ stored as StructValue ║
|
// ║ []byte │ stored as StringValue; base64-encoded ║
|
||||||
// ║ []interface{} │ stored as ListValue ║
|
// ║ map[string]any │ stored as StructValue ║
|
||||||
// ╚════════════════════════╧════════════════════════════════════════════╝
|
// ║ []any │ stored as ListValue ║
|
||||||
|
// ╚═══════════════════════════════════════╧════════════════════════════════════════════╝
|
||||||
//
|
//
|
||||||
// When converting an int64 or uint64 to a NumberValue, numeric precision loss
|
// When converting an int64 or uint64 to a NumberValue, numeric precision loss
|
||||||
// is possible since they are stored as a float64.
|
// is possible since they are stored as a float64.
|
||||||
func NewValue(v interface{}) (*Value, error) {
|
func NewValue(v any) (*Value, error) {
|
||||||
switch v := v.(type) {
|
switch v := v.(type) {
|
||||||
case nil:
|
case nil:
|
||||||
return NewNullValue(), nil
|
return NewNullValue(), nil
|
||||||
|
@ -320,12 +320,20 @@ func NewValue(v interface{}) (*Value, error) {
|
||||||
return NewBoolValue(v), nil
|
return NewBoolValue(v), nil
|
||||||
case int:
|
case int:
|
||||||
return NewNumberValue(float64(v)), nil
|
return NewNumberValue(float64(v)), nil
|
||||||
|
case int8:
|
||||||
|
return NewNumberValue(float64(v)), nil
|
||||||
|
case int16:
|
||||||
|
return NewNumberValue(float64(v)), nil
|
||||||
case int32:
|
case int32:
|
||||||
return NewNumberValue(float64(v)), nil
|
return NewNumberValue(float64(v)), nil
|
||||||
case int64:
|
case int64:
|
||||||
return NewNumberValue(float64(v)), nil
|
return NewNumberValue(float64(v)), nil
|
||||||
case uint:
|
case uint:
|
||||||
return NewNumberValue(float64(v)), nil
|
return NewNumberValue(float64(v)), nil
|
||||||
|
case uint8:
|
||||||
|
return NewNumberValue(float64(v)), nil
|
||||||
|
case uint16:
|
||||||
|
return NewNumberValue(float64(v)), nil
|
||||||
case uint32:
|
case uint32:
|
||||||
return NewNumberValue(float64(v)), nil
|
return NewNumberValue(float64(v)), nil
|
||||||
case uint64:
|
case uint64:
|
||||||
|
@ -334,6 +342,12 @@ func NewValue(v interface{}) (*Value, error) {
|
||||||
return NewNumberValue(float64(v)), nil
|
return NewNumberValue(float64(v)), nil
|
||||||
case float64:
|
case float64:
|
||||||
return NewNumberValue(float64(v)), nil
|
return NewNumberValue(float64(v)), nil
|
||||||
|
case json.Number:
|
||||||
|
n, err := v.Float64()
|
||||||
|
if err != nil {
|
||||||
|
return nil, protoimpl.X.NewError("invalid number format %q, expected a float64: %v", v, err)
|
||||||
|
}
|
||||||
|
return NewNumberValue(n), nil
|
||||||
case string:
|
case string:
|
||||||
if !utf8.ValidString(v) {
|
if !utf8.ValidString(v) {
|
||||||
return nil, protoimpl.X.NewError("invalid UTF-8 in string: %q", v)
|
return nil, protoimpl.X.NewError("invalid UTF-8 in string: %q", v)
|
||||||
|
@ -342,13 +356,13 @@ func NewValue(v interface{}) (*Value, error) {
|
||||||
case []byte:
|
case []byte:
|
||||||
s := base64.StdEncoding.EncodeToString(v)
|
s := base64.StdEncoding.EncodeToString(v)
|
||||||
return NewStringValue(s), nil
|
return NewStringValue(s), nil
|
||||||
case map[string]interface{}:
|
case map[string]any:
|
||||||
v2, err := NewStruct(v)
|
v2, err := NewStruct(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return NewStructValue(v2), nil
|
return NewStructValue(v2), nil
|
||||||
case []interface{}:
|
case []any:
|
||||||
v2, err := NewList(v)
|
v2, err := NewList(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -396,7 +410,7 @@ func NewListValue(v *ListValue) *Value {
|
||||||
//
|
//
|
||||||
// Floating-point values (i.e., "NaN", "Infinity", and "-Infinity") are
|
// Floating-point values (i.e., "NaN", "Infinity", and "-Infinity") are
|
||||||
// converted as strings to remain compatible with MarshalJSON.
|
// converted as strings to remain compatible with MarshalJSON.
|
||||||
func (x *Value) AsInterface() interface{} {
|
func (x *Value) AsInterface() any {
|
||||||
switch v := x.GetKind().(type) {
|
switch v := x.GetKind().(type) {
|
||||||
case *Value_NumberValue:
|
case *Value_NumberValue:
|
||||||
if v != nil {
|
if v != nil {
|
||||||
|
@ -441,11 +455,9 @@ func (x *Value) UnmarshalJSON(b []byte) error {
|
||||||
|
|
||||||
func (x *Value) Reset() {
|
func (x *Value) Reset() {
|
||||||
*x = Value{}
|
*x = Value{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_struct_proto_msgTypes[1]
|
||||||
mi := &file_google_protobuf_struct_proto_msgTypes[1]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Value) String() string {
|
func (x *Value) String() string {
|
||||||
|
@ -456,7 +468,7 @@ func (*Value) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *Value) ProtoReflect() protoreflect.Message {
|
func (x *Value) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_struct_proto_msgTypes[1]
|
mi := &file_google_protobuf_struct_proto_msgTypes[1]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -580,7 +592,7 @@ type ListValue struct {
|
||||||
|
|
||||||
// NewList constructs a ListValue from a general-purpose Go slice.
|
// NewList constructs a ListValue from a general-purpose Go slice.
|
||||||
// The slice elements are converted using NewValue.
|
// The slice elements are converted using NewValue.
|
||||||
func NewList(v []interface{}) (*ListValue, error) {
|
func NewList(v []any) (*ListValue, error) {
|
||||||
x := &ListValue{Values: make([]*Value, len(v))}
|
x := &ListValue{Values: make([]*Value, len(v))}
|
||||||
for i, v := range v {
|
for i, v := range v {
|
||||||
var err error
|
var err error
|
||||||
|
@ -594,9 +606,9 @@ func NewList(v []interface{}) (*ListValue, error) {
|
||||||
|
|
||||||
// AsSlice converts x to a general-purpose Go slice.
|
// AsSlice converts x to a general-purpose Go slice.
|
||||||
// The slice elements are converted by calling Value.AsInterface.
|
// The slice elements are converted by calling Value.AsInterface.
|
||||||
func (x *ListValue) AsSlice() []interface{} {
|
func (x *ListValue) AsSlice() []any {
|
||||||
vals := x.GetValues()
|
vals := x.GetValues()
|
||||||
vs := make([]interface{}, len(vals))
|
vs := make([]any, len(vals))
|
||||||
for i, v := range vals {
|
for i, v := range vals {
|
||||||
vs[i] = v.AsInterface()
|
vs[i] = v.AsInterface()
|
||||||
}
|
}
|
||||||
|
@ -613,11 +625,9 @@ func (x *ListValue) UnmarshalJSON(b []byte) error {
|
||||||
|
|
||||||
func (x *ListValue) Reset() {
|
func (x *ListValue) Reset() {
|
||||||
*x = ListValue{}
|
*x = ListValue{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_struct_proto_msgTypes[2]
|
||||||
mi := &file_google_protobuf_struct_proto_msgTypes[2]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *ListValue) String() string {
|
func (x *ListValue) String() string {
|
||||||
|
@ -628,7 +638,7 @@ func (*ListValue) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *ListValue) ProtoReflect() protoreflect.Message {
|
func (x *ListValue) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_struct_proto_msgTypes[2]
|
mi := &file_google_protobuf_struct_proto_msgTypes[2]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -716,7 +726,7 @@ func file_google_protobuf_struct_proto_rawDescGZIP() []byte {
|
||||||
|
|
||||||
var file_google_protobuf_struct_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
var file_google_protobuf_struct_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
||||||
var file_google_protobuf_struct_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
|
var file_google_protobuf_struct_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
|
||||||
var file_google_protobuf_struct_proto_goTypes = []interface{}{
|
var file_google_protobuf_struct_proto_goTypes = []any{
|
||||||
(NullValue)(0), // 0: google.protobuf.NullValue
|
(NullValue)(0), // 0: google.protobuf.NullValue
|
||||||
(*Struct)(nil), // 1: google.protobuf.Struct
|
(*Struct)(nil), // 1: google.protobuf.Struct
|
||||||
(*Value)(nil), // 2: google.protobuf.Value
|
(*Value)(nil), // 2: google.protobuf.Value
|
||||||
|
@ -742,45 +752,7 @@ func file_google_protobuf_struct_proto_init() {
|
||||||
if File_google_protobuf_struct_proto != nil {
|
if File_google_protobuf_struct_proto != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !protoimpl.UnsafeEnabled {
|
file_google_protobuf_struct_proto_msgTypes[1].OneofWrappers = []any{
|
||||||
file_google_protobuf_struct_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*Struct); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_google_protobuf_struct_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*Value); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_google_protobuf_struct_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*ListValue); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_google_protobuf_struct_proto_msgTypes[1].OneofWrappers = []interface{}{
|
|
||||||
(*Value_NullValue)(nil),
|
(*Value_NullValue)(nil),
|
||||||
(*Value_NumberValue)(nil),
|
(*Value_NumberValue)(nil),
|
||||||
(*Value_StringValue)(nil),
|
(*Value_StringValue)(nil),
|
||||||
|
|
|
@ -254,11 +254,9 @@ func (x *Timestamp) check() uint {
|
||||||
|
|
||||||
func (x *Timestamp) Reset() {
|
func (x *Timestamp) Reset() {
|
||||||
*x = Timestamp{}
|
*x = Timestamp{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_timestamp_proto_msgTypes[0]
|
||||||
mi := &file_google_protobuf_timestamp_proto_msgTypes[0]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Timestamp) String() string {
|
func (x *Timestamp) String() string {
|
||||||
|
@ -269,7 +267,7 @@ func (*Timestamp) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *Timestamp) ProtoReflect() protoreflect.Message {
|
func (x *Timestamp) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_timestamp_proto_msgTypes[0]
|
mi := &file_google_protobuf_timestamp_proto_msgTypes[0]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -332,7 +330,7 @@ func file_google_protobuf_timestamp_proto_rawDescGZIP() []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_google_protobuf_timestamp_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
var file_google_protobuf_timestamp_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
||||||
var file_google_protobuf_timestamp_proto_goTypes = []interface{}{
|
var file_google_protobuf_timestamp_proto_goTypes = []any{
|
||||||
(*Timestamp)(nil), // 0: google.protobuf.Timestamp
|
(*Timestamp)(nil), // 0: google.protobuf.Timestamp
|
||||||
}
|
}
|
||||||
var file_google_protobuf_timestamp_proto_depIdxs = []int32{
|
var file_google_protobuf_timestamp_proto_depIdxs = []int32{
|
||||||
|
@ -348,20 +346,6 @@ func file_google_protobuf_timestamp_proto_init() {
|
||||||
if File_google_protobuf_timestamp_proto != nil {
|
if File_google_protobuf_timestamp_proto != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !protoimpl.UnsafeEnabled {
|
|
||||||
file_google_protobuf_timestamp_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*Timestamp); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
type x struct{}
|
type x struct{}
|
||||||
out := protoimpl.TypeBuilder{
|
out := protoimpl.TypeBuilder{
|
||||||
File: protoimpl.DescBuilder{
|
File: protoimpl.DescBuilder{
|
||||||
|
|
|
@ -69,11 +69,9 @@ func Double(v float64) *DoubleValue {
|
||||||
|
|
||||||
func (x *DoubleValue) Reset() {
|
func (x *DoubleValue) Reset() {
|
||||||
*x = DoubleValue{}
|
*x = DoubleValue{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[0]
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[0]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *DoubleValue) String() string {
|
func (x *DoubleValue) String() string {
|
||||||
|
@ -84,7 +82,7 @@ func (*DoubleValue) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *DoubleValue) ProtoReflect() protoreflect.Message {
|
func (x *DoubleValue) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[0]
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[0]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -125,11 +123,9 @@ func Float(v float32) *FloatValue {
|
||||||
|
|
||||||
func (x *FloatValue) Reset() {
|
func (x *FloatValue) Reset() {
|
||||||
*x = FloatValue{}
|
*x = FloatValue{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[1]
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[1]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *FloatValue) String() string {
|
func (x *FloatValue) String() string {
|
||||||
|
@ -140,7 +136,7 @@ func (*FloatValue) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *FloatValue) ProtoReflect() protoreflect.Message {
|
func (x *FloatValue) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[1]
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[1]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -181,11 +177,9 @@ func Int64(v int64) *Int64Value {
|
||||||
|
|
||||||
func (x *Int64Value) Reset() {
|
func (x *Int64Value) Reset() {
|
||||||
*x = Int64Value{}
|
*x = Int64Value{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[2]
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[2]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Int64Value) String() string {
|
func (x *Int64Value) String() string {
|
||||||
|
@ -196,7 +190,7 @@ func (*Int64Value) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *Int64Value) ProtoReflect() protoreflect.Message {
|
func (x *Int64Value) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[2]
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[2]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -237,11 +231,9 @@ func UInt64(v uint64) *UInt64Value {
|
||||||
|
|
||||||
func (x *UInt64Value) Reset() {
|
func (x *UInt64Value) Reset() {
|
||||||
*x = UInt64Value{}
|
*x = UInt64Value{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[3]
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[3]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *UInt64Value) String() string {
|
func (x *UInt64Value) String() string {
|
||||||
|
@ -252,7 +244,7 @@ func (*UInt64Value) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *UInt64Value) ProtoReflect() protoreflect.Message {
|
func (x *UInt64Value) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[3]
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[3]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -293,11 +285,9 @@ func Int32(v int32) *Int32Value {
|
||||||
|
|
||||||
func (x *Int32Value) Reset() {
|
func (x *Int32Value) Reset() {
|
||||||
*x = Int32Value{}
|
*x = Int32Value{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[4]
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[4]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Int32Value) String() string {
|
func (x *Int32Value) String() string {
|
||||||
|
@ -308,7 +298,7 @@ func (*Int32Value) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *Int32Value) ProtoReflect() protoreflect.Message {
|
func (x *Int32Value) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[4]
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[4]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -349,11 +339,9 @@ func UInt32(v uint32) *UInt32Value {
|
||||||
|
|
||||||
func (x *UInt32Value) Reset() {
|
func (x *UInt32Value) Reset() {
|
||||||
*x = UInt32Value{}
|
*x = UInt32Value{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[5]
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[5]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *UInt32Value) String() string {
|
func (x *UInt32Value) String() string {
|
||||||
|
@ -364,7 +352,7 @@ func (*UInt32Value) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *UInt32Value) ProtoReflect() protoreflect.Message {
|
func (x *UInt32Value) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[5]
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[5]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -405,11 +393,9 @@ func Bool(v bool) *BoolValue {
|
||||||
|
|
||||||
func (x *BoolValue) Reset() {
|
func (x *BoolValue) Reset() {
|
||||||
*x = BoolValue{}
|
*x = BoolValue{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[6]
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[6]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *BoolValue) String() string {
|
func (x *BoolValue) String() string {
|
||||||
|
@ -420,7 +406,7 @@ func (*BoolValue) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *BoolValue) ProtoReflect() protoreflect.Message {
|
func (x *BoolValue) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[6]
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[6]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -461,11 +447,9 @@ func String(v string) *StringValue {
|
||||||
|
|
||||||
func (x *StringValue) Reset() {
|
func (x *StringValue) Reset() {
|
||||||
*x = StringValue{}
|
*x = StringValue{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[7]
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[7]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *StringValue) String() string {
|
func (x *StringValue) String() string {
|
||||||
|
@ -476,7 +460,7 @@ func (*StringValue) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *StringValue) ProtoReflect() protoreflect.Message {
|
func (x *StringValue) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[7]
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[7]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -517,11 +501,9 @@ func Bytes(v []byte) *BytesValue {
|
||||||
|
|
||||||
func (x *BytesValue) Reset() {
|
func (x *BytesValue) Reset() {
|
||||||
*x = BytesValue{}
|
*x = BytesValue{}
|
||||||
if protoimpl.UnsafeEnabled {
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[8]
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[8]
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms.StoreMessageInfo(mi)
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *BytesValue) String() string {
|
func (x *BytesValue) String() string {
|
||||||
|
@ -532,7 +514,7 @@ func (*BytesValue) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *BytesValue) ProtoReflect() protoreflect.Message {
|
func (x *BytesValue) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_protobuf_wrappers_proto_msgTypes[8]
|
mi := &file_google_protobuf_wrappers_proto_msgTypes[8]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
|
@ -605,7 +587,7 @@ func file_google_protobuf_wrappers_proto_rawDescGZIP() []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_google_protobuf_wrappers_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
|
var file_google_protobuf_wrappers_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
|
||||||
var file_google_protobuf_wrappers_proto_goTypes = []interface{}{
|
var file_google_protobuf_wrappers_proto_goTypes = []any{
|
||||||
(*DoubleValue)(nil), // 0: google.protobuf.DoubleValue
|
(*DoubleValue)(nil), // 0: google.protobuf.DoubleValue
|
||||||
(*FloatValue)(nil), // 1: google.protobuf.FloatValue
|
(*FloatValue)(nil), // 1: google.protobuf.FloatValue
|
||||||
(*Int64Value)(nil), // 2: google.protobuf.Int64Value
|
(*Int64Value)(nil), // 2: google.protobuf.Int64Value
|
||||||
|
@ -629,116 +611,6 @@ func file_google_protobuf_wrappers_proto_init() {
|
||||||
if File_google_protobuf_wrappers_proto != nil {
|
if File_google_protobuf_wrappers_proto != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !protoimpl.UnsafeEnabled {
|
|
||||||
file_google_protobuf_wrappers_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*DoubleValue); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_google_protobuf_wrappers_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*FloatValue); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_google_protobuf_wrappers_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*Int64Value); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_google_protobuf_wrappers_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*UInt64Value); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_google_protobuf_wrappers_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*Int32Value); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_google_protobuf_wrappers_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*UInt32Value); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_google_protobuf_wrappers_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*BoolValue); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_google_protobuf_wrappers_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*StringValue); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_google_protobuf_wrappers_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*BytesValue); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
type x struct{}
|
type x struct{}
|
||||||
out := protoimpl.TypeBuilder{
|
out := protoimpl.TypeBuilder{
|
||||||
File: protoimpl.DescBuilder{
|
File: protoimpl.DescBuilder{
|
||||||
|
|
|
@ -475,8 +475,8 @@ google.golang.org/grpc/serviceconfig
|
||||||
google.golang.org/grpc/stats
|
google.golang.org/grpc/stats
|
||||||
google.golang.org/grpc/status
|
google.golang.org/grpc/status
|
||||||
google.golang.org/grpc/tap
|
google.golang.org/grpc/tap
|
||||||
# google.golang.org/protobuf v1.34.1
|
# google.golang.org/protobuf v1.35.1
|
||||||
## explicit; go 1.17
|
## explicit; go 1.21
|
||||||
google.golang.org/protobuf/encoding/protojson
|
google.golang.org/protobuf/encoding/protojson
|
||||||
google.golang.org/protobuf/encoding/prototext
|
google.golang.org/protobuf/encoding/prototext
|
||||||
google.golang.org/protobuf/encoding/protowire
|
google.golang.org/protobuf/encoding/protowire
|
||||||
|
|
Loading…
Reference in New Issue