// Code generated by protoc-gen-go. DO NOT EDIT.
// source: encoding/textpb/testprotos/pb2/test.proto

package pb2

import (
	proto "github.com/golang/protobuf/proto"
	any "github.com/golang/protobuf/ptypes/any"
	duration "github.com/golang/protobuf/ptypes/duration"
	empty "github.com/golang/protobuf/ptypes/empty"
	_struct "github.com/golang/protobuf/ptypes/struct"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	protoreflect "github.com/golang/protobuf/v2/reflect/protoreflect"
	prototype "github.com/golang/protobuf/v2/reflect/prototype"
	protoimpl "github.com/golang/protobuf/v2/runtime/protoimpl"
)

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type Enum int32

const (
	Enum_UNKNOWN Enum = 0
	Enum_FIRST   Enum = 1
	Enum_SECOND  Enum = 2
	Enum_TENTH   Enum = 10
)

type xxx_Enum Enum

func (e Enum) ProtoReflect() protoreflect.Enum {
	return (xxx_Enum)(e)
}
func (e xxx_Enum) Type() protoreflect.EnumType {
	return xxx_Test_ProtoFile_EnumTypes[0]
}
func (e xxx_Enum) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(e)
}

var Enum_name = map[int32]string{
	0:  "UNKNOWN",
	1:  "FIRST",
	2:  "SECOND",
	10: "TENTH",
}

var Enum_value = map[string]int32{
	"UNKNOWN": 0,
	"FIRST":   1,
	"SECOND":  2,
	"TENTH":   10,
}

func (x Enum) Enum() *Enum {
	p := new(Enum)
	*p = x
	return p
}

func (x Enum) String() string {
	return proto.EnumName(Enum_name, int32(x))
}

func (x *Enum) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(Enum_value, data, "Enum")
	if err != nil {
		return err
	}
	*x = Enum(value)
	return nil
}

func (Enum) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{0}
}

type Enums_NestedEnum int32

const (
	Enums_UNO  Enums_NestedEnum = 1
	Enums_DOS  Enums_NestedEnum = 2
	Enums_DIEZ Enums_NestedEnum = 10
)

type xxx_Enums_NestedEnum Enums_NestedEnum

func (e Enums_NestedEnum) ProtoReflect() protoreflect.Enum {
	return (xxx_Enums_NestedEnum)(e)
}
func (e xxx_Enums_NestedEnum) Type() protoreflect.EnumType {
	return xxx_Test_ProtoFile_EnumTypes[1]
}
func (e xxx_Enums_NestedEnum) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(e)
}

var Enums_NestedEnum_name = map[int32]string{
	1:  "UNO",
	2:  "DOS",
	10: "DIEZ",
}

var Enums_NestedEnum_value = map[string]int32{
	"UNO":  1,
	"DOS":  2,
	"DIEZ": 10,
}

func (x Enums_NestedEnum) Enum() *Enums_NestedEnum {
	p := new(Enums_NestedEnum)
	*p = x
	return p
}

func (x Enums_NestedEnum) String() string {
	return proto.EnumName(Enums_NestedEnum_name, int32(x))
}

func (x *Enums_NestedEnum) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(Enums_NestedEnum_value, data, "Enums_NestedEnum")
	if err != nil {
		return err
	}
	*x = Enums_NestedEnum(value)
	return nil
}

func (Enums_NestedEnum) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{2, 0}
}

// Scalars contains optional scalar fields.
type Scalars struct {
	OptBool              *bool    `protobuf:"varint,1,opt,name=opt_bool,json=optBool" json:"opt_bool,omitempty"`
	OptInt32             *int32   `protobuf:"varint,2,opt,name=opt_int32,json=optInt32" json:"opt_int32,omitempty"`
	OptInt64             *int64   `protobuf:"varint,3,opt,name=opt_int64,json=optInt64" json:"opt_int64,omitempty"`
	OptUint32            *uint32  `protobuf:"varint,4,opt,name=opt_uint32,json=optUint32" json:"opt_uint32,omitempty"`
	OptUint64            *uint64  `protobuf:"varint,5,opt,name=opt_uint64,json=optUint64" json:"opt_uint64,omitempty"`
	OptSint32            *int32   `protobuf:"zigzag32,6,opt,name=opt_sint32,json=optSint32" json:"opt_sint32,omitempty"`
	OptSint64            *int64   `protobuf:"zigzag64,7,opt,name=opt_sint64,json=optSint64" json:"opt_sint64,omitempty"`
	OptFixed32           *uint32  `protobuf:"fixed32,8,opt,name=opt_fixed32,json=optFixed32" json:"opt_fixed32,omitempty"`
	OptFixed64           *uint64  `protobuf:"fixed64,9,opt,name=opt_fixed64,json=optFixed64" json:"opt_fixed64,omitempty"`
	OptSfixed32          *int32   `protobuf:"fixed32,10,opt,name=opt_sfixed32,json=optSfixed32" json:"opt_sfixed32,omitempty"`
	OptSfixed64          *int64   `protobuf:"fixed64,11,opt,name=opt_sfixed64,json=optSfixed64" json:"opt_sfixed64,omitempty"`
	OptFloat             *float32 `protobuf:"fixed32,20,opt,name=opt_float,json=optFloat" json:"opt_float,omitempty"`
	OptDouble            *float64 `protobuf:"fixed64,21,opt,name=opt_double,json=optDouble" json:"opt_double,omitempty"`
	OptBytes             []byte   `protobuf:"bytes,14,opt,name=opt_bytes,json=optBytes" json:"opt_bytes,omitempty"`
	OptString            *string  `protobuf:"bytes,13,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_Scalars struct{ m *Scalars }

func (m *Scalars) ProtoReflect() protoreflect.Message {
	return xxx_Scalars{m}
}
func (m xxx_Scalars) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[0].Type
}
func (m xxx_Scalars) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
}
func (m xxx_Scalars) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
}
func (m xxx_Scalars) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Scalars) Reset()         { *m = Scalars{} }
func (m *Scalars) String() string { return proto.CompactTextString(m) }
func (*Scalars) ProtoMessage()    {}
func (*Scalars) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{0}
}

func (m *Scalars) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Scalars.Unmarshal(m, b)
}
func (m *Scalars) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Scalars.Marshal(b, m, deterministic)
}
func (m *Scalars) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Scalars.Merge(m, src)
}
func (m *Scalars) XXX_Size() int {
	return xxx_messageInfo_Scalars.Size(m)
}
func (m *Scalars) XXX_DiscardUnknown() {
	xxx_messageInfo_Scalars.DiscardUnknown(m)
}

var xxx_messageInfo_Scalars proto.InternalMessageInfo

func (m *Scalars) GetOptBool() bool {
	if m != nil && m.OptBool != nil {
		return *m.OptBool
	}
	return false
}

func (m *Scalars) GetOptInt32() int32 {
	if m != nil && m.OptInt32 != nil {
		return *m.OptInt32
	}
	return 0
}

func (m *Scalars) GetOptInt64() int64 {
	if m != nil && m.OptInt64 != nil {
		return *m.OptInt64
	}
	return 0
}

func (m *Scalars) GetOptUint32() uint32 {
	if m != nil && m.OptUint32 != nil {
		return *m.OptUint32
	}
	return 0
}

func (m *Scalars) GetOptUint64() uint64 {
	if m != nil && m.OptUint64 != nil {
		return *m.OptUint64
	}
	return 0
}

func (m *Scalars) GetOptSint32() int32 {
	if m != nil && m.OptSint32 != nil {
		return *m.OptSint32
	}
	return 0
}

func (m *Scalars) GetOptSint64() int64 {
	if m != nil && m.OptSint64 != nil {
		return *m.OptSint64
	}
	return 0
}

func (m *Scalars) GetOptFixed32() uint32 {
	if m != nil && m.OptFixed32 != nil {
		return *m.OptFixed32
	}
	return 0
}

func (m *Scalars) GetOptFixed64() uint64 {
	if m != nil && m.OptFixed64 != nil {
		return *m.OptFixed64
	}
	return 0
}

func (m *Scalars) GetOptSfixed32() int32 {
	if m != nil && m.OptSfixed32 != nil {
		return *m.OptSfixed32
	}
	return 0
}

func (m *Scalars) GetOptSfixed64() int64 {
	if m != nil && m.OptSfixed64 != nil {
		return *m.OptSfixed64
	}
	return 0
}

func (m *Scalars) GetOptFloat() float32 {
	if m != nil && m.OptFloat != nil {
		return *m.OptFloat
	}
	return 0
}

func (m *Scalars) GetOptDouble() float64 {
	if m != nil && m.OptDouble != nil {
		return *m.OptDouble
	}
	return 0
}

func (m *Scalars) GetOptBytes() []byte {
	if m != nil {
		return m.OptBytes
	}
	return nil
}

func (m *Scalars) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

// Message contains repeated fields.
type Repeats struct {
	RptBool              []bool    `protobuf:"varint,1,rep,name=rpt_bool,json=rptBool" json:"rpt_bool,omitempty"`
	RptInt32             []int32   `protobuf:"varint,2,rep,name=rpt_int32,json=rptInt32" json:"rpt_int32,omitempty"`
	RptInt64             []int64   `protobuf:"varint,3,rep,name=rpt_int64,json=rptInt64" json:"rpt_int64,omitempty"`
	RptUint32            []uint32  `protobuf:"varint,4,rep,name=rpt_uint32,json=rptUint32" json:"rpt_uint32,omitempty"`
	RptUint64            []uint64  `protobuf:"varint,5,rep,name=rpt_uint64,json=rptUint64" json:"rpt_uint64,omitempty"`
	RptFloat             []float32 `protobuf:"fixed32,6,rep,name=rpt_float,json=rptFloat" json:"rpt_float,omitempty"`
	RptDouble            []float64 `protobuf:"fixed64,7,rep,name=rpt_double,json=rptDouble" json:"rpt_double,omitempty"`
	RptString            []string  `protobuf:"bytes,15,rep,name=rpt_string,json=rptString" json:"rpt_string,omitempty"`
	RptBytes             [][]byte  `protobuf:"bytes,14,rep,name=rpt_bytes,json=rptBytes" json:"rpt_bytes,omitempty"`
	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
	XXX_unrecognized     []byte    `json:"-"`
	XXX_sizecache        int32     `json:"-"`
}

type xxx_Repeats struct{ m *Repeats }

func (m *Repeats) ProtoReflect() protoreflect.Message {
	return xxx_Repeats{m}
}
func (m xxx_Repeats) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[1].Type
}
func (m xxx_Repeats) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
}
func (m xxx_Repeats) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
}
func (m xxx_Repeats) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Repeats) Reset()         { *m = Repeats{} }
func (m *Repeats) String() string { return proto.CompactTextString(m) }
func (*Repeats) ProtoMessage()    {}
func (*Repeats) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{1}
}

func (m *Repeats) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Repeats.Unmarshal(m, b)
}
func (m *Repeats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Repeats.Marshal(b, m, deterministic)
}
func (m *Repeats) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Repeats.Merge(m, src)
}
func (m *Repeats) XXX_Size() int {
	return xxx_messageInfo_Repeats.Size(m)
}
func (m *Repeats) XXX_DiscardUnknown() {
	xxx_messageInfo_Repeats.DiscardUnknown(m)
}

var xxx_messageInfo_Repeats proto.InternalMessageInfo

func (m *Repeats) GetRptBool() []bool {
	if m != nil {
		return m.RptBool
	}
	return nil
}

func (m *Repeats) GetRptInt32() []int32 {
	if m != nil {
		return m.RptInt32
	}
	return nil
}

func (m *Repeats) GetRptInt64() []int64 {
	if m != nil {
		return m.RptInt64
	}
	return nil
}

func (m *Repeats) GetRptUint32() []uint32 {
	if m != nil {
		return m.RptUint32
	}
	return nil
}

func (m *Repeats) GetRptUint64() []uint64 {
	if m != nil {
		return m.RptUint64
	}
	return nil
}

func (m *Repeats) GetRptFloat() []float32 {
	if m != nil {
		return m.RptFloat
	}
	return nil
}

func (m *Repeats) GetRptDouble() []float64 {
	if m != nil {
		return m.RptDouble
	}
	return nil
}

func (m *Repeats) GetRptString() []string {
	if m != nil {
		return m.RptString
	}
	return nil
}

func (m *Repeats) GetRptBytes() [][]byte {
	if m != nil {
		return m.RptBytes
	}
	return nil
}

// Message contains enum fields.
type Enums struct {
	OptEnum              *Enum              `protobuf:"varint,1,opt,name=opt_enum,json=optEnum,enum=pb2.Enum" json:"opt_enum,omitempty"`
	RptEnum              []Enum             `protobuf:"varint,2,rep,name=rpt_enum,json=rptEnum,enum=pb2.Enum" json:"rpt_enum,omitempty"`
	OptNestedEnum        *Enums_NestedEnum  `protobuf:"varint,3,opt,name=opt_nested_enum,json=optNestedEnum,enum=pb2.Enums_NestedEnum" json:"opt_nested_enum,omitempty"`
	RptNestedEnum        []Enums_NestedEnum `protobuf:"varint,4,rep,name=rpt_nested_enum,json=rptNestedEnum,enum=pb2.Enums_NestedEnum" json:"rpt_nested_enum,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

type xxx_Enums struct{ m *Enums }

func (m *Enums) ProtoReflect() protoreflect.Message {
	return xxx_Enums{m}
}
func (m xxx_Enums) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[2].Type
}
func (m xxx_Enums) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[2].KnownFieldsOf(m.m)
}
func (m xxx_Enums) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[2].UnknownFieldsOf(m.m)
}
func (m xxx_Enums) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Enums) Reset()         { *m = Enums{} }
func (m *Enums) String() string { return proto.CompactTextString(m) }
func (*Enums) ProtoMessage()    {}
func (*Enums) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{2}
}

func (m *Enums) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Enums.Unmarshal(m, b)
}
func (m *Enums) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Enums.Marshal(b, m, deterministic)
}
func (m *Enums) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Enums.Merge(m, src)
}
func (m *Enums) XXX_Size() int {
	return xxx_messageInfo_Enums.Size(m)
}
func (m *Enums) XXX_DiscardUnknown() {
	xxx_messageInfo_Enums.DiscardUnknown(m)
}

var xxx_messageInfo_Enums proto.InternalMessageInfo

func (m *Enums) GetOptEnum() Enum {
	if m != nil && m.OptEnum != nil {
		return *m.OptEnum
	}
	return Enum_UNKNOWN
}

func (m *Enums) GetRptEnum() []Enum {
	if m != nil {
		return m.RptEnum
	}
	return nil
}

func (m *Enums) GetOptNestedEnum() Enums_NestedEnum {
	if m != nil && m.OptNestedEnum != nil {
		return *m.OptNestedEnum
	}
	return Enums_UNO
}

func (m *Enums) GetRptNestedEnum() []Enums_NestedEnum {
	if m != nil {
		return m.RptNestedEnum
	}
	return nil
}

// Message contains message and group fields.
type Nests struct {
	OptNested            *Nested           `protobuf:"bytes,1,opt,name=opt_nested,json=optNested" json:"opt_nested,omitempty"`
	Optgroup             *Nests_OptGroup   `protobuf:"group,2,opt,name=OptGroup,json=optgroup" json:"optgroup,omitempty"`
	RptNested            []*Nested         `protobuf:"bytes,3,rep,name=rpt_nested,json=rptNested" json:"rpt_nested,omitempty"`
	Rptgroup             []*Nests_RptGroup `protobuf:"group,4,rep,name=RptGroup,json=rptgroup" json:"rptgroup,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

type xxx_Nests struct{ m *Nests }

func (m *Nests) ProtoReflect() protoreflect.Message {
	return xxx_Nests{m}
}
func (m xxx_Nests) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[3].Type
}
func (m xxx_Nests) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[3].KnownFieldsOf(m.m)
}
func (m xxx_Nests) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[3].UnknownFieldsOf(m.m)
}
func (m xxx_Nests) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Nests) Reset()         { *m = Nests{} }
func (m *Nests) String() string { return proto.CompactTextString(m) }
func (*Nests) ProtoMessage()    {}
func (*Nests) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{3}
}

func (m *Nests) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nests.Unmarshal(m, b)
}
func (m *Nests) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nests.Marshal(b, m, deterministic)
}
func (m *Nests) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nests.Merge(m, src)
}
func (m *Nests) XXX_Size() int {
	return xxx_messageInfo_Nests.Size(m)
}
func (m *Nests) XXX_DiscardUnknown() {
	xxx_messageInfo_Nests.DiscardUnknown(m)
}

var xxx_messageInfo_Nests proto.InternalMessageInfo

func (m *Nests) GetOptNested() *Nested {
	if m != nil {
		return m.OptNested
	}
	return nil
}

func (m *Nests) GetOptgroup() *Nests_OptGroup {
	if m != nil {
		return m.Optgroup
	}
	return nil
}

func (m *Nests) GetRptNested() []*Nested {
	if m != nil {
		return m.RptNested
	}
	return nil
}

func (m *Nests) GetRptgroup() []*Nests_RptGroup {
	if m != nil {
		return m.Rptgroup
	}
	return nil
}

// Message type used as submessage.
type Nested struct {
	OptString            *string  `protobuf:"bytes,1,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	OptNested            *Nested  `protobuf:"bytes,2,opt,name=opt_nested,json=optNested" json:"opt_nested,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_Nested struct{ m *Nested }

func (m *Nested) ProtoReflect() protoreflect.Message {
	return xxx_Nested{m}
}
func (m xxx_Nested) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[4].Type
}
func (m xxx_Nested) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[4].KnownFieldsOf(m.m)
}
func (m xxx_Nested) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[4].UnknownFieldsOf(m.m)
}
func (m xxx_Nested) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Nested) Reset()         { *m = Nested{} }
func (m *Nested) String() string { return proto.CompactTextString(m) }
func (*Nested) ProtoMessage()    {}
func (*Nested) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{4}
}

func (m *Nested) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nested.Unmarshal(m, b)
}
func (m *Nested) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nested.Marshal(b, m, deterministic)
}
func (m *Nested) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nested.Merge(m, src)
}
func (m *Nested) XXX_Size() int {
	return xxx_messageInfo_Nested.Size(m)
}
func (m *Nested) XXX_DiscardUnknown() {
	xxx_messageInfo_Nested.DiscardUnknown(m)
}

var xxx_messageInfo_Nested proto.InternalMessageInfo

func (m *Nested) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

func (m *Nested) GetOptNested() *Nested {
	if m != nil {
		return m.OptNested
	}
	return nil
}

// Message contains required fields.
type Requireds struct {
	ReqBool              *bool    `protobuf:"varint,1,req,name=req_bool,json=reqBool" json:"req_bool,omitempty"`
	ReqFixed32           *uint32  `protobuf:"fixed32,2,req,name=req_fixed32,json=reqFixed32" json:"req_fixed32,omitempty"`
	ReqFixed64           *uint64  `protobuf:"fixed64,3,req,name=req_fixed64,json=reqFixed64" json:"req_fixed64,omitempty"`
	ReqSfixed32          *int32   `protobuf:"fixed32,4,req,name=req_sfixed32,json=reqSfixed32" json:"req_sfixed32,omitempty"`
	ReqSfixed64          *int64   `protobuf:"fixed64,5,req,name=req_sfixed64,json=reqSfixed64" json:"req_sfixed64,omitempty"`
	ReqFloat             *float32 `protobuf:"fixed32,6,req,name=req_float,json=reqFloat" json:"req_float,omitempty"`
	ReqDouble            *float64 `protobuf:"fixed64,7,req,name=req_double,json=reqDouble" json:"req_double,omitempty"`
	ReqString            *string  `protobuf:"bytes,8,req,name=req_string,json=reqString" json:"req_string,omitempty"`
	ReqBytes             []byte   `protobuf:"bytes,9,req,name=req_bytes,json=reqBytes" json:"req_bytes,omitempty"`
	ReqEnum              *Enum    `protobuf:"varint,10,req,name=req_enum,json=reqEnum,enum=pb2.Enum" json:"req_enum,omitempty"`
	ReqNested            *Nested  `protobuf:"bytes,11,req,name=req_nested,json=reqNested" json:"req_nested,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_Requireds struct{ m *Requireds }

func (m *Requireds) ProtoReflect() protoreflect.Message {
	return xxx_Requireds{m}
}
func (m xxx_Requireds) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[5].Type
}
func (m xxx_Requireds) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[5].KnownFieldsOf(m.m)
}
func (m xxx_Requireds) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[5].UnknownFieldsOf(m.m)
}
func (m xxx_Requireds) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Requireds) Reset()         { *m = Requireds{} }
func (m *Requireds) String() string { return proto.CompactTextString(m) }
func (*Requireds) ProtoMessage()    {}
func (*Requireds) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{5}
}

func (m *Requireds) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Requireds.Unmarshal(m, b)
}
func (m *Requireds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Requireds.Marshal(b, m, deterministic)
}
func (m *Requireds) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Requireds.Merge(m, src)
}
func (m *Requireds) XXX_Size() int {
	return xxx_messageInfo_Requireds.Size(m)
}
func (m *Requireds) XXX_DiscardUnknown() {
	xxx_messageInfo_Requireds.DiscardUnknown(m)
}

var xxx_messageInfo_Requireds proto.InternalMessageInfo

func (m *Requireds) GetReqBool() bool {
	if m != nil && m.ReqBool != nil {
		return *m.ReqBool
	}
	return false
}

func (m *Requireds) GetReqFixed32() uint32 {
	if m != nil && m.ReqFixed32 != nil {
		return *m.ReqFixed32
	}
	return 0
}

func (m *Requireds) GetReqFixed64() uint64 {
	if m != nil && m.ReqFixed64 != nil {
		return *m.ReqFixed64
	}
	return 0
}

func (m *Requireds) GetReqSfixed32() int32 {
	if m != nil && m.ReqSfixed32 != nil {
		return *m.ReqSfixed32
	}
	return 0
}

func (m *Requireds) GetReqSfixed64() int64 {
	if m != nil && m.ReqSfixed64 != nil {
		return *m.ReqSfixed64
	}
	return 0
}

func (m *Requireds) GetReqFloat() float32 {
	if m != nil && m.ReqFloat != nil {
		return *m.ReqFloat
	}
	return 0
}

func (m *Requireds) GetReqDouble() float64 {
	if m != nil && m.ReqDouble != nil {
		return *m.ReqDouble
	}
	return 0
}

func (m *Requireds) GetReqString() string {
	if m != nil && m.ReqString != nil {
		return *m.ReqString
	}
	return ""
}

func (m *Requireds) GetReqBytes() []byte {
	if m != nil {
		return m.ReqBytes
	}
	return nil
}

func (m *Requireds) GetReqEnum() Enum {
	if m != nil && m.ReqEnum != nil {
		return *m.ReqEnum
	}
	return Enum_UNKNOWN
}

func (m *Requireds) GetReqNested() *Nested {
	if m != nil {
		return m.ReqNested
	}
	return nil
}

// Message contains both required and optional fields.
type PartialRequired struct {
	ReqString            *string  `protobuf:"bytes,1,req,name=req_string,json=reqString" json:"req_string,omitempty"`
	OptString            *string  `protobuf:"bytes,2,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_PartialRequired struct{ m *PartialRequired }

func (m *PartialRequired) ProtoReflect() protoreflect.Message {
	return xxx_PartialRequired{m}
}
func (m xxx_PartialRequired) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[6].Type
}
func (m xxx_PartialRequired) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[6].KnownFieldsOf(m.m)
}
func (m xxx_PartialRequired) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[6].UnknownFieldsOf(m.m)
}
func (m xxx_PartialRequired) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *PartialRequired) Reset()         { *m = PartialRequired{} }
func (m *PartialRequired) String() string { return proto.CompactTextString(m) }
func (*PartialRequired) ProtoMessage()    {}
func (*PartialRequired) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{6}
}

func (m *PartialRequired) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_PartialRequired.Unmarshal(m, b)
}
func (m *PartialRequired) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_PartialRequired.Marshal(b, m, deterministic)
}
func (m *PartialRequired) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PartialRequired.Merge(m, src)
}
func (m *PartialRequired) XXX_Size() int {
	return xxx_messageInfo_PartialRequired.Size(m)
}
func (m *PartialRequired) XXX_DiscardUnknown() {
	xxx_messageInfo_PartialRequired.DiscardUnknown(m)
}

var xxx_messageInfo_PartialRequired proto.InternalMessageInfo

func (m *PartialRequired) GetReqString() string {
	if m != nil && m.ReqString != nil {
		return *m.ReqString
	}
	return ""
}

func (m *PartialRequired) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

// Message contains oneof field.
type Oneofs struct {
	// Types that are valid to be assigned to Union:
	//	*Oneofs_Str
	//	*Oneofs_Msg
	Union                isOneofs_Union `protobuf_oneof:"union"`
	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
	XXX_unrecognized     []byte         `json:"-"`
	XXX_sizecache        int32          `json:"-"`
}

type xxx_Oneofs struct{ m *Oneofs }

func (m *Oneofs) ProtoReflect() protoreflect.Message {
	return xxx_Oneofs{m}
}
func (m xxx_Oneofs) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[7].Type
}
func (m xxx_Oneofs) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[7].KnownFieldsOf(m.m)
}
func (m xxx_Oneofs) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[7].UnknownFieldsOf(m.m)
}
func (m xxx_Oneofs) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Oneofs) Reset()         { *m = Oneofs{} }
func (m *Oneofs) String() string { return proto.CompactTextString(m) }
func (*Oneofs) ProtoMessage()    {}
func (*Oneofs) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{7}
}

func (m *Oneofs) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Oneofs.Unmarshal(m, b)
}
func (m *Oneofs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Oneofs.Marshal(b, m, deterministic)
}
func (m *Oneofs) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Oneofs.Merge(m, src)
}
func (m *Oneofs) XXX_Size() int {
	return xxx_messageInfo_Oneofs.Size(m)
}
func (m *Oneofs) XXX_DiscardUnknown() {
	xxx_messageInfo_Oneofs.DiscardUnknown(m)
}

var xxx_messageInfo_Oneofs proto.InternalMessageInfo

type isOneofs_Union interface {
	isOneofs_Union()
}

type Oneofs_Str struct {
	Str string `protobuf:"bytes,1,opt,name=str,oneof"`
}

type Oneofs_Msg struct {
	Msg *Nested `protobuf:"bytes,2,opt,name=msg,oneof"`
}

func (*Oneofs_Str) isOneofs_Union() {}

func (*Oneofs_Msg) isOneofs_Union() {}

func (m *Oneofs) GetUnion() isOneofs_Union {
	if m != nil {
		return m.Union
	}
	return nil
}

func (m *Oneofs) GetStr() string {
	if x, ok := m.GetUnion().(*Oneofs_Str); ok {
		return x.Str
	}
	return ""
}

func (m *Oneofs) GetMsg() *Nested {
	if x, ok := m.GetUnion().(*Oneofs_Msg); ok {
		return x.Msg
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Oneofs) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Oneofs_Str)(nil),
		(*Oneofs_Msg)(nil),
	}
}

// Message contains map fields.
type Maps struct {
	Int32ToStr           map[int32]string   `protobuf:"bytes,1,rep,name=int32_to_str,json=int32ToStr" json:"int32_to_str,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	Sfixed64ToBool       map[int64]bool     `protobuf:"bytes,2,rep,name=sfixed64_to_bool,json=sfixed64ToBool" json:"sfixed64_to_bool,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	BoolToUint32         map[bool]uint32    `protobuf:"bytes,3,rep,name=bool_to_uint32,json=boolToUint32" json:"bool_to_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	Uint64ToEnum         map[uint64]Enum    `protobuf:"bytes,4,rep,name=uint64_to_enum,json=uint64ToEnum" json:"uint64_to_enum,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=pb2.Enum"`
	StrToNested          map[string]*Nested `protobuf:"bytes,5,rep,name=str_to_nested,json=strToNested" json:"str_to_nested,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	StrToOneofs          map[string]*Oneofs `protobuf:"bytes,6,rep,name=str_to_oneofs,json=strToOneofs" json:"str_to_oneofs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

type xxx_Maps struct{ m *Maps }

func (m *Maps) ProtoReflect() protoreflect.Message {
	return xxx_Maps{m}
}
func (m xxx_Maps) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[8].Type
}
func (m xxx_Maps) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[8].KnownFieldsOf(m.m)
}
func (m xxx_Maps) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[8].UnknownFieldsOf(m.m)
}
func (m xxx_Maps) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Maps) Reset()         { *m = Maps{} }
func (m *Maps) String() string { return proto.CompactTextString(m) }
func (*Maps) ProtoMessage()    {}
func (*Maps) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{8}
}

func (m *Maps) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Maps.Unmarshal(m, b)
}
func (m *Maps) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Maps.Marshal(b, m, deterministic)
}
func (m *Maps) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Maps.Merge(m, src)
}
func (m *Maps) XXX_Size() int {
	return xxx_messageInfo_Maps.Size(m)
}
func (m *Maps) XXX_DiscardUnknown() {
	xxx_messageInfo_Maps.DiscardUnknown(m)
}

var xxx_messageInfo_Maps proto.InternalMessageInfo

func (m *Maps) GetInt32ToStr() map[int32]string {
	if m != nil {
		return m.Int32ToStr
	}
	return nil
}

func (m *Maps) GetSfixed64ToBool() map[int64]bool {
	if m != nil {
		return m.Sfixed64ToBool
	}
	return nil
}

func (m *Maps) GetBoolToUint32() map[bool]uint32 {
	if m != nil {
		return m.BoolToUint32
	}
	return nil
}

func (m *Maps) GetUint64ToEnum() map[uint64]Enum {
	if m != nil {
		return m.Uint64ToEnum
	}
	return nil
}

func (m *Maps) GetStrToNested() map[string]*Nested {
	if m != nil {
		return m.StrToNested
	}
	return nil
}

func (m *Maps) GetStrToOneofs() map[string]*Oneofs {
	if m != nil {
		return m.StrToOneofs
	}
	return nil
}

// Following messages are for testing required field nested in optional, repeated and map fields.
type NestedWithRequired struct {
	ReqString            *string  `protobuf:"bytes,1,req,name=req_string,json=reqString" json:"req_string,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_NestedWithRequired struct{ m *NestedWithRequired }

func (m *NestedWithRequired) ProtoReflect() protoreflect.Message {
	return xxx_NestedWithRequired{m}
}
func (m xxx_NestedWithRequired) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[9].Type
}
func (m xxx_NestedWithRequired) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[9].KnownFieldsOf(m.m)
}
func (m xxx_NestedWithRequired) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[9].UnknownFieldsOf(m.m)
}
func (m xxx_NestedWithRequired) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *NestedWithRequired) Reset()         { *m = NestedWithRequired{} }
func (m *NestedWithRequired) String() string { return proto.CompactTextString(m) }
func (*NestedWithRequired) ProtoMessage()    {}
func (*NestedWithRequired) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{9}
}

func (m *NestedWithRequired) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_NestedWithRequired.Unmarshal(m, b)
}
func (m *NestedWithRequired) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_NestedWithRequired.Marshal(b, m, deterministic)
}
func (m *NestedWithRequired) XXX_Merge(src proto.Message) {
	xxx_messageInfo_NestedWithRequired.Merge(m, src)
}
func (m *NestedWithRequired) XXX_Size() int {
	return xxx_messageInfo_NestedWithRequired.Size(m)
}
func (m *NestedWithRequired) XXX_DiscardUnknown() {
	xxx_messageInfo_NestedWithRequired.DiscardUnknown(m)
}

var xxx_messageInfo_NestedWithRequired proto.InternalMessageInfo

func (m *NestedWithRequired) GetReqString() string {
	if m != nil && m.ReqString != nil {
		return *m.ReqString
	}
	return ""
}

type IndirectRequired struct {
	OptNested            *NestedWithRequired            `protobuf:"bytes,1,opt,name=opt_nested,json=optNested" json:"opt_nested,omitempty"`
	RptNested            []*NestedWithRequired          `protobuf:"bytes,2,rep,name=rpt_nested,json=rptNested" json:"rpt_nested,omitempty"`
	StrToNested          map[string]*NestedWithRequired `protobuf:"bytes,3,rep,name=str_to_nested,json=strToNested" json:"str_to_nested,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

type xxx_IndirectRequired struct{ m *IndirectRequired }

func (m *IndirectRequired) ProtoReflect() protoreflect.Message {
	return xxx_IndirectRequired{m}
}
func (m xxx_IndirectRequired) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[10].Type
}
func (m xxx_IndirectRequired) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[10].KnownFieldsOf(m.m)
}
func (m xxx_IndirectRequired) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[10].UnknownFieldsOf(m.m)
}
func (m xxx_IndirectRequired) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *IndirectRequired) Reset()         { *m = IndirectRequired{} }
func (m *IndirectRequired) String() string { return proto.CompactTextString(m) }
func (*IndirectRequired) ProtoMessage()    {}
func (*IndirectRequired) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{10}
}

func (m *IndirectRequired) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_IndirectRequired.Unmarshal(m, b)
}
func (m *IndirectRequired) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_IndirectRequired.Marshal(b, m, deterministic)
}
func (m *IndirectRequired) XXX_Merge(src proto.Message) {
	xxx_messageInfo_IndirectRequired.Merge(m, src)
}
func (m *IndirectRequired) XXX_Size() int {
	return xxx_messageInfo_IndirectRequired.Size(m)
}
func (m *IndirectRequired) XXX_DiscardUnknown() {
	xxx_messageInfo_IndirectRequired.DiscardUnknown(m)
}

var xxx_messageInfo_IndirectRequired proto.InternalMessageInfo

func (m *IndirectRequired) GetOptNested() *NestedWithRequired {
	if m != nil {
		return m.OptNested
	}
	return nil
}

func (m *IndirectRequired) GetRptNested() []*NestedWithRequired {
	if m != nil {
		return m.RptNested
	}
	return nil
}

func (m *IndirectRequired) GetStrToNested() map[string]*NestedWithRequired {
	if m != nil {
		return m.StrToNested
	}
	return nil
}

// Message contains well-known type fields.
type KnownTypes struct {
	OptBool              *wrappers.BoolValue   `protobuf:"bytes,1,opt,name=opt_bool,json=optBool" json:"opt_bool,omitempty"`
	OptInt32             *wrappers.Int32Value  `protobuf:"bytes,2,opt,name=opt_int32,json=optInt32" json:"opt_int32,omitempty"`
	OptInt64             *wrappers.Int64Value  `protobuf:"bytes,3,opt,name=opt_int64,json=optInt64" json:"opt_int64,omitempty"`
	OptUint32            *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=opt_uint32,json=optUint32" json:"opt_uint32,omitempty"`
	OptUint64            *wrappers.UInt64Value `protobuf:"bytes,5,opt,name=opt_uint64,json=optUint64" json:"opt_uint64,omitempty"`
	OptFloat             *wrappers.FloatValue  `protobuf:"bytes,6,opt,name=opt_float,json=optFloat" json:"opt_float,omitempty"`
	OptDouble            *wrappers.DoubleValue `protobuf:"bytes,7,opt,name=opt_double,json=optDouble" json:"opt_double,omitempty"`
	OptString            *wrappers.StringValue `protobuf:"bytes,8,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	OptBytes             *wrappers.BytesValue  `protobuf:"bytes,9,opt,name=opt_bytes,json=optBytes" json:"opt_bytes,omitempty"`
	OptDuration          *duration.Duration    `protobuf:"bytes,20,opt,name=opt_duration,json=optDuration" json:"opt_duration,omitempty"`
	OptTimestamp         *timestamp.Timestamp  `protobuf:"bytes,21,opt,name=opt_timestamp,json=optTimestamp" json:"opt_timestamp,omitempty"`
	OptStruct            *_struct.Struct       `protobuf:"bytes,25,opt,name=opt_struct,json=optStruct" json:"opt_struct,omitempty"`
	OptList              *_struct.ListValue    `protobuf:"bytes,26,opt,name=opt_list,json=optList" json:"opt_list,omitempty"`
	OptValue             *_struct.Value        `protobuf:"bytes,27,opt,name=opt_value,json=optValue" json:"opt_value,omitempty"`
	OptEmpty             *empty.Empty          `protobuf:"bytes,30,opt,name=opt_empty,json=optEmpty" json:"opt_empty,omitempty"`
	OptAny               *any.Any              `protobuf:"bytes,32,opt,name=opt_any,json=optAny" json:"opt_any,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

type xxx_KnownTypes struct{ m *KnownTypes }

func (m *KnownTypes) ProtoReflect() protoreflect.Message {
	return xxx_KnownTypes{m}
}
func (m xxx_KnownTypes) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[11].Type
}
func (m xxx_KnownTypes) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[11].KnownFieldsOf(m.m)
}
func (m xxx_KnownTypes) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[11].UnknownFieldsOf(m.m)
}
func (m xxx_KnownTypes) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *KnownTypes) Reset()         { *m = KnownTypes{} }
func (m *KnownTypes) String() string { return proto.CompactTextString(m) }
func (*KnownTypes) ProtoMessage()    {}
func (*KnownTypes) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{11}
}

func (m *KnownTypes) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_KnownTypes.Unmarshal(m, b)
}
func (m *KnownTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_KnownTypes.Marshal(b, m, deterministic)
}
func (m *KnownTypes) XXX_Merge(src proto.Message) {
	xxx_messageInfo_KnownTypes.Merge(m, src)
}
func (m *KnownTypes) XXX_Size() int {
	return xxx_messageInfo_KnownTypes.Size(m)
}
func (m *KnownTypes) XXX_DiscardUnknown() {
	xxx_messageInfo_KnownTypes.DiscardUnknown(m)
}

var xxx_messageInfo_KnownTypes proto.InternalMessageInfo

func (m *KnownTypes) GetOptBool() *wrappers.BoolValue {
	if m != nil {
		return m.OptBool
	}
	return nil
}

func (m *KnownTypes) GetOptInt32() *wrappers.Int32Value {
	if m != nil {
		return m.OptInt32
	}
	return nil
}

func (m *KnownTypes) GetOptInt64() *wrappers.Int64Value {
	if m != nil {
		return m.OptInt64
	}
	return nil
}

func (m *KnownTypes) GetOptUint32() *wrappers.UInt32Value {
	if m != nil {
		return m.OptUint32
	}
	return nil
}

func (m *KnownTypes) GetOptUint64() *wrappers.UInt64Value {
	if m != nil {
		return m.OptUint64
	}
	return nil
}

func (m *KnownTypes) GetOptFloat() *wrappers.FloatValue {
	if m != nil {
		return m.OptFloat
	}
	return nil
}

func (m *KnownTypes) GetOptDouble() *wrappers.DoubleValue {
	if m != nil {
		return m.OptDouble
	}
	return nil
}

func (m *KnownTypes) GetOptString() *wrappers.StringValue {
	if m != nil {
		return m.OptString
	}
	return nil
}

func (m *KnownTypes) GetOptBytes() *wrappers.BytesValue {
	if m != nil {
		return m.OptBytes
	}
	return nil
}

func (m *KnownTypes) GetOptDuration() *duration.Duration {
	if m != nil {
		return m.OptDuration
	}
	return nil
}

func (m *KnownTypes) GetOptTimestamp() *timestamp.Timestamp {
	if m != nil {
		return m.OptTimestamp
	}
	return nil
}

func (m *KnownTypes) GetOptStruct() *_struct.Struct {
	if m != nil {
		return m.OptStruct
	}
	return nil
}

func (m *KnownTypes) GetOptList() *_struct.ListValue {
	if m != nil {
		return m.OptList
	}
	return nil
}

func (m *KnownTypes) GetOptValue() *_struct.Value {
	if m != nil {
		return m.OptValue
	}
	return nil
}

func (m *KnownTypes) GetOptEmpty() *empty.Empty {
	if m != nil {
		return m.OptEmpty
	}
	return nil
}

func (m *KnownTypes) GetOptAny() *any.Any {
	if m != nil {
		return m.OptAny
	}
	return nil
}

type Nests_OptGroup struct {
	OptBool              *bool                          `protobuf:"varint,1,opt,name=opt_bool,json=optBool" json:"opt_bool,omitempty"`
	OptString            *string                        `protobuf:"bytes,2,opt,name=opt_string,json=optString" json:"opt_string,omitempty"`
	OptNested            *Nested                        `protobuf:"bytes,3,opt,name=opt_nested,json=optNested" json:"opt_nested,omitempty"`
	Optnestedgroup       *Nests_OptGroup_OptNestedGroup `protobuf:"group,4,opt,name=OptNestedGroup,json=optnestedgroup" json:"optnestedgroup,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

type xxx_Nests_OptGroup struct{ m *Nests_OptGroup }

func (m *Nests_OptGroup) ProtoReflect() protoreflect.Message {
	return xxx_Nests_OptGroup{m}
}
func (m xxx_Nests_OptGroup) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[12].Type
}
func (m xxx_Nests_OptGroup) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[12].KnownFieldsOf(m.m)
}
func (m xxx_Nests_OptGroup) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[12].UnknownFieldsOf(m.m)
}
func (m xxx_Nests_OptGroup) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Nests_OptGroup) Reset()         { *m = Nests_OptGroup{} }
func (m *Nests_OptGroup) String() string { return proto.CompactTextString(m) }
func (*Nests_OptGroup) ProtoMessage()    {}
func (*Nests_OptGroup) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{3, 0}
}

func (m *Nests_OptGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nests_OptGroup.Unmarshal(m, b)
}
func (m *Nests_OptGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nests_OptGroup.Marshal(b, m, deterministic)
}
func (m *Nests_OptGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nests_OptGroup.Merge(m, src)
}
func (m *Nests_OptGroup) XXX_Size() int {
	return xxx_messageInfo_Nests_OptGroup.Size(m)
}
func (m *Nests_OptGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_Nests_OptGroup.DiscardUnknown(m)
}

var xxx_messageInfo_Nests_OptGroup proto.InternalMessageInfo

func (m *Nests_OptGroup) GetOptBool() bool {
	if m != nil && m.OptBool != nil {
		return *m.OptBool
	}
	return false
}

func (m *Nests_OptGroup) GetOptString() string {
	if m != nil && m.OptString != nil {
		return *m.OptString
	}
	return ""
}

func (m *Nests_OptGroup) GetOptNested() *Nested {
	if m != nil {
		return m.OptNested
	}
	return nil
}

func (m *Nests_OptGroup) GetOptnestedgroup() *Nests_OptGroup_OptNestedGroup {
	if m != nil {
		return m.Optnestedgroup
	}
	return nil
}

type Nests_RptGroup struct {
	RptBool              []bool   `protobuf:"varint,1,rep,name=rpt_bool,json=rptBool" json:"rpt_bool,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_Nests_RptGroup struct{ m *Nests_RptGroup }

func (m *Nests_RptGroup) ProtoReflect() protoreflect.Message {
	return xxx_Nests_RptGroup{m}
}
func (m xxx_Nests_RptGroup) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[13].Type
}
func (m xxx_Nests_RptGroup) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[13].KnownFieldsOf(m.m)
}
func (m xxx_Nests_RptGroup) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[13].UnknownFieldsOf(m.m)
}
func (m xxx_Nests_RptGroup) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Nests_RptGroup) Reset()         { *m = Nests_RptGroup{} }
func (m *Nests_RptGroup) String() string { return proto.CompactTextString(m) }
func (*Nests_RptGroup) ProtoMessage()    {}
func (*Nests_RptGroup) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{3, 1}
}

func (m *Nests_RptGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nests_RptGroup.Unmarshal(m, b)
}
func (m *Nests_RptGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nests_RptGroup.Marshal(b, m, deterministic)
}
func (m *Nests_RptGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nests_RptGroup.Merge(m, src)
}
func (m *Nests_RptGroup) XXX_Size() int {
	return xxx_messageInfo_Nests_RptGroup.Size(m)
}
func (m *Nests_RptGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_Nests_RptGroup.DiscardUnknown(m)
}

var xxx_messageInfo_Nests_RptGroup proto.InternalMessageInfo

func (m *Nests_RptGroup) GetRptBool() []bool {
	if m != nil {
		return m.RptBool
	}
	return nil
}

type Nests_OptGroup_OptNestedGroup struct {
	OptEnum              *Enum    `protobuf:"varint,1,opt,name=opt_enum,json=optEnum,enum=pb2.Enum" json:"opt_enum,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_Nests_OptGroup_OptNestedGroup struct {
	m *Nests_OptGroup_OptNestedGroup
}

func (m *Nests_OptGroup_OptNestedGroup) ProtoReflect() protoreflect.Message {
	return xxx_Nests_OptGroup_OptNestedGroup{m}
}
func (m xxx_Nests_OptGroup_OptNestedGroup) Type() protoreflect.MessageType {
	return xxx_Test_ProtoFile_MessageTypes[14].Type
}
func (m xxx_Nests_OptGroup_OptNestedGroup) KnownFields() protoreflect.KnownFields {
	return xxx_Test_ProtoFile_MessageTypes[14].KnownFieldsOf(m.m)
}
func (m xxx_Nests_OptGroup_OptNestedGroup) UnknownFields() protoreflect.UnknownFields {
	return xxx_Test_ProtoFile_MessageTypes[14].UnknownFieldsOf(m.m)
}
func (m xxx_Nests_OptGroup_OptNestedGroup) Interface() protoreflect.ProtoMessage {
	return m.m
}

func (m *Nests_OptGroup_OptNestedGroup) Reset()         { *m = Nests_OptGroup_OptNestedGroup{} }
func (m *Nests_OptGroup_OptNestedGroup) String() string { return proto.CompactTextString(m) }
func (*Nests_OptGroup_OptNestedGroup) ProtoMessage()    {}
func (*Nests_OptGroup_OptNestedGroup) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8d7acc1bcec9a72, []int{3, 0, 0}
}

func (m *Nests_OptGroup_OptNestedGroup) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Nests_OptGroup_OptNestedGroup.Unmarshal(m, b)
}
func (m *Nests_OptGroup_OptNestedGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Nests_OptGroup_OptNestedGroup.Marshal(b, m, deterministic)
}
func (m *Nests_OptGroup_OptNestedGroup) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Nests_OptGroup_OptNestedGroup.Merge(m, src)
}
func (m *Nests_OptGroup_OptNestedGroup) XXX_Size() int {
	return xxx_messageInfo_Nests_OptGroup_OptNestedGroup.Size(m)
}
func (m *Nests_OptGroup_OptNestedGroup) XXX_DiscardUnknown() {
	xxx_messageInfo_Nests_OptGroup_OptNestedGroup.DiscardUnknown(m)
}

var xxx_messageInfo_Nests_OptGroup_OptNestedGroup proto.InternalMessageInfo

func (m *Nests_OptGroup_OptNestedGroup) GetOptEnum() Enum {
	if m != nil && m.OptEnum != nil {
		return *m.OptEnum
	}
	return Enum_UNKNOWN
}

func init() {
	proto.RegisterFile("encoding/textpb/testprotos/pb2/test.proto", fileDescriptor_c8d7acc1bcec9a72)
	proto.RegisterEnum("pb2.Enum", Enum_name, Enum_value)
	proto.RegisterEnum("pb2.Enums_NestedEnum", Enums_NestedEnum_name, Enums_NestedEnum_value)
	proto.RegisterType((*Scalars)(nil), "pb2.Scalars")
	proto.RegisterType((*Repeats)(nil), "pb2.Repeats")
	proto.RegisterType((*Enums)(nil), "pb2.Enums")
	proto.RegisterType((*Nests)(nil), "pb2.Nests")
	proto.RegisterType((*Nested)(nil), "pb2.Nested")
	proto.RegisterType((*Requireds)(nil), "pb2.Requireds")
	proto.RegisterType((*PartialRequired)(nil), "pb2.PartialRequired")
	proto.RegisterType((*Oneofs)(nil), "pb2.Oneofs")
	proto.RegisterType((*Maps)(nil), "pb2.Maps")
	proto.RegisterMapType((map[bool]uint32)(nil), "pb2.Maps.BoolToUint32Entry")
	proto.RegisterMapType((map[int32]string)(nil), "pb2.Maps.Int32ToStrEntry")
	proto.RegisterMapType((map[int64]bool)(nil), "pb2.Maps.Sfixed64ToBoolEntry")
	proto.RegisterMapType((map[string]*Nested)(nil), "pb2.Maps.StrToNestedEntry")
	proto.RegisterMapType((map[string]*Oneofs)(nil), "pb2.Maps.StrToOneofsEntry")
	proto.RegisterMapType((map[uint64]Enum)(nil), "pb2.Maps.Uint64ToEnumEntry")
	proto.RegisterType((*NestedWithRequired)(nil), "pb2.NestedWithRequired")
	proto.RegisterType((*IndirectRequired)(nil), "pb2.IndirectRequired")
	proto.RegisterMapType((map[string]*NestedWithRequired)(nil), "pb2.IndirectRequired.StrToNestedEntry")
	proto.RegisterType((*KnownTypes)(nil), "pb2.KnownTypes")
	proto.RegisterType((*Nests_OptGroup)(nil), "pb2.Nests.OptGroup")
	proto.RegisterType((*Nests_RptGroup)(nil), "pb2.Nests.RptGroup")
	proto.RegisterType((*Nests_OptGroup_OptNestedGroup)(nil), "pb2.Nests.OptGroup.OptNestedGroup")
}

var fileDescriptor_c8d7acc1bcec9a72 = []byte{
	// 1629 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x58, 0xdd, 0x6e, 0xdb, 0x46,
	0x16, 0x0e, 0x49, 0xfd, 0x8e, 0xfc, 0xa3, 0x30, 0xc9, 0xae, 0x2c, 0x27, 0x31, 0x23, 0x64, 0x17,
	0xdc, 0x00, 0x91, 0x00, 0x59, 0x11, 0x8c, 0x75, 0x7e, 0x60, 0xaf, 0xed, 0xc4, 0xc9, 0xd6, 0x2e,
	0x28, 0xb9, 0x01, 0x72, 0x63, 0x48, 0xd6, 0x58, 0x21, 0x2a, 0x71, 0xa8, 0xe1, 0x30, 0x89, 0xde,
	0xa3, 0xcf, 0xd0, 0x3e, 0x44, 0xdf, 0xa4, 0x2f, 0xd1, 0x9b, 0x5e, 0x14, 0xe8, 0x4d, 0x71, 0x66,
	0x38, 0xe4, 0x90, 0x92, 0x0c, 0xdf, 0x71, 0xe6, 0x9c, 0xef, 0x9b, 0x99, 0xf3, 0xab, 0x23, 0xf4,
	0x1f, 0xec, 0x5d, 0x91, 0x91, 0xeb, 0x8d, 0x5b, 0x0c, 0x7f, 0x63, 0xfe, 0xb0, 0xc5, 0x70, 0xc0,
	0x7c, 0x4a, 0x18, 0x09, 0x5a, 0xfe, 0xb0, 0xcd, 0x97, 0x4d, 0xbe, 0x36, 0x0d, 0x7f, 0xd8, 0xae,
	0x6f, 0x8d, 0x09, 0x19, 0x4f, 0x70, 0x8b, 0x6f, 0x0d, 0xc3, 0xeb, 0xd6, 0xc0, 0x9b, 0x0b, 0x79,
	0x7d, 0x3b, 0x2b, 0xc2, 0x53, 0x9f, 0x49, 0xe1, 0xe3, 0xac, 0x70, 0x14, 0xd2, 0x01, 0x73, 0x89,
	0x17, 0xc9, 0x1f, 0x66, 0xe5, 0x01, 0xa3, 0xe1, 0x55, 0x74, 0x74, 0x7d, 0x27, 0x2b, 0x65, 0xee,
	0x14, 0x07, 0x6c, 0x30, 0xf5, 0x57, 0xd1, 0x7f, 0xa5, 0x03, 0xdf, 0xc7, 0x34, 0x10, 0xf2, 0xc6,
	0x6f, 0x06, 0x2a, 0xf6, 0xae, 0x06, 0x93, 0x01, 0x0d, 0xcc, 0x2d, 0x54, 0x22, 0x3e, 0xbb, 0x1c,
	0x12, 0x32, 0xa9, 0x69, 0x96, 0x66, 0x97, 0x9c, 0x22, 0xf1, 0xd9, 0x21, 0x21, 0x13, 0x73, 0x1b,
	0x95, 0x41, 0xe4, 0x7a, 0x6c, 0xb7, 0x5d, 0xd3, 0x2d, 0xcd, 0xce, 0x3b, 0xa0, 0x7b, 0x0a, 0x6b,
	0x45, 0xd8, 0xed, 0xd4, 0x0c, 0x4b, 0xb3, 0x0d, 0x29, 0xec, 0x76, 0xcc, 0x47, 0x08, 0x81, 0x30,
	0x14, 0xd0, 0x9c, 0xa5, 0xd9, 0xeb, 0x0e, 0xa8, 0x5f, 0xf0, 0x0d, 0x55, 0xdc, 0xed, 0xd4, 0xf2,
	0x96, 0x66, 0xe7, 0x62, 0x71, 0x82, 0x0e, 0x04, 0xba, 0x60, 0x69, 0xf6, 0x5d, 0x2e, 0xee, 0xa5,
	0xd0, 0x81, 0x40, 0x17, 0x2d, 0xcd, 0x36, 0x63, 0x71, 0xb7, 0x63, 0xee, 0xa0, 0x0a, 0x88, 0xaf,
	0xdd, 0x6f, 0x78, 0xb4, 0xdb, 0xae, 0x95, 0x2c, 0xcd, 0x2e, 0x3a, 0x80, 0x38, 0x11, 0x3b, 0x29,
	0x85, 0x6e, 0xa7, 0x56, 0xb6, 0x34, 0xbb, 0x90, 0x28, 0x74, 0x3b, 0xe6, 0x13, 0xb4, 0xc6, 0x0f,
	0x90, 0x14, 0xc8, 0xd2, 0xec, 0x4d, 0x07, 0x40, 0xbd, 0x68, 0x2b, 0xad, 0xd2, 0xed, 0xd4, 0x2a,
	0x96, 0x66, 0x57, 0x15, 0x95, 0x6e, 0x47, 0x1a, 0xe8, 0x7a, 0x42, 0x06, 0xac, 0x76, 0xdf, 0xd2,
	0x6c, 0x9d, 0x1b, 0xe8, 0x04, 0xd6, 0xf2, 0x0d, 0x23, 0x12, 0x0e, 0x27, 0xb8, 0xf6, 0xc0, 0xd2,
	0x6c, 0x8d, 0xbf, 0xe1, 0x88, 0x6f, 0x48, 0xec, 0x70, 0xce, 0x70, 0x50, 0xdb, 0xb0, 0x34, 0x7b,
	0x8d, 0x63, 0x0f, 0x61, 0x1d, 0xbf, 0x9f, 0x51, 0xd7, 0x1b, 0xd7, 0xd6, 0x2d, 0xcd, 0x2e, 0x8b,
	0xf7, 0xf3, 0x8d, 0xc6, 0x4f, 0x3a, 0x2a, 0x3a, 0xd8, 0xc7, 0x03, 0xc6, 0x9d, 0x4b, 0x13, 0xe7,
	0x1a, 0xe0, 0x5c, 0x9a, 0x38, 0x97, 0x2a, 0xce, 0x35, 0xc0, 0xb9, 0x54, 0x71, 0x2e, 0x55, 0x9c,
	0x6b, 0x80, 0x73, 0xa9, 0xe2, 0x5c, 0xaa, 0x3a, 0xd7, 0x00, 0xe7, 0x52, 0xd5, 0xb9, 0x54, 0x75,
	0xae, 0x01, 0xce, 0xa5, 0xb1, 0x73, 0x23, 0x6a, 0x61, 0x96, 0x82, 0x65, 0x80, 0x59, 0xa8, 0x62,
	0x16, 0x9a, 0x98, 0xa5, 0x68, 0x19, 0x60, 0x16, 0x1a, 0x9b, 0x25, 0x12, 0x47, 0x2f, 0xdf, 0xb4,
	0x0c, 0x78, 0x39, 0x95, 0x2f, 0x97, 0xd4, 0xd2, 0x6a, 0x06, 0x58, 0x8d, 0x46, 0x56, 0x6b, 0xfc,
	0xa5, 0xa1, 0xfc, 0xb1, 0x17, 0x4e, 0x03, 0xf3, 0xa9, 0x88, 0x78, 0xec, 0x85, 0x53, 0x1e, 0xf1,
	0x1b, 0xed, 0x72, 0xd3, 0x1f, 0xb6, 0x9b, 0x20, 0xe5, 0xc1, 0x0f, 0x1f, 0xa0, 0x45, 0xa5, 0x16,
	0x98, 0x27, 0xad, 0x45, 0x23, 0xad, 0x57, 0x68, 0x13, 0xb8, 0x3c, 0x1c, 0x30, 0x3c, 0x12, 0xca,
	0x06, 0xa7, 0x7c, 0x10, 0x2b, 0x07, 0xcd, 0x33, 0x2e, 0xe5, 0xc0, 0x75, 0xe2, 0xb3, 0x64, 0x09,
	0x70, 0x9a, 0x81, 0xe7, 0xf8, 0x59, 0xab, 0xe0, 0x54, 0x85, 0x37, 0x6c, 0x84, 0x14, 0xb2, 0x22,
	0x32, 0x2e, 0xce, 0xce, 0xab, 0x1a, 0x7c, 0x1c, 0x9d, 0xf7, 0xaa, 0xba, 0x59, 0x42, 0xb9, 0xa3,
	0xd3, 0xe3, 0x4f, 0x55, 0xd4, 0xf8, 0xdd, 0x40, 0x79, 0x50, 0x0d, 0xcc, 0x67, 0x22, 0x7a, 0xc4,
	0x91, 0xfc, 0xfd, 0x95, 0x76, 0x85, 0x9f, 0x26, 0xa8, 0x78, 0x28, 0x89, 0x4f, 0xb3, 0xc5, 0x2d,
	0x35, 0xa6, 0x24, 0xf4, 0x79, 0xfe, 0xa3, 0xf6, 0xbd, 0x58, 0x33, 0x68, 0x9e, 0xfb, 0xec, 0x2d,
	0x88, 0x9c, 0x58, 0x09, 0xc8, 0x93, 0xf7, 0xf0, 0xc0, 0xc9, 0x92, 0x53, 0x95, 0x9c, 0x4a, 0x72,
	0x78, 0x74, 0x9a, 0xdc, 0x89, 0xc9, 0xa5, 0x52, 0xfd, 0x0f, 0x0d, 0x95, 0xe4, 0x99, 0x37, 0x95,
	0xad, 0x74, 0x7e, 0xe8, 0x99, 0xfc, 0xc8, 0x18, 0xc0, 0xb8, 0xd1, 0x00, 0xef, 0xd1, 0x06, 0xf1,
	0x99, 0x50, 0x95, 0x37, 0x05, 0x33, 0x34, 0x96, 0x98, 0x01, 0x3e, 0x04, 0x4c, 0x5c, 0x3c, 0x83,
	0xac, 0x77, 0xd1, 0x46, 0x5a, 0xe3, 0x76, 0x81, 0x58, 0xff, 0x17, 0x2a, 0x39, 0xca, 0xab, 0x57,
	0xe4, 0xb3, 0xb3, 0x41, 0x71, 0x80, 0xe9, 0x17, 0x3c, 0xba, 0xbc, 0x76, 0xf1, 0x64, 0xd4, 0xe8,
	0xa1, 0x42, 0xf4, 0x88, 0xb4, 0x3d, 0xb4, 0x9b, 0xed, 0xa1, 0xdf, 0x64, 0x8f, 0xc6, 0x9f, 0x3a,
	0x2a, 0x3b, 0x78, 0x16, 0xba, 0x14, 0x8f, 0x44, 0x75, 0xc1, 0x33, 0x79, 0x1b, 0x9d, 0xdf, 0x06,
	0xcf, 0xb8, 0x0f, 0x76, 0x50, 0x05, 0x44, 0xb2, 0x82, 0xea, 0x96, 0x0e, 0x45, 0x98, 0xe2, 0x99,
	0x52, 0x84, 0x63, 0x05, 0x5e, 0x63, 0x74, 0x28, 0xc2, 0x52, 0x41, 0x14, 0x61, 0x50, 0x88, 0x8b,
	0x70, 0xce, 0xd2, 0xa1, 0x08, 0x53, 0x3c, 0x53, 0x8b, 0x70, 0xa2, 0xc2, 0x6b, 0x8d, 0x0e, 0x45,
	0x38, 0x56, 0x89, 0xaa, 0x0d, 0x1c, 0x13, 0x55, 0x1b, 0x9d, 0x57, 0x1b, 0x3c, 0x4b, 0xaa, 0x0d,
	0x9e, 0x25, 0xd5, 0x46, 0xe7, 0xd5, 0x06, 0xcf, 0x94, 0x6a, 0x03, 0xf4, 0xc2, 0x6e, 0x25, 0x4b,
	0xe7, 0xd5, 0x06, 0xcf, 0x94, 0x6a, 0x03, 0xaf, 0xe7, 0xd5, 0xa6, 0x6c, 0xe9, 0xbc, 0xda, 0xe0,
	0x99, 0xa8, 0xd1, 0x4f, 0x85, 0x69, 0xb8, 0x6b, 0x91, 0xa5, 0x67, 0xab, 0x07, 0x9e, 0xf1, 0x8c,
	0x7d, 0x26, 0x4e, 0x88, 0x4c, 0x5f, 0xb1, 0xf4, 0xc5, 0x74, 0xc1, 0xb3, 0xc8, 0xf4, 0xe7, 0x68,
	0xf3, 0xfb, 0x01, 0x65, 0xee, 0x60, 0x22, 0x1d, 0x90, 0xb9, 0xa0, 0x96, 0xbd, 0xe0, 0xcd, 0x79,
	0xd0, 0x38, 0x41, 0x85, 0x73, 0x0f, 0x93, 0xeb, 0xc0, 0x34, 0x91, 0x11, 0x30, 0x2a, 0x22, 0xe3,
	0xdd, 0x1d, 0x07, 0x16, 0xe6, 0x0e, 0x32, 0xa6, 0xc1, 0x78, 0x49, 0x38, 0x80, 0xc2, 0x34, 0x18,
	0x1f, 0x16, 0x51, 0x3e, 0xf4, 0x5c, 0xe2, 0x35, 0x7e, 0x2d, 0xa0, 0xdc, 0x77, 0x03, 0x3f, 0x30,
	0xf7, 0xd1, 0x1a, 0xef, 0x00, 0x97, 0x8c, 0x5c, 0x0a, 0x3e, 0x48, 0xff, 0x2d, 0x8e, 0x05, 0x85,
	0x26, 0xef, 0x2d, 0x7d, 0xd2, 0x63, 0xf4, 0xd8, 0x63, 0x74, 0xee, 0x20, 0x37, 0xde, 0x30, 0xdf,
	0xa2, 0xaa, 0xf4, 0x23, 0xe0, 0x79, 0x4c, 0xe9, 0x9c, 0xe0, 0x51, 0x42, 0x20, 0xdd, 0xda, 0x27,
	0x10, 0x64, 0x82, 0x64, 0x23, 0x48, 0x6d, 0x9a, 0x07, 0x68, 0x03, 0xc0, 0x40, 0x12, 0x75, 0x28,
	0x51, 0x86, 0xb6, 0x13, 0x1a, 0xd0, 0xeb, 0x13, 0xd1, 0xae, 0x04, 0xc9, 0xda, 0x50, 0xd9, 0x02,
	0x0a, 0xd1, 0xbd, 0x80, 0x24, 0x2e, 0xca, 0x29, 0x0a, 0xd1, 0xcc, 0xfa, 0x04, 0xdc, 0x18, 0x51,
	0x84, 0xca, 0x96, 0xf9, 0x1a, 0xad, 0x07, 0x8c, 0x02, 0x3e, 0x72, 0x6e, 0x9e, 0x33, 0xd4, 0x95,
	0xb7, 0x30, 0xda, 0x27, 0xb2, 0x7a, 0x03, 0x41, 0x25, 0x48, 0x76, 0x14, 0x3c, 0xe1, 0x3e, 0xe2,
	0x9d, 0x72, 0x11, 0x2f, 0x1c, 0xa8, 0xe2, 0xc5, 0x4e, 0xfd, 0x15, 0xda, 0xcc, 0x58, 0xdb, 0xac,
	0x22, 0xe3, 0x47, 0x3c, 0xe7, 0x5e, 0xce, 0x3b, 0xf0, 0x69, 0xde, 0x47, 0xf9, 0x2f, 0x83, 0x49,
	0x88, 0xa3, 0xd8, 0x10, 0x8b, 0xff, 0xea, 0x7b, 0x5a, 0xfd, 0x00, 0xdd, 0x5b, 0x62, 0x6b, 0x95,
	0xa2, 0xba, 0x84, 0xa2, 0xa4, 0x52, 0xbc, 0x41, 0x77, 0x17, 0xec, 0xac, 0x12, 0x94, 0x96, 0x10,
	0xac, 0xab, 0x04, 0xef, 0xd1, 0xdd, 0x05, 0x2b, 0xab, 0x04, 0x39, 0x41, 0xb0, 0xa3, 0x12, 0xa4,
	0xd2, 0x4c, 0xe1, 0xfa, 0x80, 0xaa, 0x59, 0x7b, 0xab, 0x54, 0x65, 0x41, 0xf5, 0x44, 0xa5, 0xca,
	0x64, 0xe2, 0x12, 0x32, 0xc5, 0xf8, 0xb7, 0x25, 0x13, 0x10, 0x85, 0xac, 0xb1, 0x8b, 0x4c, 0x71,
	0xc2, 0x47, 0x97, 0x7d, 0xbe, 0x65, 0x66, 0x37, 0x7e, 0xd1, 0x51, 0xf5, 0xd4, 0x1b, 0xb9, 0x14,
	0x5f, 0xb1, 0x18, 0xd3, 0x5d, 0xd2, 0xd8, 0xff, 0xa9, 0x3c, 0x41, 0x3d, 0x40, 0xed, 0x71, 0xdd,
	0x54, 0xcf, 0x16, 0x39, 0xb7, 0x1a, 0x47, 0x95, 0xde, 0x98, 0x09, 0x71, 0x91, 0x67, 0xff, 0xe6,
	0xd0, 0xec, 0xed, 0x6e, 0x0e, 0xf7, 0xfa, 0xc7, 0x5b, 0xf9, 0xe7, 0x79, 0xda, 0xa4, 0x2b, 0x2f,
	0xa9, 0x98, 0xf7, 0xe7, 0x22, 0x42, 0x1f, 0x3c, 0xf2, 0xd5, 0xeb, 0xcf, 0x7d, 0x1c, 0x98, 0x2f,
	0x32, 0xbf, 0x1a, 0x20, 0xa3, 0xc4, 0xac, 0xd4, 0x94, 0xb3, 0x12, 0xaf, 0x0e, 0x3f, 0x00, 0x41,
	0xf2, 0x8b, 0x62, 0x2f, 0x3b, 0x08, 0x41, 0x2d, 0xc8, 0xe2, 0x78, 0xbe, 0x09, 0x60, 0x32, 0x25,
	0xed, 0x65, 0xa7, 0xa4, 0x15, 0xc8, 0x6e, 0x27, 0x85, 0xec, 0x76, 0xcc, 0xfd, 0x85, 0x11, 0xaa,
	0xd2, 0x7e, 0xb8, 0x00, 0xbd, 0x50, 0x4e, 0x55, 0x06, 0xac, 0xfd, 0x85, 0x01, 0x6b, 0x15, 0x58,
	0x1e, 0xac, 0x8c, 0x5f, 0x7b, 0xea, 0xe0, 0x52, 0x58, 0x71, 0x67, 0xde, 0x41, 0x93, 0x3b, 0x8b,
	0x86, 0xba, 0x9f, 0x9a, 0x6a, 0x8a, 0x2b, 0x8e, 0x15, 0xed, 0x35, 0x39, 0x36, 0x6a, 0xb7, 0xfb,
	0xa9, 0x76, 0x55, 0x5a, 0x01, 0x16, 0x19, 0x90, 0x80, 0xa3, 0x5e, 0xb7, 0xa7, 0x0e, 0x4c, 0xe5,
	0x15, 0x77, 0xe6, 0xad, 0x39, 0xb9, 0xb3, 0xe8, 0xd4, 0x2f, 0xc5, 0x24, 0x27, 0x07, 0x70, 0x3e,
	0xa9, 0x41, 0xd7, 0x5a, 0xb8, 0x75, 0xa4, 0xc0, 0x87, 0x3c, 0xb9, 0x30, 0xdf, 0x20, 0xf8, 0x45,
	0x7f, 0x19, 0x0f, 0xe0, 0x7c, 0x94, 0x5b, 0x16, 0x55, 0x7d, 0xa9, 0xe1, 0xc0, 0x71, 0xf1, 0x4a,
	0x66, 0xad, 0x98, 0xef, 0x6b, 0x5b, 0x51, 0x60, 0x2f, 0x79, 0x75, 0x78, 0xc5, 0xe4, 0x83, 0xc3,
	0x2b, 0x26, 0x23, 0x79, 0xe2, 0x06, 0xac, 0x56, 0x5f, 0x71, 0xe6, 0xff, 0xdd, 0x80, 0x25, 0x91,
	0x0c, 0x2b, 0x73, 0x57, 0xd8, 0x49, 0xa4, 0xd1, 0x36, 0xc7, 0xfd, 0x63, 0x01, 0x97, 0x98, 0x88,
	0x7f, 0x49, 0x10, 0xff, 0x03, 0xa3, 0xf6, 0x78, 0x05, 0xe8, 0x18, 0xa4, 0x1c, 0xc4, 0xbf, 0xcc,
	0xe7, 0x08, 0x0e, 0xbd, 0x1c, 0x78, 0xf3, 0x9a, 0xc5, 0x21, 0xf7, 0x17, 0x20, 0x07, 0xde, 0xdc,
	0x29, 0x10, 0x9f, 0x1d, 0x78, 0xf3, 0x67, 0x2f, 0x50, 0x8e, 0x37, 0xce, 0x0a, 0x2a, 0x5e, 0x9c,
	0x7d, 0x38, 0x3b, 0xff, 0x78, 0x56, 0xbd, 0x63, 0x96, 0x51, 0xfe, 0xe4, 0xd4, 0xe9, 0xf5, 0xab,
	0x9a, 0x89, 0x50, 0xa1, 0x77, 0xfc, 0xbf, 0xf3, 0xb3, 0xa3, 0xaa, 0x0e, 0xdb, 0xfd, 0xe3, 0xb3,
	0xfe, 0xbb, 0x2a, 0x3a, 0x7c, 0xfd, 0xe9, 0xe5, 0xd8, 0x65, 0x9f, 0xc3, 0x61, 0xf3, 0x8a, 0x4c,
	0x5b, 0x63, 0x32, 0x19, 0x78, 0xe3, 0xe4, 0x6f, 0x8f, 0x2f, 0xed, 0xd6, 0xcd, 0x7f, 0xe8, 0xfc,
	0x1d, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x1a, 0x6e, 0x85, 0xf1, 0x11, 0x00, 0x00,
}

func init() {
	xxx_Test_ProtoFile_FileDesc.Enums = xxx_Test_ProtoFile_EnumDescs[0:1]
	xxx_Test_ProtoFile_FileDesc.Messages = xxx_Test_ProtoFile_MessageDescs[0:12]
	xxx_Test_ProtoFile_MessageDescs[2].Enums = xxx_Test_ProtoFile_EnumDescs[1:2]
	xxx_Test_ProtoFile_MessageDescs[3].Messages = xxx_Test_ProtoFile_MessageDescs[12:14]
	xxx_Test_ProtoFile_MessageDescs[8].Messages = xxx_Test_ProtoFile_MessageDescs[15:21]
	xxx_Test_ProtoFile_MessageDescs[10].Messages = xxx_Test_ProtoFile_MessageDescs[21:22]
	xxx_Test_ProtoFile_MessageDescs[12].Messages = xxx_Test_ProtoFile_MessageDescs[14:15]
	xxx_Test_ProtoFile_MessageDescs[2].Fields[0].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
	xxx_Test_ProtoFile_MessageDescs[2].Fields[1].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
	xxx_Test_ProtoFile_MessageDescs[2].Fields[2].EnumType = xxx_Test_ProtoFile_EnumTypes[1]
	xxx_Test_ProtoFile_MessageDescs[2].Fields[3].EnumType = xxx_Test_ProtoFile_EnumTypes[1]
	xxx_Test_ProtoFile_MessageDescs[3].Fields[0].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[3].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[12].Type
	xxx_Test_ProtoFile_MessageDescs[3].Fields[2].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[3].Fields[3].MessageType = xxx_Test_ProtoFile_MessageTypes[13].Type
	xxx_Test_ProtoFile_MessageDescs[4].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[5].Fields[9].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
	xxx_Test_ProtoFile_MessageDescs[5].Fields[10].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[7].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[8].Fields[0].MessageType = xxx_Test_ProtoFile_MessageDescs[15].Reference()
	xxx_Test_ProtoFile_MessageDescs[8].Fields[1].MessageType = xxx_Test_ProtoFile_MessageDescs[16].Reference()
	xxx_Test_ProtoFile_MessageDescs[8].Fields[2].MessageType = xxx_Test_ProtoFile_MessageDescs[17].Reference()
	xxx_Test_ProtoFile_MessageDescs[8].Fields[3].MessageType = xxx_Test_ProtoFile_MessageDescs[18].Reference()
	xxx_Test_ProtoFile_MessageDescs[8].Fields[4].MessageType = xxx_Test_ProtoFile_MessageDescs[19].Reference()
	xxx_Test_ProtoFile_MessageDescs[8].Fields[5].MessageType = xxx_Test_ProtoFile_MessageDescs[20].Reference()
	xxx_Test_ProtoFile_MessageDescs[10].Fields[0].MessageType = xxx_Test_ProtoFile_MessageTypes[9].Type
	xxx_Test_ProtoFile_MessageDescs[10].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[9].Type
	xxx_Test_ProtoFile_MessageDescs[10].Fields[2].MessageType = xxx_Test_ProtoFile_MessageDescs[21].Reference()
	xxx_Test_ProtoFile_MessageDescs[11].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*wrappers.BoolValue)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[1].MessageType = protoimpl.X.MessageTypeOf((*wrappers.Int32Value)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*wrappers.Int64Value)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[3].MessageType = protoimpl.X.MessageTypeOf((*wrappers.UInt32Value)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[4].MessageType = protoimpl.X.MessageTypeOf((*wrappers.UInt64Value)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[5].MessageType = protoimpl.X.MessageTypeOf((*wrappers.FloatValue)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[6].MessageType = protoimpl.X.MessageTypeOf((*wrappers.DoubleValue)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[7].MessageType = protoimpl.X.MessageTypeOf((*wrappers.StringValue)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[8].MessageType = protoimpl.X.MessageTypeOf((*wrappers.BytesValue)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[9].MessageType = protoimpl.X.MessageTypeOf((*duration.Duration)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[10].MessageType = protoimpl.X.MessageTypeOf((*timestamp.Timestamp)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[11].MessageType = protoimpl.X.MessageTypeOf((*_struct.Struct)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[12].MessageType = protoimpl.X.MessageTypeOf((*_struct.ListValue)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[13].MessageType = protoimpl.X.MessageTypeOf((*_struct.Value)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[14].MessageType = protoimpl.X.MessageTypeOf((*empty.Empty)(nil))
	xxx_Test_ProtoFile_MessageDescs[11].Fields[15].MessageType = protoimpl.X.MessageTypeOf((*any.Any)(nil))
	xxx_Test_ProtoFile_MessageDescs[12].Fields[2].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[12].Fields[3].MessageType = xxx_Test_ProtoFile_MessageTypes[14].Type
	xxx_Test_ProtoFile_MessageDescs[14].Fields[0].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
	xxx_Test_ProtoFile_MessageDescs[18].Fields[1].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
	xxx_Test_ProtoFile_MessageDescs[19].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
	xxx_Test_ProtoFile_MessageDescs[20].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[7].Type
	xxx_Test_ProtoFile_MessageDescs[21].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[9].Type
	var err error
	Test_ProtoFile, err = prototype.NewFile(&xxx_Test_ProtoFile_FileDesc)
	if err != nil {
		panic(err)
	}
}

const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)

var Test_ProtoFile protoreflect.FileDescriptor

var xxx_Test_ProtoFile_FileDesc = prototype.File{
	Syntax:  protoreflect.Proto2,
	Path:    "encoding/textpb/testprotos/pb2/test.proto",
	Package: "pb2",
	Imports: []protoreflect.FileImport{
		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/any.proto", "google.protobuf")},
		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/empty.proto", "google.protobuf")},
		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/duration.proto", "google.protobuf")},
		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/struct.proto", "google.protobuf")},
		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/timestamp.proto", "google.protobuf")},
		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/wrappers.proto", "google.protobuf")},
	},
}
var xxx_Test_ProtoFile_EnumTypes = [2]protoreflect.EnumType{
	prototype.GoEnum(
		xxx_Test_ProtoFile_EnumDescs[0].Reference(),
		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
			return Enum(n)
		},
	),
	prototype.GoEnum(
		xxx_Test_ProtoFile_EnumDescs[1].Reference(),
		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
			return Enums_NestedEnum(n)
		},
	),
}
var xxx_Test_ProtoFile_EnumDescs = [2]prototype.Enum{
	{
		Name: "Enum",
		Values: []prototype.EnumValue{
			{Name: "UNKNOWN", Number: 0},
			{Name: "FIRST", Number: 1},
			{Name: "SECOND", Number: 2},
			{Name: "TENTH", Number: 10},
		},
	},
	{
		Name: "NestedEnum",
		Values: []prototype.EnumValue{
			{Name: "UNO", Number: 1},
			{Name: "DOS", Number: 2},
			{Name: "DIEZ", Number: 10},
		},
	},
}
var xxx_Test_ProtoFile_MessageTypes = [22]protoimpl.MessageType{
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[0].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Scalars)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[1].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Repeats)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[2].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Enums)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[3].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Nests)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[4].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Nested)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[5].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Requireds)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[6].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(PartialRequired)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[7].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Oneofs)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[8].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Maps)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[9].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(NestedWithRequired)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[10].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(IndirectRequired)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[11].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(KnownTypes)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[12].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Nests_OptGroup)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[13].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Nests_RptGroup)
		},
	)},
	{Type: prototype.GoMessage(
		xxx_Test_ProtoFile_MessageDescs[14].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(Nests_OptGroup_OptNestedGroup)
		},
	)},
	{ /* no message type for Maps_Int32ToStrEntry */ },
	{ /* no message type for Maps_Sfixed64ToBoolEntry */ },
	{ /* no message type for Maps_BoolToUint32Entry */ },
	{ /* no message type for Maps_Uint64ToEnumEntry */ },
	{ /* no message type for Maps_StrToNestedEntry */ },
	{ /* no message type for Maps_StrToOneofsEntry */ },
	{ /* no message type for IndirectRequired_StrToNestedEntry */ },
}
var xxx_Test_ProtoFile_MessageDescs = [22]prototype.Message{
	{
		Name: "Scalars",
		Fields: []prototype.Field{
			{
				Name:        "opt_bool",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.BoolKind,
				JSONName:    "optBool",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_int32",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Int32Kind,
				JSONName:    "optInt32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_int64",
				Number:      3,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Int64Kind,
				JSONName:    "optInt64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_uint32",
				Number:      4,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Uint32Kind,
				JSONName:    "optUint32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_uint64",
				Number:      5,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Uint64Kind,
				JSONName:    "optUint64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_sint32",
				Number:      6,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sint32Kind,
				JSONName:    "optSint32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_sint64",
				Number:      7,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sint64Kind,
				JSONName:    "optSint64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_fixed32",
				Number:      8,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Fixed32Kind,
				JSONName:    "optFixed32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_fixed64",
				Number:      9,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Fixed64Kind,
				JSONName:    "optFixed64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_sfixed32",
				Number:      10,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sfixed32Kind,
				JSONName:    "optSfixed32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_sfixed64",
				Number:      11,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sfixed64Kind,
				JSONName:    "optSfixed64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_float",
				Number:      20,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.FloatKind,
				JSONName:    "optFloat",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_double",
				Number:      21,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.DoubleKind,
				JSONName:    "optDouble",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_bytes",
				Number:      14,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.BytesKind,
				JSONName:    "optBytes",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_string",
				Number:      13,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "optString",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "Repeats",
		Fields: []prototype.Field{
			{
				Name:        "rpt_bool",
				Number:      1,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.BoolKind,
				JSONName:    "rptBool",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_int32",
				Number:      2,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Int32Kind,
				JSONName:    "rptInt32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_int64",
				Number:      3,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Int64Kind,
				JSONName:    "rptInt64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_uint32",
				Number:      4,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Uint32Kind,
				JSONName:    "rptUint32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_uint64",
				Number:      5,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Uint64Kind,
				JSONName:    "rptUint64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_float",
				Number:      6,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.FloatKind,
				JSONName:    "rptFloat",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_double",
				Number:      7,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.DoubleKind,
				JSONName:    "rptDouble",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_string",
				Number:      15,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.StringKind,
				JSONName:    "rptString",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_bytes",
				Number:      14,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.BytesKind,
				JSONName:    "rptBytes",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "Enums",
		Fields: []prototype.Field{
			{
				Name:        "opt_enum",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.EnumKind,
				JSONName:    "optEnum",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_enum",
				Number:      2,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.EnumKind,
				JSONName:    "rptEnum",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_nested_enum",
				Number:      3,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.EnumKind,
				JSONName:    "optNestedEnum",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_nested_enum",
				Number:      4,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.EnumKind,
				JSONName:    "rptNestedEnum",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "Nests",
		Fields: []prototype.Field{
			{
				Name:        "opt_nested",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optNested",
				IsPacked:    prototype.False,
			},
			{
				Name:        "optgroup",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.GroupKind,
				JSONName:    "optgroup",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_nested",
				Number:      3,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "rptNested",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rptgroup",
				Number:      4,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.GroupKind,
				JSONName:    "rptgroup",
				IsPacked:    prototype.False,
			},
		},
		ReservedNames: []protoreflect.Name{"reserved_field"},
	},
	{
		Name: "Nested",
		Fields: []prototype.Field{
			{
				Name:        "opt_string",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "optString",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_nested",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optNested",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "Requireds",
		Fields: []prototype.Field{
			{
				Name:        "req_bool",
				Number:      1,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.BoolKind,
				JSONName:    "reqBool",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_fixed32",
				Number:      2,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.Fixed32Kind,
				JSONName:    "reqFixed32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_fixed64",
				Number:      3,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.Fixed64Kind,
				JSONName:    "reqFixed64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_sfixed32",
				Number:      4,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.Sfixed32Kind,
				JSONName:    "reqSfixed32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_sfixed64",
				Number:      5,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.Sfixed64Kind,
				JSONName:    "reqSfixed64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_float",
				Number:      6,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.FloatKind,
				JSONName:    "reqFloat",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_double",
				Number:      7,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.DoubleKind,
				JSONName:    "reqDouble",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_string",
				Number:      8,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.StringKind,
				JSONName:    "reqString",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_bytes",
				Number:      9,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.BytesKind,
				JSONName:    "reqBytes",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_enum",
				Number:      10,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.EnumKind,
				JSONName:    "reqEnum",
				IsPacked:    prototype.False,
			},
			{
				Name:        "req_nested",
				Number:      11,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.MessageKind,
				JSONName:    "reqNested",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "PartialRequired",
		Fields: []prototype.Field{
			{
				Name:        "req_string",
				Number:      1,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.StringKind,
				JSONName:    "reqString",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_string",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "optString",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "Oneofs",
		Fields: []prototype.Field{
			{
				Name:        "str",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "str",
				OneofName:   "union",
				IsPacked:    prototype.False,
			},
			{
				Name:        "msg",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "msg",
				OneofName:   "union",
				IsPacked:    prototype.False,
			},
		},
		Oneofs: []prototype.Oneof{
			{Name: "union"},
		},
	},
	{
		Name: "Maps",
		Fields: []prototype.Field{
			{
				Name:        "int32_to_str",
				Number:      1,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "int32ToStr",
				IsPacked:    prototype.False,
			},
			{
				Name:        "sfixed64_to_bool",
				Number:      2,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "sfixed64ToBool",
				IsPacked:    prototype.False,
			},
			{
				Name:        "bool_to_uint32",
				Number:      3,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "boolToUint32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "uint64_to_enum",
				Number:      4,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "uint64ToEnum",
				IsPacked:    prototype.False,
			},
			{
				Name:        "str_to_nested",
				Number:      5,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "strToNested",
				IsPacked:    prototype.False,
			},
			{
				Name:        "str_to_oneofs",
				Number:      6,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "strToOneofs",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "NestedWithRequired",
		Fields: []prototype.Field{
			{
				Name:        "req_string",
				Number:      1,
				Cardinality: protoreflect.Required,
				Kind:        protoreflect.StringKind,
				JSONName:    "reqString",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "IndirectRequired",
		Fields: []prototype.Field{
			{
				Name:        "opt_nested",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optNested",
				IsPacked:    prototype.False,
			},
			{
				Name:        "rpt_nested",
				Number:      2,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "rptNested",
				IsPacked:    prototype.False,
			},
			{
				Name:        "str_to_nested",
				Number:      3,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "strToNested",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "KnownTypes",
		Fields: []prototype.Field{
			{
				Name:        "opt_bool",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optBool",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_int32",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optInt32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_int64",
				Number:      3,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optInt64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_uint32",
				Number:      4,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optUint32",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_uint64",
				Number:      5,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optUint64",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_float",
				Number:      6,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optFloat",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_double",
				Number:      7,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optDouble",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_string",
				Number:      8,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optString",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_bytes",
				Number:      9,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optBytes",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_duration",
				Number:      20,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optDuration",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_timestamp",
				Number:      21,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optTimestamp",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_struct",
				Number:      25,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optStruct",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_list",
				Number:      26,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optList",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_value",
				Number:      27,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optValue",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_empty",
				Number:      30,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optEmpty",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_any",
				Number:      32,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optAny",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "OptGroup",
		Fields: []prototype.Field{
			{
				Name:        "opt_bool",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.BoolKind,
				JSONName:    "optBool",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_string",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "optString",
				IsPacked:    prototype.False,
			},
			{
				Name:        "opt_nested",
				Number:      3,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optNested",
				IsPacked:    prototype.False,
			},
			{
				Name:        "optnestedgroup",
				Number:      4,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.GroupKind,
				JSONName:    "optnestedgroup",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "RptGroup",
		Fields: []prototype.Field{
			{
				Name:        "rpt_bool",
				Number:      1,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.BoolKind,
				JSONName:    "rptBool",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "OptNestedGroup",
		Fields: []prototype.Field{
			{
				Name:        "opt_enum",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.EnumKind,
				JSONName:    "optEnum",
				IsPacked:    prototype.False,
			},
		},
	},
	{
		Name: "Int32ToStrEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Int32Kind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
	{
		Name: "Sfixed64ToBoolEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sfixed64Kind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.BoolKind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
	{
		Name: "BoolToUint32Entry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.BoolKind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Uint32Kind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
	{
		Name: "Uint64ToEnumEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Uint64Kind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.EnumKind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
	{
		Name: "StrToNestedEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
	{
		Name: "StrToOneofsEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
	{
		Name: "StrToNestedEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "key",
				IsPacked:    prototype.False,
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "value",
				IsPacked:    prototype.False,
			},
		},
		IsMapEntry: true,
	},
}
