// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Code generated by protoc-gen-go. DO NOT EDIT.
// source: internal/testprotos/editionsfuzztest/test3editions.proto

package editionsfuzztest

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
	unsafe "unsafe"
)

type ForeignEnumProto3Editions int32

const (
	ForeignEnumProto3Editions_FOREIGN_PROTO3_EDITIONS_ZERO ForeignEnumProto3Editions = 0
	ForeignEnumProto3Editions_FOREIGN_PROTO3_EDITIONS_FOO  ForeignEnumProto3Editions = 4
	ForeignEnumProto3Editions_FOREIGN_PROTO3_EDITIONS_BAR  ForeignEnumProto3Editions = 5
	ForeignEnumProto3Editions_FOREIGN_PROTO3_EDITIONS_BAZ  ForeignEnumProto3Editions = 6
)

// Enum value maps for ForeignEnumProto3Editions.
var (
	ForeignEnumProto3Editions_name = map[int32]string{
		0: "FOREIGN_PROTO3_EDITIONS_ZERO",
		4: "FOREIGN_PROTO3_EDITIONS_FOO",
		5: "FOREIGN_PROTO3_EDITIONS_BAR",
		6: "FOREIGN_PROTO3_EDITIONS_BAZ",
	}
	ForeignEnumProto3Editions_value = map[string]int32{
		"FOREIGN_PROTO3_EDITIONS_ZERO": 0,
		"FOREIGN_PROTO3_EDITIONS_FOO":  4,
		"FOREIGN_PROTO3_EDITIONS_BAR":  5,
		"FOREIGN_PROTO3_EDITIONS_BAZ":  6,
	}
)

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

func (x ForeignEnumProto3Editions) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (ForeignEnumProto3Editions) Descriptor() protoreflect.EnumDescriptor {
	return file_internal_testprotos_editionsfuzztest_test3editions_proto_enumTypes[0].Descriptor()
}

func (ForeignEnumProto3Editions) Type() protoreflect.EnumType {
	return &file_internal_testprotos_editionsfuzztest_test3editions_proto_enumTypes[0]
}

func (x ForeignEnumProto3Editions) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use ForeignEnumProto3Editions.Descriptor instead.
func (ForeignEnumProto3Editions) EnumDescriptor() ([]byte, []int) {
	return file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDescGZIP(), []int{0}
}

type TestAllTypesProto3Editions_NestedEnum int32

const (
	TestAllTypesProto3Editions_FOO TestAllTypesProto3Editions_NestedEnum = 0
	TestAllTypesProto3Editions_BAR TestAllTypesProto3Editions_NestedEnum = 1
	TestAllTypesProto3Editions_BAZ TestAllTypesProto3Editions_NestedEnum = 2
	TestAllTypesProto3Editions_NEG TestAllTypesProto3Editions_NestedEnum = -1 // Intentionally negative.
)

// Enum value maps for TestAllTypesProto3Editions_NestedEnum.
var (
	TestAllTypesProto3Editions_NestedEnum_name = map[int32]string{
		0:  "FOO",
		1:  "BAR",
		2:  "BAZ",
		-1: "NEG",
	}
	TestAllTypesProto3Editions_NestedEnum_value = map[string]int32{
		"FOO": 0,
		"BAR": 1,
		"BAZ": 2,
		"NEG": -1,
	}
)

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

func (x TestAllTypesProto3Editions_NestedEnum) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (TestAllTypesProto3Editions_NestedEnum) Descriptor() protoreflect.EnumDescriptor {
	return file_internal_testprotos_editionsfuzztest_test3editions_proto_enumTypes[1].Descriptor()
}

func (TestAllTypesProto3Editions_NestedEnum) Type() protoreflect.EnumType {
	return &file_internal_testprotos_editionsfuzztest_test3editions_proto_enumTypes[1]
}

func (x TestAllTypesProto3Editions_NestedEnum) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use TestAllTypesProto3Editions_NestedEnum.Descriptor instead.
func (TestAllTypesProto3Editions_NestedEnum) EnumDescriptor() ([]byte, []int) {
	return file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDescGZIP(), []int{0, 0}
}

type TestAllTypesProto3Editions struct {
	state                  protoimpl.MessageState                               `protogen:"open.v1"`
	SingularInt32          int32                                                `protobuf:"varint,81,opt,name=singular_int32,json=singularInt32" json:"singular_int32,omitempty"`
	SingularInt64          int64                                                `protobuf:"varint,82,opt,name=singular_int64,json=singularInt64" json:"singular_int64,omitempty"`
	SingularUint32         uint32                                               `protobuf:"varint,83,opt,name=singular_uint32,json=singularUint32" json:"singular_uint32,omitempty"`
	SingularUint64         uint64                                               `protobuf:"varint,84,opt,name=singular_uint64,json=singularUint64" json:"singular_uint64,omitempty"`
	SingularSint32         int32                                                `protobuf:"zigzag32,85,opt,name=singular_sint32,json=singularSint32" json:"singular_sint32,omitempty"`
	SingularSint64         int64                                                `protobuf:"zigzag64,86,opt,name=singular_sint64,json=singularSint64" json:"singular_sint64,omitempty"`
	SingularFixed32        uint32                                               `protobuf:"fixed32,87,opt,name=singular_fixed32,json=singularFixed32" json:"singular_fixed32,omitempty"`
	SingularFixed64        uint64                                               `protobuf:"fixed64,88,opt,name=singular_fixed64,json=singularFixed64" json:"singular_fixed64,omitempty"`
	SingularSfixed32       int32                                                `protobuf:"fixed32,89,opt,name=singular_sfixed32,json=singularSfixed32" json:"singular_sfixed32,omitempty"`
	SingularSfixed64       int64                                                `protobuf:"fixed64,90,opt,name=singular_sfixed64,json=singularSfixed64" json:"singular_sfixed64,omitempty"`
	SingularFloat          float32                                              `protobuf:"fixed32,91,opt,name=singular_float,json=singularFloat" json:"singular_float,omitempty"`
	SingularDouble         float64                                              `protobuf:"fixed64,92,opt,name=singular_double,json=singularDouble" json:"singular_double,omitempty"`
	SingularBool           bool                                                 `protobuf:"varint,93,opt,name=singular_bool,json=singularBool" json:"singular_bool,omitempty"`
	SingularString         string                                               `protobuf:"bytes,94,opt,name=singular_string,json=singularString" json:"singular_string,omitempty"`
	SingularBytes          []byte                                               `protobuf:"bytes,95,opt,name=singular_bytes,json=singularBytes" json:"singular_bytes,omitempty"`
	SingularNestedMessage  *TestAllTypesProto3Editions_NestedMessage            `protobuf:"bytes,98,opt,name=singular_nested_message,json=singularNestedMessage" json:"singular_nested_message,omitempty"`
	SingularForeignMessage *ForeignMessageProto3Editions                        `protobuf:"bytes,99,opt,name=singular_foreign_message,json=singularForeignMessage" json:"singular_foreign_message,omitempty"`
	SingularNestedEnum     TestAllTypesProto3Editions_NestedEnum                `protobuf:"varint,101,opt,name=singular_nested_enum,json=singularNestedEnum,enum=goproto.proto.test.TestAllTypesProto3Editions_NestedEnum" json:"singular_nested_enum,omitempty"`
	SingularForeignEnum    ForeignEnumProto3Editions                            `protobuf:"varint,102,opt,name=singular_foreign_enum,json=singularForeignEnum,enum=goproto.proto.test.ForeignEnumProto3Editions" json:"singular_foreign_enum,omitempty"`
	OptionalInt32          *int32                                               `protobuf:"varint,1,opt,name=optional_int32,json=optionalInt32" json:"optional_int32,omitempty"`
	OptionalInt64          *int64                                               `protobuf:"varint,2,opt,name=optional_int64,json=optionalInt64" json:"optional_int64,omitempty"`
	OptionalUint32         *uint32                                              `protobuf:"varint,3,opt,name=optional_uint32,json=optionalUint32" json:"optional_uint32,omitempty"`
	OptionalUint64         *uint64                                              `protobuf:"varint,4,opt,name=optional_uint64,json=optionalUint64" json:"optional_uint64,omitempty"`
	OptionalSint32         *int32                                               `protobuf:"zigzag32,5,opt,name=optional_sint32,json=optionalSint32" json:"optional_sint32,omitempty"`
	OptionalSint64         *int64                                               `protobuf:"zigzag64,6,opt,name=optional_sint64,json=optionalSint64" json:"optional_sint64,omitempty"`
	OptionalFixed32        *uint32                                              `protobuf:"fixed32,7,opt,name=optional_fixed32,json=optionalFixed32" json:"optional_fixed32,omitempty"`
	OptionalFixed64        *uint64                                              `protobuf:"fixed64,8,opt,name=optional_fixed64,json=optionalFixed64" json:"optional_fixed64,omitempty"`
	OptionalSfixed32       *int32                                               `protobuf:"fixed32,9,opt,name=optional_sfixed32,json=optionalSfixed32" json:"optional_sfixed32,omitempty"`
	OptionalSfixed64       *int64                                               `protobuf:"fixed64,10,opt,name=optional_sfixed64,json=optionalSfixed64" json:"optional_sfixed64,omitempty"`
	OptionalFloat          *float32                                             `protobuf:"fixed32,11,opt,name=optional_float,json=optionalFloat" json:"optional_float,omitempty"`
	OptionalDouble         *float64                                             `protobuf:"fixed64,12,opt,name=optional_double,json=optionalDouble" json:"optional_double,omitempty"`
	OptionalBool           *bool                                                `protobuf:"varint,13,opt,name=optional_bool,json=optionalBool" json:"optional_bool,omitempty"`
	OptionalString         *string                                              `protobuf:"bytes,14,opt,name=optional_string,json=optionalString" json:"optional_string,omitempty"`
	OptionalBytes          []byte                                               `protobuf:"bytes,15,opt,name=optional_bytes,json=optionalBytes" json:"optional_bytes,omitempty"`
	OptionalNestedMessage  *TestAllTypesProto3Editions_NestedMessage            `protobuf:"bytes,18,opt,name=optional_nested_message,json=optionalNestedMessage" json:"optional_nested_message,omitempty"`
	OptionalForeignMessage *ForeignMessageProto3Editions                        `protobuf:"bytes,19,opt,name=optional_foreign_message,json=optionalForeignMessage" json:"optional_foreign_message,omitempty"`
	OptionalNestedEnum     *TestAllTypesProto3Editions_NestedEnum               `protobuf:"varint,21,opt,name=optional_nested_enum,json=optionalNestedEnum,enum=goproto.proto.test.TestAllTypesProto3Editions_NestedEnum" json:"optional_nested_enum,omitempty"`
	OptionalForeignEnum    *ForeignEnumProto3Editions                           `protobuf:"varint,22,opt,name=optional_foreign_enum,json=optionalForeignEnum,enum=goproto.proto.test.ForeignEnumProto3Editions" json:"optional_foreign_enum,omitempty"`
	RepeatedInt32          []int32                                              `protobuf:"varint,31,rep,packed,name=repeated_int32,json=repeatedInt32" json:"repeated_int32,omitempty"`
	RepeatedInt64          []int64                                              `protobuf:"varint,32,rep,packed,name=repeated_int64,json=repeatedInt64" json:"repeated_int64,omitempty"`
	RepeatedUint32         []uint32                                             `protobuf:"varint,33,rep,packed,name=repeated_uint32,json=repeatedUint32" json:"repeated_uint32,omitempty"`
	RepeatedUint64         []uint64                                             `protobuf:"varint,34,rep,packed,name=repeated_uint64,json=repeatedUint64" json:"repeated_uint64,omitempty"`
	RepeatedSint32         []int32                                              `protobuf:"zigzag32,35,rep,packed,name=repeated_sint32,json=repeatedSint32" json:"repeated_sint32,omitempty"`
	RepeatedSint64         []int64                                              `protobuf:"zigzag64,36,rep,packed,name=repeated_sint64,json=repeatedSint64" json:"repeated_sint64,omitempty"`
	RepeatedFixed32        []uint32                                             `protobuf:"fixed32,37,rep,packed,name=repeated_fixed32,json=repeatedFixed32" json:"repeated_fixed32,omitempty"`
	RepeatedFixed64        []uint64                                             `protobuf:"fixed64,38,rep,packed,name=repeated_fixed64,json=repeatedFixed64" json:"repeated_fixed64,omitempty"`
	RepeatedSfixed32       []int32                                              `protobuf:"fixed32,39,rep,packed,name=repeated_sfixed32,json=repeatedSfixed32" json:"repeated_sfixed32,omitempty"`
	RepeatedSfixed64       []int64                                              `protobuf:"fixed64,40,rep,packed,name=repeated_sfixed64,json=repeatedSfixed64" json:"repeated_sfixed64,omitempty"`
	RepeatedFloat          []float32                                            `protobuf:"fixed32,41,rep,packed,name=repeated_float,json=repeatedFloat" json:"repeated_float,omitempty"`
	RepeatedDouble         []float64                                            `protobuf:"fixed64,42,rep,packed,name=repeated_double,json=repeatedDouble" json:"repeated_double,omitempty"`
	RepeatedBool           []bool                                               `protobuf:"varint,43,rep,packed,name=repeated_bool,json=repeatedBool" json:"repeated_bool,omitempty"`
	RepeatedString         []string                                             `protobuf:"bytes,44,rep,name=repeated_string,json=repeatedString" json:"repeated_string,omitempty"`
	RepeatedBytes          [][]byte                                             `protobuf:"bytes,45,rep,name=repeated_bytes,json=repeatedBytes" json:"repeated_bytes,omitempty"`
	RepeatedNestedMessage  []*TestAllTypesProto3Editions_NestedMessage          `protobuf:"bytes,48,rep,name=repeated_nested_message,json=repeatedNestedMessage" json:"repeated_nested_message,omitempty"`
	RepeatedForeignMessage []*ForeignMessageProto3Editions                      `protobuf:"bytes,49,rep,name=repeated_foreign_message,json=repeatedForeignMessage" json:"repeated_foreign_message,omitempty"`
	RepeatedNestedEnum     []TestAllTypesProto3Editions_NestedEnum              `protobuf:"varint,51,rep,packed,name=repeated_nested_enum,json=repeatedNestedEnum,enum=goproto.proto.test.TestAllTypesProto3Editions_NestedEnum" json:"repeated_nested_enum,omitempty"`
	RepeatedForeignEnum    []ForeignEnumProto3Editions                          `protobuf:"varint,52,rep,packed,name=repeated_foreign_enum,json=repeatedForeignEnum,enum=goproto.proto.test.ForeignEnumProto3Editions" json:"repeated_foreign_enum,omitempty"`
	MapInt32Int32          map[int32]int32                                      `protobuf:"bytes,56,rep,name=map_int32_int32,json=mapInt32Int32" json:"map_int32_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapInt64Int64          map[int64]int64                                      `protobuf:"bytes,57,rep,name=map_int64_int64,json=mapInt64Int64" json:"map_int64_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapUint32Uint32        map[uint32]uint32                                    `protobuf:"bytes,58,rep,name=map_uint32_uint32,json=mapUint32Uint32" json:"map_uint32_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapUint64Uint64        map[uint64]uint64                                    `protobuf:"bytes,59,rep,name=map_uint64_uint64,json=mapUint64Uint64" json:"map_uint64_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapSint32Sint32        map[int32]int32                                      `protobuf:"bytes,60,rep,name=map_sint32_sint32,json=mapSint32Sint32" json:"map_sint32_sint32,omitempty" protobuf_key:"zigzag32,1,opt,name=key" protobuf_val:"zigzag32,2,opt,name=value"`
	MapSint64Sint64        map[int64]int64                                      `protobuf:"bytes,61,rep,name=map_sint64_sint64,json=mapSint64Sint64" json:"map_sint64_sint64,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"zigzag64,2,opt,name=value"`
	MapFixed32Fixed32      map[uint32]uint32                                    `protobuf:"bytes,62,rep,name=map_fixed32_fixed32,json=mapFixed32Fixed32" json:"map_fixed32_fixed32,omitempty" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	MapFixed64Fixed64      map[uint64]uint64                                    `protobuf:"bytes,63,rep,name=map_fixed64_fixed64,json=mapFixed64Fixed64" json:"map_fixed64_fixed64,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	MapSfixed32Sfixed32    map[int32]int32                                      `protobuf:"bytes,64,rep,name=map_sfixed32_sfixed32,json=mapSfixed32Sfixed32" json:"map_sfixed32_sfixed32,omitempty" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	MapSfixed64Sfixed64    map[int64]int64                                      `protobuf:"bytes,65,rep,name=map_sfixed64_sfixed64,json=mapSfixed64Sfixed64" json:"map_sfixed64_sfixed64,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	MapInt32Float          map[int32]float32                                    `protobuf:"bytes,66,rep,name=map_int32_float,json=mapInt32Float" json:"map_int32_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
	MapInt32Double         map[int32]float64                                    `protobuf:"bytes,67,rep,name=map_int32_double,json=mapInt32Double" json:"map_int32_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"`
	MapBoolBool            map[bool]bool                                        `protobuf:"bytes,68,rep,name=map_bool_bool,json=mapBoolBool" json:"map_bool_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	MapStringString        map[string]string                                    `protobuf:"bytes,69,rep,name=map_string_string,json=mapStringString" json:"map_string_string,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	MapStringBytes         map[string][]byte                                    `protobuf:"bytes,70,rep,name=map_string_bytes,json=mapStringBytes" json:"map_string_bytes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	MapStringNestedMessage map[string]*TestAllTypesProto3Editions_NestedMessage `protobuf:"bytes,71,rep,name=map_string_nested_message,json=mapStringNestedMessage" json:"map_string_nested_message,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	MapStringNestedEnum    map[string]TestAllTypesProto3Editions_NestedEnum     `protobuf:"bytes,73,rep,name=map_string_nested_enum,json=mapStringNestedEnum" json:"map_string_nested_enum,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=goproto.proto.test.TestAllTypesProto3Editions_NestedEnum"`
	// Types that are valid to be assigned to OneofField:
	//
	//	*TestAllTypesProto3Editions_OneofUint32
	//	*TestAllTypesProto3Editions_OneofNestedMessage
	//	*TestAllTypesProto3Editions_OneofString
	//	*TestAllTypesProto3Editions_OneofBytes
	//	*TestAllTypesProto3Editions_OneofBool
	//	*TestAllTypesProto3Editions_OneofUint64
	//	*TestAllTypesProto3Editions_OneofFloat
	//	*TestAllTypesProto3Editions_OneofDouble
	//	*TestAllTypesProto3Editions_OneofEnum
	OneofField    isTestAllTypesProto3Editions_OneofField `protobuf_oneof:"oneof_field"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *TestAllTypesProto3Editions) Reset() {
	*x = TestAllTypesProto3Editions{}
	mi := &file_internal_testprotos_editionsfuzztest_test3editions_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestAllTypesProto3Editions) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestAllTypesProto3Editions) ProtoMessage() {}

func (x *TestAllTypesProto3Editions) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_editionsfuzztest_test3editions_proto_msgTypes[0]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use TestAllTypesProto3Editions.ProtoReflect.Descriptor instead.
func (*TestAllTypesProto3Editions) Descriptor() ([]byte, []int) {
	return file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDescGZIP(), []int{0}
}

func (x *TestAllTypesProto3Editions) GetSingularInt32() int32 {
	if x != nil {
		return x.SingularInt32
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetSingularInt64() int64 {
	if x != nil {
		return x.SingularInt64
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetSingularUint32() uint32 {
	if x != nil {
		return x.SingularUint32
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetSingularUint64() uint64 {
	if x != nil {
		return x.SingularUint64
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetSingularSint32() int32 {
	if x != nil {
		return x.SingularSint32
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetSingularSint64() int64 {
	if x != nil {
		return x.SingularSint64
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetSingularFixed32() uint32 {
	if x != nil {
		return x.SingularFixed32
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetSingularFixed64() uint64 {
	if x != nil {
		return x.SingularFixed64
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetSingularSfixed32() int32 {
	if x != nil {
		return x.SingularSfixed32
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetSingularSfixed64() int64 {
	if x != nil {
		return x.SingularSfixed64
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetSingularFloat() float32 {
	if x != nil {
		return x.SingularFloat
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetSingularDouble() float64 {
	if x != nil {
		return x.SingularDouble
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetSingularBool() bool {
	if x != nil {
		return x.SingularBool
	}
	return false
}

func (x *TestAllTypesProto3Editions) GetSingularString() string {
	if x != nil {
		return x.SingularString
	}
	return ""
}

func (x *TestAllTypesProto3Editions) GetSingularBytes() []byte {
	if x != nil {
		return x.SingularBytes
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetSingularNestedMessage() *TestAllTypesProto3Editions_NestedMessage {
	if x != nil {
		return x.SingularNestedMessage
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetSingularForeignMessage() *ForeignMessageProto3Editions {
	if x != nil {
		return x.SingularForeignMessage
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetSingularNestedEnum() TestAllTypesProto3Editions_NestedEnum {
	if x != nil {
		return x.SingularNestedEnum
	}
	return TestAllTypesProto3Editions_FOO
}

func (x *TestAllTypesProto3Editions) GetSingularForeignEnum() ForeignEnumProto3Editions {
	if x != nil {
		return x.SingularForeignEnum
	}
	return ForeignEnumProto3Editions_FOREIGN_PROTO3_EDITIONS_ZERO
}

func (x *TestAllTypesProto3Editions) GetOptionalInt32() int32 {
	if x != nil && x.OptionalInt32 != nil {
		return *x.OptionalInt32
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOptionalInt64() int64 {
	if x != nil && x.OptionalInt64 != nil {
		return *x.OptionalInt64
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOptionalUint32() uint32 {
	if x != nil && x.OptionalUint32 != nil {
		return *x.OptionalUint32
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOptionalUint64() uint64 {
	if x != nil && x.OptionalUint64 != nil {
		return *x.OptionalUint64
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOptionalSint32() int32 {
	if x != nil && x.OptionalSint32 != nil {
		return *x.OptionalSint32
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOptionalSint64() int64 {
	if x != nil && x.OptionalSint64 != nil {
		return *x.OptionalSint64
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOptionalFixed32() uint32 {
	if x != nil && x.OptionalFixed32 != nil {
		return *x.OptionalFixed32
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOptionalFixed64() uint64 {
	if x != nil && x.OptionalFixed64 != nil {
		return *x.OptionalFixed64
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOptionalSfixed32() int32 {
	if x != nil && x.OptionalSfixed32 != nil {
		return *x.OptionalSfixed32
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOptionalSfixed64() int64 {
	if x != nil && x.OptionalSfixed64 != nil {
		return *x.OptionalSfixed64
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOptionalFloat() float32 {
	if x != nil && x.OptionalFloat != nil {
		return *x.OptionalFloat
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOptionalDouble() float64 {
	if x != nil && x.OptionalDouble != nil {
		return *x.OptionalDouble
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOptionalBool() bool {
	if x != nil && x.OptionalBool != nil {
		return *x.OptionalBool
	}
	return false
}

func (x *TestAllTypesProto3Editions) GetOptionalString() string {
	if x != nil && x.OptionalString != nil {
		return *x.OptionalString
	}
	return ""
}

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

func (x *TestAllTypesProto3Editions) GetOptionalNestedMessage() *TestAllTypesProto3Editions_NestedMessage {
	if x != nil {
		return x.OptionalNestedMessage
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetOptionalForeignMessage() *ForeignMessageProto3Editions {
	if x != nil {
		return x.OptionalForeignMessage
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetOptionalNestedEnum() TestAllTypesProto3Editions_NestedEnum {
	if x != nil && x.OptionalNestedEnum != nil {
		return *x.OptionalNestedEnum
	}
	return TestAllTypesProto3Editions_FOO
}

func (x *TestAllTypesProto3Editions) GetOptionalForeignEnum() ForeignEnumProto3Editions {
	if x != nil && x.OptionalForeignEnum != nil {
		return *x.OptionalForeignEnum
	}
	return ForeignEnumProto3Editions_FOREIGN_PROTO3_EDITIONS_ZERO
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

func (x *TestAllTypesProto3Editions) GetRepeatedNestedMessage() []*TestAllTypesProto3Editions_NestedMessage {
	if x != nil {
		return x.RepeatedNestedMessage
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetRepeatedForeignMessage() []*ForeignMessageProto3Editions {
	if x != nil {
		return x.RepeatedForeignMessage
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetRepeatedNestedEnum() []TestAllTypesProto3Editions_NestedEnum {
	if x != nil {
		return x.RepeatedNestedEnum
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetRepeatedForeignEnum() []ForeignEnumProto3Editions {
	if x != nil {
		return x.RepeatedForeignEnum
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapInt32Int32() map[int32]int32 {
	if x != nil {
		return x.MapInt32Int32
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapInt64Int64() map[int64]int64 {
	if x != nil {
		return x.MapInt64Int64
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapUint32Uint32() map[uint32]uint32 {
	if x != nil {
		return x.MapUint32Uint32
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapUint64Uint64() map[uint64]uint64 {
	if x != nil {
		return x.MapUint64Uint64
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapSint32Sint32() map[int32]int32 {
	if x != nil {
		return x.MapSint32Sint32
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapSint64Sint64() map[int64]int64 {
	if x != nil {
		return x.MapSint64Sint64
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapFixed32Fixed32() map[uint32]uint32 {
	if x != nil {
		return x.MapFixed32Fixed32
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapFixed64Fixed64() map[uint64]uint64 {
	if x != nil {
		return x.MapFixed64Fixed64
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapSfixed32Sfixed32() map[int32]int32 {
	if x != nil {
		return x.MapSfixed32Sfixed32
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapSfixed64Sfixed64() map[int64]int64 {
	if x != nil {
		return x.MapSfixed64Sfixed64
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapInt32Float() map[int32]float32 {
	if x != nil {
		return x.MapInt32Float
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapInt32Double() map[int32]float64 {
	if x != nil {
		return x.MapInt32Double
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapBoolBool() map[bool]bool {
	if x != nil {
		return x.MapBoolBool
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapStringString() map[string]string {
	if x != nil {
		return x.MapStringString
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapStringBytes() map[string][]byte {
	if x != nil {
		return x.MapStringBytes
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapStringNestedMessage() map[string]*TestAllTypesProto3Editions_NestedMessage {
	if x != nil {
		return x.MapStringNestedMessage
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetMapStringNestedEnum() map[string]TestAllTypesProto3Editions_NestedEnum {
	if x != nil {
		return x.MapStringNestedEnum
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetOneofField() isTestAllTypesProto3Editions_OneofField {
	if x != nil {
		return x.OneofField
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetOneofUint32() uint32 {
	if x != nil {
		if x, ok := x.OneofField.(*TestAllTypesProto3Editions_OneofUint32); ok {
			return x.OneofUint32
		}
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOneofNestedMessage() *TestAllTypesProto3Editions_NestedMessage {
	if x != nil {
		if x, ok := x.OneofField.(*TestAllTypesProto3Editions_OneofNestedMessage); ok {
			return x.OneofNestedMessage
		}
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetOneofString() string {
	if x != nil {
		if x, ok := x.OneofField.(*TestAllTypesProto3Editions_OneofString); ok {
			return x.OneofString
		}
	}
	return ""
}

func (x *TestAllTypesProto3Editions) GetOneofBytes() []byte {
	if x != nil {
		if x, ok := x.OneofField.(*TestAllTypesProto3Editions_OneofBytes); ok {
			return x.OneofBytes
		}
	}
	return nil
}

func (x *TestAllTypesProto3Editions) GetOneofBool() bool {
	if x != nil {
		if x, ok := x.OneofField.(*TestAllTypesProto3Editions_OneofBool); ok {
			return x.OneofBool
		}
	}
	return false
}

func (x *TestAllTypesProto3Editions) GetOneofUint64() uint64 {
	if x != nil {
		if x, ok := x.OneofField.(*TestAllTypesProto3Editions_OneofUint64); ok {
			return x.OneofUint64
		}
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOneofFloat() float32 {
	if x != nil {
		if x, ok := x.OneofField.(*TestAllTypesProto3Editions_OneofFloat); ok {
			return x.OneofFloat
		}
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOneofDouble() float64 {
	if x != nil {
		if x, ok := x.OneofField.(*TestAllTypesProto3Editions_OneofDouble); ok {
			return x.OneofDouble
		}
	}
	return 0
}

func (x *TestAllTypesProto3Editions) GetOneofEnum() TestAllTypesProto3Editions_NestedEnum {
	if x != nil {
		if x, ok := x.OneofField.(*TestAllTypesProto3Editions_OneofEnum); ok {
			return x.OneofEnum
		}
	}
	return TestAllTypesProto3Editions_FOO
}

type isTestAllTypesProto3Editions_OneofField interface {
	isTestAllTypesProto3Editions_OneofField()
}

type TestAllTypesProto3Editions_OneofUint32 struct {
	OneofUint32 uint32 `protobuf:"varint,111,opt,name=oneof_uint32,json=oneofUint32,oneof"`
}

type TestAllTypesProto3Editions_OneofNestedMessage struct {
	OneofNestedMessage *TestAllTypesProto3Editions_NestedMessage `protobuf:"bytes,112,opt,name=oneof_nested_message,json=oneofNestedMessage,oneof"`
}

type TestAllTypesProto3Editions_OneofString struct {
	OneofString string `protobuf:"bytes,113,opt,name=oneof_string,json=oneofString,oneof"`
}

type TestAllTypesProto3Editions_OneofBytes struct {
	OneofBytes []byte `protobuf:"bytes,114,opt,name=oneof_bytes,json=oneofBytes,oneof"`
}

type TestAllTypesProto3Editions_OneofBool struct {
	OneofBool bool `protobuf:"varint,115,opt,name=oneof_bool,json=oneofBool,oneof"`
}

type TestAllTypesProto3Editions_OneofUint64 struct {
	OneofUint64 uint64 `protobuf:"varint,116,opt,name=oneof_uint64,json=oneofUint64,oneof"`
}

type TestAllTypesProto3Editions_OneofFloat struct {
	OneofFloat float32 `protobuf:"fixed32,117,opt,name=oneof_float,json=oneofFloat,oneof"`
}

type TestAllTypesProto3Editions_OneofDouble struct {
	OneofDouble float64 `protobuf:"fixed64,118,opt,name=oneof_double,json=oneofDouble,oneof"`
}

type TestAllTypesProto3Editions_OneofEnum struct {
	OneofEnum TestAllTypesProto3Editions_NestedEnum `protobuf:"varint,119,opt,name=oneof_enum,json=oneofEnum,enum=goproto.proto.test.TestAllTypesProto3Editions_NestedEnum,oneof"`
}

func (*TestAllTypesProto3Editions_OneofUint32) isTestAllTypesProto3Editions_OneofField() {}

func (*TestAllTypesProto3Editions_OneofNestedMessage) isTestAllTypesProto3Editions_OneofField() {}

func (*TestAllTypesProto3Editions_OneofString) isTestAllTypesProto3Editions_OneofField() {}

func (*TestAllTypesProto3Editions_OneofBytes) isTestAllTypesProto3Editions_OneofField() {}

func (*TestAllTypesProto3Editions_OneofBool) isTestAllTypesProto3Editions_OneofField() {}

func (*TestAllTypesProto3Editions_OneofUint64) isTestAllTypesProto3Editions_OneofField() {}

func (*TestAllTypesProto3Editions_OneofFloat) isTestAllTypesProto3Editions_OneofField() {}

func (*TestAllTypesProto3Editions_OneofDouble) isTestAllTypesProto3Editions_OneofField() {}

func (*TestAllTypesProto3Editions_OneofEnum) isTestAllTypesProto3Editions_OneofField() {}

type ForeignMessageProto3Editions struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	C             int32                  `protobuf:"varint,1,opt,name=c" json:"c,omitempty"`
	D             int32                  `protobuf:"varint,2,opt,name=d" json:"d,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ForeignMessageProto3Editions) Reset() {
	*x = ForeignMessageProto3Editions{}
	mi := &file_internal_testprotos_editionsfuzztest_test3editions_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ForeignMessageProto3Editions) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ForeignMessageProto3Editions) ProtoMessage() {}

func (x *ForeignMessageProto3Editions) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_editionsfuzztest_test3editions_proto_msgTypes[1]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ForeignMessageProto3Editions.ProtoReflect.Descriptor instead.
func (*ForeignMessageProto3Editions) Descriptor() ([]byte, []int) {
	return file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDescGZIP(), []int{1}
}

func (x *ForeignMessageProto3Editions) GetC() int32 {
	if x != nil {
		return x.C
	}
	return 0
}

func (x *ForeignMessageProto3Editions) GetD() int32 {
	if x != nil {
		return x.D
	}
	return 0
}

type TestAllTypesProto3Editions_NestedMessage struct {
	state         protoimpl.MessageState      `protogen:"open.v1"`
	A             int32                       `protobuf:"varint,1,opt,name=a" json:"a,omitempty"`
	Corecursive   *TestAllTypesProto3Editions `protobuf:"bytes,2,opt,name=corecursive" json:"corecursive,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *TestAllTypesProto3Editions_NestedMessage) Reset() {
	*x = TestAllTypesProto3Editions_NestedMessage{}
	mi := &file_internal_testprotos_editionsfuzztest_test3editions_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TestAllTypesProto3Editions_NestedMessage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestAllTypesProto3Editions_NestedMessage) ProtoMessage() {}

func (x *TestAllTypesProto3Editions_NestedMessage) ProtoReflect() protoreflect.Message {
	mi := &file_internal_testprotos_editionsfuzztest_test3editions_proto_msgTypes[2]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use TestAllTypesProto3Editions_NestedMessage.ProtoReflect.Descriptor instead.
func (*TestAllTypesProto3Editions_NestedMessage) Descriptor() ([]byte, []int) {
	return file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDescGZIP(), []int{0, 0}
}

func (x *TestAllTypesProto3Editions_NestedMessage) GetA() int32 {
	if x != nil {
		return x.A
	}
	return 0
}

func (x *TestAllTypesProto3Editions_NestedMessage) GetCorecursive() *TestAllTypesProto3Editions {
	if x != nil {
		return x.Corecursive
	}
	return nil
}

var File_internal_testprotos_editionsfuzztest_test3editions_proto protoreflect.FileDescriptor

const file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDesc = "\n8internal/testprotos/editionsfuzztest/test3editions.protogoproto.proto.test\"\x918\nTestAllTypesProto3Editions%\nsingular_int32Q (R\rsingularInt32%\nsingular_int64R (R\rsingularInt64'\nsingular_uint32S (\rRsingularUint32'\nsingular_uint64T (RsingularUint64'\nsingular_sint32U (RsingularSint32'\nsingular_sint64V (RsingularSint64)\nsingular_fixed32W (RsingularFixed32)\nsingular_fixed64X (RsingularFixed64+\nsingular_sfixed32Y (RsingularSfixed32+\nsingular_sfixed64Z (RsingularSfixed64%\nsingular_float[ (R\rsingularFloat'\nsingular_double\\ (RsingularDouble#\n\rsingular_bool] (RsingularBool'\nsingular_string^ (	RsingularString%\nsingular_bytes_ (R\rsingularBytest\nsingular_nested_messageb (2<.goproto.proto.test.TestAllTypesProto3Editions.NestedMessageRsingularNestedMessagej\nsingular_foreign_messagec (20.goproto.proto.test.ForeignMessageProto3EditionsRsingularForeignMessagek\nsingular_nested_enume (29.goproto.proto.test.TestAllTypesProto3Editions.NestedEnumRsingularNestedEnuma\nsingular_foreign_enumf (2-.goproto.proto.test.ForeignEnumProto3EditionsRsingularForeignEnum,\noptional_int32 (B\xaaR\roptionalInt32,\noptional_int64 (B\xaaR\roptionalInt64.\noptional_uint32 (\rB\xaaRoptionalUint32.\noptional_uint64 (B\xaaRoptionalUint64.\noptional_sint32 (B\xaaRoptionalSint32.\noptional_sint64 (B\xaaRoptionalSint640\noptional_fixed32 (B\xaaRoptionalFixed320\noptional_fixed64 (B\xaaRoptionalFixed642\noptional_sfixed32	 (B\xaaRoptionalSfixed322\noptional_sfixed64\n (B\xaaRoptionalSfixed64,\noptional_float (B\xaaR\roptionalFloat.\noptional_double (B\xaaRoptionalDouble*\n\roptional_bool\r (B\xaaRoptionalBool.\noptional_string (	B\xaaRoptionalString,\noptional_bytes (B\xaaR\roptionalBytest\noptional_nested_message (2<.goproto.proto.test.TestAllTypesProto3Editions.NestedMessageRoptionalNestedMessagej\noptional_foreign_message (20.goproto.proto.test.ForeignMessageProto3EditionsRoptionalForeignMessager\noptional_nested_enum (29.goproto.proto.test.TestAllTypesProto3Editions.NestedEnumB\xaaRoptionalNestedEnumh\noptional_foreign_enum (2-.goproto.proto.test.ForeignEnumProto3EditionsB\xaaRoptionalForeignEnum%\nrepeated_int32 (R\rrepeatedInt32%\nrepeated_int64  (R\rrepeatedInt64'\nrepeated_uint32! (\rRrepeatedUint32'\nrepeated_uint64\" (RrepeatedUint64'\nrepeated_sint32# (RrepeatedSint32'\nrepeated_sint64$ (RrepeatedSint64)\nrepeated_fixed32% (RrepeatedFixed32)\nrepeated_fixed64& (RrepeatedFixed64+\nrepeated_sfixed32' (RrepeatedSfixed32+\nrepeated_sfixed64( (RrepeatedSfixed64%\nrepeated_float) (R\rrepeatedFloat'\nrepeated_double* (RrepeatedDouble#\n\rrepeated_bool+ (RrepeatedBool'\nrepeated_string, (	RrepeatedString%\nrepeated_bytes- (R\rrepeatedBytest\nrepeated_nested_message0 (2<.goproto.proto.test.TestAllTypesProto3Editions.NestedMessageRrepeatedNestedMessagej\nrepeated_foreign_message1 (20.goproto.proto.test.ForeignMessageProto3EditionsRrepeatedForeignMessagek\nrepeated_nested_enum3 (29.goproto.proto.test.TestAllTypesProto3Editions.NestedEnumRrepeatedNestedEnuma\nrepeated_foreign_enum4 (2-.goproto.proto.test.ForeignEnumProto3EditionsRrepeatedForeignEnumi\nmap_int32_int328 (2A.goproto.proto.test.TestAllTypesProto3Editions.MapInt32Int32EntryR\rmapInt32Int32i\nmap_int64_int649 (2A.goproto.proto.test.TestAllTypesProto3Editions.MapInt64Int64EntryR\rmapInt64Int64o\nmap_uint32_uint32: (2C.goproto.proto.test.TestAllTypesProto3Editions.MapUint32Uint32EntryRmapUint32Uint32o\nmap_uint64_uint64; (2C.goproto.proto.test.TestAllTypesProto3Editions.MapUint64Uint64EntryRmapUint64Uint64o\nmap_sint32_sint32< (2C.goproto.proto.test.TestAllTypesProto3Editions.MapSint32Sint32EntryRmapSint32Sint32o\nmap_sint64_sint64= (2C.goproto.proto.test.TestAllTypesProto3Editions.MapSint64Sint64EntryRmapSint64Sint64u\nmap_fixed32_fixed32> (2E.goproto.proto.test.TestAllTypesProto3Editions.MapFixed32Fixed32EntryRmapFixed32Fixed32u\nmap_fixed64_fixed64? (2E.goproto.proto.test.TestAllTypesProto3Editions.MapFixed64Fixed64EntryRmapFixed64Fixed64{\nmap_sfixed32_sfixed32@ (2G.goproto.proto.test.TestAllTypesProto3Editions.MapSfixed32Sfixed32EntryRmapSfixed32Sfixed32{\nmap_sfixed64_sfixed64A (2G.goproto.proto.test.TestAllTypesProto3Editions.MapSfixed64Sfixed64EntryRmapSfixed64Sfixed64i\nmap_int32_floatB (2A.goproto.proto.test.TestAllTypesProto3Editions.MapInt32FloatEntryR\rmapInt32Floatl\nmap_int32_doubleC (2B.goproto.proto.test.TestAllTypesProto3Editions.MapInt32DoubleEntryRmapInt32Doublec\n\rmap_bool_boolD (2?.goproto.proto.test.TestAllTypesProto3Editions.MapBoolBoolEntryRmapBoolBoolo\nmap_string_stringE (2C.goproto.proto.test.TestAllTypesProto3Editions.MapStringStringEntryRmapStringStringl\nmap_string_bytesF (2B.goproto.proto.test.TestAllTypesProto3Editions.MapStringBytesEntryRmapStringBytes\x85\nmap_string_nested_messageG (2J.goproto.proto.test.TestAllTypesProto3Editions.MapStringNestedMessageEntryRmapStringNestedMessage|\nmap_string_nested_enumI (2G.goproto.proto.test.TestAllTypesProto3Editions.MapStringNestedEnumEntryRmapStringNestedEnum#\noneof_uint32o (\rH\x00RoneofUint32p\noneof_nested_messagep (2<.goproto.proto.test.TestAllTypesProto3Editions.NestedMessageH\x00RoneofNestedMessage#\noneof_stringq (	H\x00RoneofString!\noneof_bytesr (H\x00R\noneofBytes\n\noneof_bools (H\x00R	oneofBool#\noneof_uint64t (H\x00RoneofUint64!\noneof_floatu (H\x00R\noneofFloat#\noneof_doublev (H\x00RoneofDoubleZ\n\noneof_enumw (29.goproto.proto.test.TestAllTypesProto3Editions.NestedEnumH\x00R	oneofEnumo\n\rNestedMessage\na (RaP\ncorecursive (2..goproto.proto.test.TestAllTypesProto3EditionsRcorecursive@\nMapInt32Int32Entry\nkey (Rkey\nvalue (Rvalue:8@\nMapInt64Int64Entry\nkey (Rkey\nvalue (Rvalue:8B\nMapUint32Uint32Entry\nkey (\rRkey\nvalue (\rRvalue:8B\nMapUint64Uint64Entry\nkey (Rkey\nvalue (Rvalue:8B\nMapSint32Sint32Entry\nkey (Rkey\nvalue (Rvalue:8B\nMapSint64Sint64Entry\nkey (Rkey\nvalue (Rvalue:8D\nMapFixed32Fixed32Entry\nkey (Rkey\nvalue (Rvalue:8D\nMapFixed64Fixed64Entry\nkey (Rkey\nvalue (Rvalue:8F\nMapSfixed32Sfixed32Entry\nkey (Rkey\nvalue (Rvalue:8F\nMapSfixed64Sfixed64Entry\nkey (Rkey\nvalue (Rvalue:8@\nMapInt32FloatEntry\nkey (Rkey\nvalue (Rvalue:8A\nMapInt32DoubleEntry\nkey (Rkey\nvalue (Rvalue:8>\nMapBoolBoolEntry\nkey (Rkey\nvalue (Rvalue:8B\nMapStringStringEntry\nkey (	Rkey\nvalue (	Rvalue:8A\nMapStringBytesEntry\nkey (	Rkey\nvalue (Rvalue:8\x87\nMapStringNestedMessageEntry\nkey (	RkeyR\nvalue (2<.goproto.proto.test.TestAllTypesProto3Editions.NestedMessageRvalue:8\x81\nMapStringNestedEnumEntry\nkey (	RkeyO\nvalue (29.goproto.proto.test.TestAllTypesProto3Editions.NestedEnumRvalue:8\"9\n\nNestedEnum\nFOO\x00\nBAR\nBAZ\nNEG\xff\xff\xff\xff\xff\xff\xff\xff\xffB\r\noneof_field\":\nForeignMessageProto3Editions\nc (Rc\nd (Rd*\xa0\nForeignEnumProto3Editions \nFOREIGN_PROTO3_EDITIONS_ZERO\x00\nFOREIGN_PROTO3_EDITIONS_FOO\nFOREIGN_PROTO3_EDITIONS_BAR\nFOREIGN_PROTO3_EDITIONS_BAZBFZ?google.golang.org/protobuf/internal/testprotos/editionsfuzztest\x92beditionsp\xe8"

var (
	file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDescOnce sync.Once
	file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDescData = file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDesc
)

func file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDescGZIP() []byte {
	file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDescOnce.Do(func() {
		file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDescData = string(protoimpl.X.CompressGZIP([]byte(file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDescData)))
	})
	return []byte(file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDescData)
}

var file_internal_testprotos_editionsfuzztest_test3editions_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_internal_testprotos_editionsfuzztest_test3editions_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
var file_internal_testprotos_editionsfuzztest_test3editions_proto_goTypes = []any{
	(ForeignEnumProto3Editions)(0),                   // 0: goproto.proto.test.ForeignEnumProto3Editions
	(TestAllTypesProto3Editions_NestedEnum)(0),       // 1: goproto.proto.test.TestAllTypesProto3Editions.NestedEnum
	(*TestAllTypesProto3Editions)(nil),               // 2: goproto.proto.test.TestAllTypesProto3Editions
	(*ForeignMessageProto3Editions)(nil),             // 3: goproto.proto.test.ForeignMessageProto3Editions
	(*TestAllTypesProto3Editions_NestedMessage)(nil), // 4: goproto.proto.test.TestAllTypesProto3Editions.NestedMessage
	nil, // 5: goproto.proto.test.TestAllTypesProto3Editions.MapInt32Int32Entry
	nil, // 6: goproto.proto.test.TestAllTypesProto3Editions.MapInt64Int64Entry
	nil, // 7: goproto.proto.test.TestAllTypesProto3Editions.MapUint32Uint32Entry
	nil, // 8: goproto.proto.test.TestAllTypesProto3Editions.MapUint64Uint64Entry
	nil, // 9: goproto.proto.test.TestAllTypesProto3Editions.MapSint32Sint32Entry
	nil, // 10: goproto.proto.test.TestAllTypesProto3Editions.MapSint64Sint64Entry
	nil, // 11: goproto.proto.test.TestAllTypesProto3Editions.MapFixed32Fixed32Entry
	nil, // 12: goproto.proto.test.TestAllTypesProto3Editions.MapFixed64Fixed64Entry
	nil, // 13: goproto.proto.test.TestAllTypesProto3Editions.MapSfixed32Sfixed32Entry
	nil, // 14: goproto.proto.test.TestAllTypesProto3Editions.MapSfixed64Sfixed64Entry
	nil, // 15: goproto.proto.test.TestAllTypesProto3Editions.MapInt32FloatEntry
	nil, // 16: goproto.proto.test.TestAllTypesProto3Editions.MapInt32DoubleEntry
	nil, // 17: goproto.proto.test.TestAllTypesProto3Editions.MapBoolBoolEntry
	nil, // 18: goproto.proto.test.TestAllTypesProto3Editions.MapStringStringEntry
	nil, // 19: goproto.proto.test.TestAllTypesProto3Editions.MapStringBytesEntry
	nil, // 20: goproto.proto.test.TestAllTypesProto3Editions.MapStringNestedMessageEntry
	nil, // 21: goproto.proto.test.TestAllTypesProto3Editions.MapStringNestedEnumEntry
}
var file_internal_testprotos_editionsfuzztest_test3editions_proto_depIdxs = []int32{
	4,  // 0: goproto.proto.test.TestAllTypesProto3Editions.singular_nested_message:type_name -> goproto.proto.test.TestAllTypesProto3Editions.NestedMessage
	3,  // 1: goproto.proto.test.TestAllTypesProto3Editions.singular_foreign_message:type_name -> goproto.proto.test.ForeignMessageProto3Editions
	1,  // 2: goproto.proto.test.TestAllTypesProto3Editions.singular_nested_enum:type_name -> goproto.proto.test.TestAllTypesProto3Editions.NestedEnum
	0,  // 3: goproto.proto.test.TestAllTypesProto3Editions.singular_foreign_enum:type_name -> goproto.proto.test.ForeignEnumProto3Editions
	4,  // 4: goproto.proto.test.TestAllTypesProto3Editions.optional_nested_message:type_name -> goproto.proto.test.TestAllTypesProto3Editions.NestedMessage
	3,  // 5: goproto.proto.test.TestAllTypesProto3Editions.optional_foreign_message:type_name -> goproto.proto.test.ForeignMessageProto3Editions
	1,  // 6: goproto.proto.test.TestAllTypesProto3Editions.optional_nested_enum:type_name -> goproto.proto.test.TestAllTypesProto3Editions.NestedEnum
	0,  // 7: goproto.proto.test.TestAllTypesProto3Editions.optional_foreign_enum:type_name -> goproto.proto.test.ForeignEnumProto3Editions
	4,  // 8: goproto.proto.test.TestAllTypesProto3Editions.repeated_nested_message:type_name -> goproto.proto.test.TestAllTypesProto3Editions.NestedMessage
	3,  // 9: goproto.proto.test.TestAllTypesProto3Editions.repeated_foreign_message:type_name -> goproto.proto.test.ForeignMessageProto3Editions
	1,  // 10: goproto.proto.test.TestAllTypesProto3Editions.repeated_nested_enum:type_name -> goproto.proto.test.TestAllTypesProto3Editions.NestedEnum
	0,  // 11: goproto.proto.test.TestAllTypesProto3Editions.repeated_foreign_enum:type_name -> goproto.proto.test.ForeignEnumProto3Editions
	5,  // 12: goproto.proto.test.TestAllTypesProto3Editions.map_int32_int32:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapInt32Int32Entry
	6,  // 13: goproto.proto.test.TestAllTypesProto3Editions.map_int64_int64:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapInt64Int64Entry
	7,  // 14: goproto.proto.test.TestAllTypesProto3Editions.map_uint32_uint32:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapUint32Uint32Entry
	8,  // 15: goproto.proto.test.TestAllTypesProto3Editions.map_uint64_uint64:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapUint64Uint64Entry
	9,  // 16: goproto.proto.test.TestAllTypesProto3Editions.map_sint32_sint32:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapSint32Sint32Entry
	10, // 17: goproto.proto.test.TestAllTypesProto3Editions.map_sint64_sint64:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapSint64Sint64Entry
	11, // 18: goproto.proto.test.TestAllTypesProto3Editions.map_fixed32_fixed32:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapFixed32Fixed32Entry
	12, // 19: goproto.proto.test.TestAllTypesProto3Editions.map_fixed64_fixed64:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapFixed64Fixed64Entry
	13, // 20: goproto.proto.test.TestAllTypesProto3Editions.map_sfixed32_sfixed32:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapSfixed32Sfixed32Entry
	14, // 21: goproto.proto.test.TestAllTypesProto3Editions.map_sfixed64_sfixed64:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapSfixed64Sfixed64Entry
	15, // 22: goproto.proto.test.TestAllTypesProto3Editions.map_int32_float:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapInt32FloatEntry
	16, // 23: goproto.proto.test.TestAllTypesProto3Editions.map_int32_double:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapInt32DoubleEntry
	17, // 24: goproto.proto.test.TestAllTypesProto3Editions.map_bool_bool:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapBoolBoolEntry
	18, // 25: goproto.proto.test.TestAllTypesProto3Editions.map_string_string:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapStringStringEntry
	19, // 26: goproto.proto.test.TestAllTypesProto3Editions.map_string_bytes:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapStringBytesEntry
	20, // 27: goproto.proto.test.TestAllTypesProto3Editions.map_string_nested_message:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapStringNestedMessageEntry
	21, // 28: goproto.proto.test.TestAllTypesProto3Editions.map_string_nested_enum:type_name -> goproto.proto.test.TestAllTypesProto3Editions.MapStringNestedEnumEntry
	4,  // 29: goproto.proto.test.TestAllTypesProto3Editions.oneof_nested_message:type_name -> goproto.proto.test.TestAllTypesProto3Editions.NestedMessage
	1,  // 30: goproto.proto.test.TestAllTypesProto3Editions.oneof_enum:type_name -> goproto.proto.test.TestAllTypesProto3Editions.NestedEnum
	2,  // 31: goproto.proto.test.TestAllTypesProto3Editions.NestedMessage.corecursive:type_name -> goproto.proto.test.TestAllTypesProto3Editions
	4,  // 32: goproto.proto.test.TestAllTypesProto3Editions.MapStringNestedMessageEntry.value:type_name -> goproto.proto.test.TestAllTypesProto3Editions.NestedMessage
	1,  // 33: goproto.proto.test.TestAllTypesProto3Editions.MapStringNestedEnumEntry.value:type_name -> goproto.proto.test.TestAllTypesProto3Editions.NestedEnum
	34, // [34:34] is the sub-list for method output_type
	34, // [34:34] is the sub-list for method input_type
	34, // [34:34] is the sub-list for extension type_name
	34, // [34:34] is the sub-list for extension extendee
	0,  // [0:34] is the sub-list for field type_name
}

func init() { file_internal_testprotos_editionsfuzztest_test3editions_proto_init() }
func file_internal_testprotos_editionsfuzztest_test3editions_proto_init() {
	if File_internal_testprotos_editionsfuzztest_test3editions_proto != nil {
		return
	}
	file_internal_testprotos_editionsfuzztest_test3editions_proto_msgTypes[0].OneofWrappers = []any{
		(*TestAllTypesProto3Editions_OneofUint32)(nil),
		(*TestAllTypesProto3Editions_OneofNestedMessage)(nil),
		(*TestAllTypesProto3Editions_OneofString)(nil),
		(*TestAllTypesProto3Editions_OneofBytes)(nil),
		(*TestAllTypesProto3Editions_OneofBool)(nil),
		(*TestAllTypesProto3Editions_OneofUint64)(nil),
		(*TestAllTypesProto3Editions_OneofFloat)(nil),
		(*TestAllTypesProto3Editions_OneofDouble)(nil),
		(*TestAllTypesProto3Editions_OneofEnum)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDesc), len(file_internal_testprotos_editionsfuzztest_test3editions_proto_rawDesc)),
			NumEnums:      2,
			NumMessages:   20,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_internal_testprotos_editionsfuzztest_test3editions_proto_goTypes,
		DependencyIndexes: file_internal_testprotos_editionsfuzztest_test3editions_proto_depIdxs,
		EnumInfos:         file_internal_testprotos_editionsfuzztest_test3editions_proto_enumTypes,
		MessageInfos:      file_internal_testprotos_editionsfuzztest_test3editions_proto_msgTypes,
	}.Build()
	File_internal_testprotos_editionsfuzztest_test3editions_proto = out.File
	file_internal_testprotos_editionsfuzztest_test3editions_proto_goTypes = nil
	file_internal_testprotos_editionsfuzztest_test3editions_proto_depIdxs = nil
}
