// Code generated by protoc-gen-go. DO NOT EDIT.
// source: proto3/fields.proto

package proto3

import (
	proto "github.com/golang/protobuf/proto"
	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 FieldTestMessage_Enum int32

const (
	FieldTestMessage_ZERO FieldTestMessage_Enum = 0
)

type xxx_FieldTestMessage_Enum FieldTestMessage_Enum

func (e FieldTestMessage_Enum) ProtoReflect() protoreflect.Enum {
	return (xxx_FieldTestMessage_Enum)(e)
}
func (e xxx_FieldTestMessage_Enum) Type() protoreflect.EnumType {
	return xxx_Fields_ProtoFile_EnumTypes[0]
}
func (e xxx_FieldTestMessage_Enum) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(e)
}

var FieldTestMessage_Enum_name = map[int32]string{
	0: "ZERO",
}

var FieldTestMessage_Enum_value = map[string]int32{
	"ZERO": 0,
}

func (x FieldTestMessage_Enum) String() string {
	return proto.EnumName(FieldTestMessage_Enum_name, int32(x))
}

func (FieldTestMessage_Enum) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_f1e3ea068187307c, []int{0, 0}
}

type FieldTestMessage struct {
	OptionalBool         string                               `protobuf:"bytes,1,opt,name=optional_bool,json=optionalBool,proto3" json:"optional_bool,omitempty"`
	OptionalEnum         FieldTestMessage_Enum                `protobuf:"varint,2,opt,name=optional_enum,json=optionalEnum,proto3,enum=goproto.protoc.proto3.FieldTestMessage_Enum" json:"optional_enum,omitempty"`
	OptionalInt32        int32                                `protobuf:"varint,3,opt,name=optional_int32,json=optionalInt32,proto3" json:"optional_int32,omitempty"`
	OptionalSint32       int32                                `protobuf:"zigzag32,4,opt,name=optional_sint32,json=optionalSint32,proto3" json:"optional_sint32,omitempty"`
	OptionalUint32       uint32                               `protobuf:"varint,5,opt,name=optional_uint32,json=optionalUint32,proto3" json:"optional_uint32,omitempty"`
	OptionalInt64        int64                                `protobuf:"varint,6,opt,name=optional_int64,json=optionalInt64,proto3" json:"optional_int64,omitempty"`
	OptionalSint64       int64                                `protobuf:"zigzag64,7,opt,name=optional_sint64,json=optionalSint64,proto3" json:"optional_sint64,omitempty"`
	OptionalUint64       uint64                               `protobuf:"varint,8,opt,name=optional_uint64,json=optionalUint64,proto3" json:"optional_uint64,omitempty"`
	OptionalSfixed32     int32                                `protobuf:"fixed32,9,opt,name=optional_sfixed32,json=optionalSfixed32,proto3" json:"optional_sfixed32,omitempty"`
	OptionalFixed32      uint32                               `protobuf:"fixed32,10,opt,name=optional_fixed32,json=optionalFixed32,proto3" json:"optional_fixed32,omitempty"`
	OptionalFloat        float32                              `protobuf:"fixed32,11,opt,name=optional_float,json=optionalFloat,proto3" json:"optional_float,omitempty"`
	OptionalSfixed64     int64                                `protobuf:"fixed64,12,opt,name=optional_sfixed64,json=optionalSfixed64,proto3" json:"optional_sfixed64,omitempty"`
	OptionalFixed64      uint64                               `protobuf:"fixed64,13,opt,name=optional_fixed64,json=optionalFixed64,proto3" json:"optional_fixed64,omitempty"`
	OptionalDouble       float64                              `protobuf:"fixed64,14,opt,name=optional_double,json=optionalDouble,proto3" json:"optional_double,omitempty"`
	OptionalString       string                               `protobuf:"bytes,15,opt,name=optional_string,json=optionalString,proto3" json:"optional_string,omitempty"`
	OptionalBytes        []byte                               `protobuf:"bytes,16,opt,name=optional_bytes,json=optionalBytes,proto3" json:"optional_bytes,omitempty"`
	Optional_Message     *FieldTestMessage_Message            `protobuf:"bytes,17,opt,name=optional_Message,json=optionalMessage,proto3" json:"optional_Message,omitempty"`
	RepeatedBool         []bool                               `protobuf:"varint,201,rep,packed,name=repeated_bool,json=repeatedBool,proto3" json:"repeated_bool,omitempty"`
	RepeatedEnum         []FieldTestMessage_Enum              `protobuf:"varint,202,rep,packed,name=repeated_enum,json=repeatedEnum,proto3,enum=goproto.protoc.proto3.FieldTestMessage_Enum" json:"repeated_enum,omitempty"`
	RepeatedInt32        []int32                              `protobuf:"varint,203,rep,packed,name=repeated_int32,json=repeatedInt32,proto3" json:"repeated_int32,omitempty"`
	RepeatedSint32       []int32                              `protobuf:"zigzag32,204,rep,packed,name=repeated_sint32,json=repeatedSint32,proto3" json:"repeated_sint32,omitempty"`
	RepeatedUint32       []uint32                             `protobuf:"varint,205,rep,packed,name=repeated_uint32,json=repeatedUint32,proto3" json:"repeated_uint32,omitempty"`
	RepeatedInt64        []int64                              `protobuf:"varint,206,rep,packed,name=repeated_int64,json=repeatedInt64,proto3" json:"repeated_int64,omitempty"`
	RepeatedSint64       []int64                              `protobuf:"zigzag64,207,rep,packed,name=repeated_sint64,json=repeatedSint64,proto3" json:"repeated_sint64,omitempty"`
	RepeatedUint64       []uint64                             `protobuf:"varint,208,rep,packed,name=repeated_uint64,json=repeatedUint64,proto3" json:"repeated_uint64,omitempty"`
	RepeatedSfixed32     []int32                              `protobuf:"fixed32,209,rep,packed,name=repeated_sfixed32,json=repeatedSfixed32,proto3" json:"repeated_sfixed32,omitempty"`
	RepeatedFixed32      []uint32                             `protobuf:"fixed32,210,rep,packed,name=repeated_fixed32,json=repeatedFixed32,proto3" json:"repeated_fixed32,omitempty"`
	RepeatedFloat        []float32                            `protobuf:"fixed32,211,rep,packed,name=repeated_float,json=repeatedFloat,proto3" json:"repeated_float,omitempty"`
	RepeatedSfixed64     []int64                              `protobuf:"fixed64,212,rep,packed,name=repeated_sfixed64,json=repeatedSfixed64,proto3" json:"repeated_sfixed64,omitempty"`
	RepeatedFixed64      []uint64                             `protobuf:"fixed64,213,rep,packed,name=repeated_fixed64,json=repeatedFixed64,proto3" json:"repeated_fixed64,omitempty"`
	RepeatedDouble       []float64                            `protobuf:"fixed64,214,rep,packed,name=repeated_double,json=repeatedDouble,proto3" json:"repeated_double,omitempty"`
	RepeatedString       []string                             `protobuf:"bytes,215,rep,name=repeated_string,json=repeatedString,proto3" json:"repeated_string,omitempty"`
	RepeatedBytes        [][]byte                             `protobuf:"bytes,216,rep,name=repeated_bytes,json=repeatedBytes,proto3" json:"repeated_bytes,omitempty"`
	Repeated_Message     []*FieldTestMessage_Message          `protobuf:"bytes,217,rep,name=repeated_Message,json=repeatedMessage,proto3" json:"repeated_Message,omitempty"`
	MapInt32Int64        map[int32]int64                      `protobuf:"bytes,500,rep,name=map_int32_int64,json=mapInt32Int64,proto3" json:"map_int32_int64,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
	MapStringMessage     map[string]*FieldTestMessage_Message `protobuf:"bytes,501,rep,name=map_string_message,json=mapStringMessage,proto3" json:"map_string_message,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	MapFixed64Enum       map[uint64]FieldTestMessage_Enum     `protobuf:"bytes,502,rep,name=map_fixed64_enum,json=mapFixed64Enum,proto3" json:"map_fixed64_enum,omitempty" protobuf_key:"fixed64,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=goproto.protoc.proto3.FieldTestMessage_Enum"`
	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
	XXX_unrecognized     []byte                               `json:"-"`
	XXX_sizecache        int32                                `json:"-"`
}

type xxx_FieldTestMessage struct{ m *FieldTestMessage }

func (m *FieldTestMessage) ProtoReflect() protoreflect.Message {
	return xxx_FieldTestMessage{m}
}
func (m xxx_FieldTestMessage) Type() protoreflect.MessageType {
	return xxx_Fields_ProtoFile_MessageTypes[0].Type
}
func (m xxx_FieldTestMessage) KnownFields() protoreflect.KnownFields {
	return xxx_Fields_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
}
func (m xxx_FieldTestMessage) UnknownFields() protoreflect.UnknownFields {
	return xxx_Fields_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
}
func (m xxx_FieldTestMessage) Interface() protoreflect.ProtoMessage {
	return m.m
}
func (m xxx_FieldTestMessage) ProtoMutable() {}

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

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

var xxx_messageInfo_FieldTestMessage proto.InternalMessageInfo

func (m *FieldTestMessage) GetOptionalBool() string {
	if m != nil {
		return m.OptionalBool
	}
	return ""
}

func (m *FieldTestMessage) GetOptionalEnum() FieldTestMessage_Enum {
	if m != nil {
		return m.OptionalEnum
	}
	return FieldTestMessage_ZERO
}

func (m *FieldTestMessage) GetOptionalInt32() int32 {
	if m != nil {
		return m.OptionalInt32
	}
	return 0
}

func (m *FieldTestMessage) GetOptionalSint32() int32 {
	if m != nil {
		return m.OptionalSint32
	}
	return 0
}

func (m *FieldTestMessage) GetOptionalUint32() uint32 {
	if m != nil {
		return m.OptionalUint32
	}
	return 0
}

func (m *FieldTestMessage) GetOptionalInt64() int64 {
	if m != nil {
		return m.OptionalInt64
	}
	return 0
}

func (m *FieldTestMessage) GetOptionalSint64() int64 {
	if m != nil {
		return m.OptionalSint64
	}
	return 0
}

func (m *FieldTestMessage) GetOptionalUint64() uint64 {
	if m != nil {
		return m.OptionalUint64
	}
	return 0
}

func (m *FieldTestMessage) GetOptionalSfixed32() int32 {
	if m != nil {
		return m.OptionalSfixed32
	}
	return 0
}

func (m *FieldTestMessage) GetOptionalFixed32() uint32 {
	if m != nil {
		return m.OptionalFixed32
	}
	return 0
}

func (m *FieldTestMessage) GetOptionalFloat() float32 {
	if m != nil {
		return m.OptionalFloat
	}
	return 0
}

func (m *FieldTestMessage) GetOptionalSfixed64() int64 {
	if m != nil {
		return m.OptionalSfixed64
	}
	return 0
}

func (m *FieldTestMessage) GetOptionalFixed64() uint64 {
	if m != nil {
		return m.OptionalFixed64
	}
	return 0
}

func (m *FieldTestMessage) GetOptionalDouble() float64 {
	if m != nil {
		return m.OptionalDouble
	}
	return 0
}

func (m *FieldTestMessage) GetOptionalString() string {
	if m != nil {
		return m.OptionalString
	}
	return ""
}

func (m *FieldTestMessage) GetOptionalBytes() []byte {
	if m != nil {
		return m.OptionalBytes
	}
	return nil
}

func (m *FieldTestMessage) GetOptional_Message() *FieldTestMessage_Message {
	if m != nil {
		return m.Optional_Message
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedBool() []bool {
	if m != nil {
		return m.RepeatedBool
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedEnum() []FieldTestMessage_Enum {
	if m != nil {
		return m.RepeatedEnum
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedInt32() []int32 {
	if m != nil {
		return m.RepeatedInt32
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedSint32() []int32 {
	if m != nil {
		return m.RepeatedSint32
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedUint32() []uint32 {
	if m != nil {
		return m.RepeatedUint32
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedInt64() []int64 {
	if m != nil {
		return m.RepeatedInt64
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedSint64() []int64 {
	if m != nil {
		return m.RepeatedSint64
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedUint64() []uint64 {
	if m != nil {
		return m.RepeatedUint64
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedSfixed32() []int32 {
	if m != nil {
		return m.RepeatedSfixed32
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedFixed32() []uint32 {
	if m != nil {
		return m.RepeatedFixed32
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedFloat() []float32 {
	if m != nil {
		return m.RepeatedFloat
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedSfixed64() []int64 {
	if m != nil {
		return m.RepeatedSfixed64
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedFixed64() []uint64 {
	if m != nil {
		return m.RepeatedFixed64
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedDouble() []float64 {
	if m != nil {
		return m.RepeatedDouble
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedString() []string {
	if m != nil {
		return m.RepeatedString
	}
	return nil
}

func (m *FieldTestMessage) GetRepeatedBytes() [][]byte {
	if m != nil {
		return m.RepeatedBytes
	}
	return nil
}

func (m *FieldTestMessage) GetRepeated_Message() []*FieldTestMessage_Message {
	if m != nil {
		return m.Repeated_Message
	}
	return nil
}

func (m *FieldTestMessage) GetMapInt32Int64() map[int32]int64 {
	if m != nil {
		return m.MapInt32Int64
	}
	return nil
}

func (m *FieldTestMessage) GetMapStringMessage() map[string]*FieldTestMessage_Message {
	if m != nil {
		return m.MapStringMessage
	}
	return nil
}

func (m *FieldTestMessage) GetMapFixed64Enum() map[uint64]FieldTestMessage_Enum {
	if m != nil {
		return m.MapFixed64Enum
	}
	return nil
}

type FieldTestMessage_Message struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

type xxx_FieldTestMessage_Message struct{ m *FieldTestMessage_Message }

func (m *FieldTestMessage_Message) ProtoReflect() protoreflect.Message {
	return xxx_FieldTestMessage_Message{m}
}
func (m xxx_FieldTestMessage_Message) Type() protoreflect.MessageType {
	return xxx_Fields_ProtoFile_MessageTypes[4].Type
}
func (m xxx_FieldTestMessage_Message) KnownFields() protoreflect.KnownFields {
	return xxx_Fields_ProtoFile_MessageTypes[4].KnownFieldsOf(m.m)
}
func (m xxx_FieldTestMessage_Message) UnknownFields() protoreflect.UnknownFields {
	return xxx_Fields_ProtoFile_MessageTypes[4].UnknownFieldsOf(m.m)
}
func (m xxx_FieldTestMessage_Message) Interface() protoreflect.ProtoMessage {
	return m.m
}
func (m xxx_FieldTestMessage_Message) ProtoMutable() {}

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

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

var xxx_messageInfo_FieldTestMessage_Message proto.InternalMessageInfo

func init() {
	proto.RegisterFile("proto3/fields.proto", fileDescriptor_f1e3ea068187307c)
	proto.RegisterEnum("goproto.protoc.proto3.FieldTestMessage_Enum", FieldTestMessage_Enum_name, FieldTestMessage_Enum_value)
	proto.RegisterType((*FieldTestMessage)(nil), "goproto.protoc.proto3.FieldTestMessage")
	proto.RegisterMapType((map[uint64]FieldTestMessage_Enum)(nil), "goproto.protoc.proto3.FieldTestMessage.MapFixed64EnumEntry")
	proto.RegisterMapType((map[int32]int64)(nil), "goproto.protoc.proto3.FieldTestMessage.MapInt32Int64Entry")
	proto.RegisterMapType((map[string]*FieldTestMessage_Message)(nil), "goproto.protoc.proto3.FieldTestMessage.MapStringMessageEntry")
	proto.RegisterType((*FieldTestMessage_Message)(nil), "goproto.protoc.proto3.FieldTestMessage.Message")
}

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

func init() {
	xxx_Fields_ProtoFile_FileDesc.Messages = xxx_Fields_ProtoFile_MessageDescs[0:1]
	xxx_Fields_ProtoFile_MessageDescs[0].Enums = xxx_Fields_ProtoFile_EnumDescs[0:1]
	xxx_Fields_ProtoFile_MessageDescs[0].Messages = xxx_Fields_ProtoFile_MessageDescs[1:5]
	xxx_Fields_ProtoFile_MessageDescs[0].Fields[1].EnumType = xxx_Fields_ProtoFile_EnumTypes[0]
	xxx_Fields_ProtoFile_MessageDescs[0].Fields[16].MessageType = xxx_Fields_ProtoFile_MessageTypes[4].Type
	xxx_Fields_ProtoFile_MessageDescs[0].Fields[18].EnumType = xxx_Fields_ProtoFile_EnumTypes[0]
	xxx_Fields_ProtoFile_MessageDescs[0].Fields[33].MessageType = xxx_Fields_ProtoFile_MessageTypes[4].Type
	xxx_Fields_ProtoFile_MessageDescs[0].Fields[34].MessageType = xxx_Fields_ProtoFile_MessageDescs[1].Reference()
	xxx_Fields_ProtoFile_MessageDescs[0].Fields[35].MessageType = xxx_Fields_ProtoFile_MessageDescs[2].Reference()
	xxx_Fields_ProtoFile_MessageDescs[0].Fields[36].MessageType = xxx_Fields_ProtoFile_MessageDescs[3].Reference()
	xxx_Fields_ProtoFile_MessageDescs[2].Fields[1].MessageType = xxx_Fields_ProtoFile_MessageTypes[4].Type
	xxx_Fields_ProtoFile_MessageDescs[3].Fields[1].EnumType = xxx_Fields_ProtoFile_EnumTypes[0]
	var err error
	Fields_ProtoFile, err = prototype.NewFile(&xxx_Fields_ProtoFile_FileDesc)
	if err != nil {
		panic(err)
	}
}

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

var Fields_ProtoFile protoreflect.FileDescriptor

var xxx_Fields_ProtoFile_FileDesc = prototype.File{
	Syntax:  protoreflect.Proto3,
	Path:    "proto3/fields.proto",
	Package: "goproto.protoc.proto3",
}
var xxx_Fields_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
	prototype.GoEnum(
		xxx_Fields_ProtoFile_EnumDescs[0].Reference(),
		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
			return FieldTestMessage_Enum(n)
		},
	),
}
var xxx_Fields_ProtoFile_EnumDescs = [1]prototype.Enum{
	{
		Name: "Enum",
		Values: []prototype.EnumValue{
			{Name: "ZERO", Number: 0},
		},
	},
}
var xxx_Fields_ProtoFile_MessageTypes = [5]protoimpl.MessageType{
	{Type: prototype.GoMessage(
		xxx_Fields_ProtoFile_MessageDescs[0].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(FieldTestMessage)
		},
	)},
	{ /* no message type for FieldTestMessage_MapInt32Int64Entry */ },
	{ /* no message type for FieldTestMessage_MapStringMessageEntry */ },
	{ /* no message type for FieldTestMessage_MapFixed64EnumEntry */ },
	{Type: prototype.GoMessage(
		xxx_Fields_ProtoFile_MessageDescs[4].Reference(),
		func(protoreflect.MessageType) protoreflect.ProtoMessage {
			return new(FieldTestMessage_Message)
		},
	)},
}
var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
	{
		Name: "FieldTestMessage",
		Fields: []prototype.Field{
			{
				Name:        "optional_bool",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "optionalBool",
			},
			{
				Name:        "optional_enum",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.EnumKind,
				JSONName:    "optionalEnum",
			},
			{
				Name:        "optional_int32",
				Number:      3,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Int32Kind,
				JSONName:    "optionalInt32",
			},
			{
				Name:        "optional_sint32",
				Number:      4,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sint32Kind,
				JSONName:    "optionalSint32",
			},
			{
				Name:        "optional_uint32",
				Number:      5,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Uint32Kind,
				JSONName:    "optionalUint32",
			},
			{
				Name:        "optional_int64",
				Number:      6,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Int64Kind,
				JSONName:    "optionalInt64",
			},
			{
				Name:        "optional_sint64",
				Number:      7,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sint64Kind,
				JSONName:    "optionalSint64",
			},
			{
				Name:        "optional_uint64",
				Number:      8,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Uint64Kind,
				JSONName:    "optionalUint64",
			},
			{
				Name:        "optional_sfixed32",
				Number:      9,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sfixed32Kind,
				JSONName:    "optionalSfixed32",
			},
			{
				Name:        "optional_fixed32",
				Number:      10,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Fixed32Kind,
				JSONName:    "optionalFixed32",
			},
			{
				Name:        "optional_float",
				Number:      11,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.FloatKind,
				JSONName:    "optionalFloat",
			},
			{
				Name:        "optional_sfixed64",
				Number:      12,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Sfixed64Kind,
				JSONName:    "optionalSfixed64",
			},
			{
				Name:        "optional_fixed64",
				Number:      13,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Fixed64Kind,
				JSONName:    "optionalFixed64",
			},
			{
				Name:        "optional_double",
				Number:      14,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.DoubleKind,
				JSONName:    "optionalDouble",
			},
			{
				Name:        "optional_string",
				Number:      15,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "optionalString",
			},
			{
				Name:        "optional_bytes",
				Number:      16,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.BytesKind,
				JSONName:    "optionalBytes",
			},
			{
				Name:        "optional_Message",
				Number:      17,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "optionalMessage",
			},
			{
				Name:        "repeated_bool",
				Number:      201,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.BoolKind,
				JSONName:    "repeatedBool",
			},
			{
				Name:        "repeated_enum",
				Number:      202,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.EnumKind,
				JSONName:    "repeatedEnum",
			},
			{
				Name:        "repeated_int32",
				Number:      203,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Int32Kind,
				JSONName:    "repeatedInt32",
			},
			{
				Name:        "repeated_sint32",
				Number:      204,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Sint32Kind,
				JSONName:    "repeatedSint32",
			},
			{
				Name:        "repeated_uint32",
				Number:      205,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Uint32Kind,
				JSONName:    "repeatedUint32",
			},
			{
				Name:        "repeated_int64",
				Number:      206,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Int64Kind,
				JSONName:    "repeatedInt64",
			},
			{
				Name:        "repeated_sint64",
				Number:      207,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Sint64Kind,
				JSONName:    "repeatedSint64",
			},
			{
				Name:        "repeated_uint64",
				Number:      208,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Uint64Kind,
				JSONName:    "repeatedUint64",
			},
			{
				Name:        "repeated_sfixed32",
				Number:      209,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Sfixed32Kind,
				JSONName:    "repeatedSfixed32",
			},
			{
				Name:        "repeated_fixed32",
				Number:      210,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Fixed32Kind,
				JSONName:    "repeatedFixed32",
			},
			{
				Name:        "repeated_float",
				Number:      211,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.FloatKind,
				JSONName:    "repeatedFloat",
			},
			{
				Name:        "repeated_sfixed64",
				Number:      212,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Sfixed64Kind,
				JSONName:    "repeatedSfixed64",
			},
			{
				Name:        "repeated_fixed64",
				Number:      213,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.Fixed64Kind,
				JSONName:    "repeatedFixed64",
			},
			{
				Name:        "repeated_double",
				Number:      214,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.DoubleKind,
				JSONName:    "repeatedDouble",
			},
			{
				Name:        "repeated_string",
				Number:      215,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.StringKind,
				JSONName:    "repeatedString",
			},
			{
				Name:        "repeated_bytes",
				Number:      216,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.BytesKind,
				JSONName:    "repeatedBytes",
			},
			{
				Name:        "repeated_Message",
				Number:      217,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "repeatedMessage",
			},
			{
				Name:        "map_int32_int64",
				Number:      500,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "mapInt32Int64",
			},
			{
				Name:        "map_string_message",
				Number:      501,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "mapStringMessage",
			},
			{
				Name:        "map_fixed64_enum",
				Number:      502,
				Cardinality: protoreflect.Repeated,
				Kind:        protoreflect.MessageKind,
				JSONName:    "mapFixed64Enum",
			},
		},
	},
	{
		Name: "MapInt32Int64Entry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Int32Kind,
				JSONName:    "key",
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Int64Kind,
				JSONName:    "value",
			},
		},
	},
	{
		Name: "MapStringMessageEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.StringKind,
				JSONName:    "key",
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.MessageKind,
				JSONName:    "value",
			},
		},
	},
	{
		Name: "MapFixed64EnumEntry",
		Fields: []prototype.Field{
			{
				Name:        "key",
				Number:      1,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.Fixed64Kind,
				JSONName:    "key",
			},
			{
				Name:        "value",
				Number:      2,
				Cardinality: protoreflect.Optional,
				Kind:        protoreflect.EnumKind,
				JSONName:    "value",
			},
		},
	},
	{
		Name: "Message",
	},
}
