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

syntax = "proto3";

package google.golang.org.proto3_20160519;
option go_package = "google.golang.org/protobuf/internal/testprotos/legacy/proto3_20160519_a4ab9ec5";

enum SiblingEnum {
	ALPHA   = 0;
	BRAVO   = 10;
	CHARLIE = 200;
}

message SiblingMessage {
	string          f1 = 1;
	repeated string f2 = 2;
	Message         f3 = 3;
}

message Message {
	enum ChildEnum {
		ALPHA   = 0;
		BRAVO   = 1;
		CHARLIE = 2;
	}
	message ChildMessage {
		string          f1 = 1;
		repeated string f2 = 2;
		Message         f3 = 3;
	}

	// Optional fields.
	bool     optional_bool     = 100;
	int32    optional_int32    = 101;
	sint32   optional_sint32   = 102;
	uint32   optional_uint32   = 103;
	int64    optional_int64    = 104;
	sint64   optional_sint64   = 105;
	uint64   optional_uint64   = 106;
	fixed32  optional_fixed32  = 107;
	sfixed32 optional_sfixed32 = 108;
	float    optional_float    = 109;
	fixed64  optional_fixed64  = 110;
	sfixed64 optional_sfixed64 = 111;
	double   optional_double   = 112;
	string   optional_string   = 113;
	bytes    optional_bytes    = 114;

	ChildEnum      optional_child_enum      = 115;
	ChildMessage   optional_child_message   = 116;
	SiblingEnum    optional_sibling_enum    = 117;
	SiblingMessage optional_sibling_message = 118;

	// Repeated fields.
	repeated bool     repeated_bool     = 200;
	repeated int32    repeated_int32    = 201;
	repeated sint32   repeated_sint32   = 202;
	repeated uint32   repeated_uint32   = 203;
	repeated int64    repeated_int64    = 204;
	repeated sint64   repeated_sint64   = 205;
	repeated uint64   repeated_uint64   = 206;
	repeated fixed32  repeated_fixed32  = 207;
	repeated sfixed32 repeated_sfixed32 = 208;
	repeated float    repeated_float    = 209;
	repeated fixed64  repeated_fixed64  = 210;
	repeated sfixed64 repeated_sfixed64 = 211;
	repeated double   repeated_double   = 212;
	repeated string   repeated_string   = 213;
	repeated bytes    repeated_bytes    = 214;

	repeated ChildEnum      repeated_child_enum      = 215;
	repeated ChildMessage   repeated_child_message   = 216;
	repeated SiblingEnum    repeated_sibling_enum    = 217;
	repeated SiblingMessage repeated_sibling_message = 218;

	// Map fields.
	map<bool, bool>     map_bool_bool     = 300;
	map<bool, int32>    map_bool_int32    = 301;
	map<bool, sint32>   map_bool_sint32   = 302;
	map<bool, uint32>   map_bool_uint32   = 303;
	map<bool, int64>    map_bool_int64    = 304;
	map<bool, sint64>   map_bool_sint64   = 305;
	map<bool, uint64>   map_bool_uint64   = 306;
	map<bool, fixed32>  map_bool_fixed32  = 307;
	map<bool, sfixed32> map_bool_sfixed32 = 308;
	map<bool, float>    map_bool_float    = 309;
	map<bool, fixed64>  map_bool_fixed64  = 310;
	map<bool, sfixed64> map_bool_sfixed64 = 311;
	map<bool, double>   map_bool_double   = 312;
	map<bool, string>   map_bool_string   = 313;
	map<bool, bytes>    map_bool_bytes    = 314;

	map<bool, ChildEnum>      map_bool_child_enum      = 315;
	map<bool, ChildMessage>   map_bool_child_message   = 316;
	map<bool, SiblingEnum>    map_bool_sibling_enum    = 317;
	map<bool, SiblingMessage> map_bool_sibling_message = 318;

	map<int32, bool>   map_int32_bool   = 319;
	map<sint32, bool>  map_sint32_bool  = 320;
	map<uint32, bool>  map_uint32_bool  = 321;
	map<int64, bool>   map_int64_bool   = 322;
	map<sint64, bool>  map_sint64_bool  = 323;
	map<uint64, bool>  map_uint64_bool  = 324;
	map<fixed32, bool> map_fixed32_bool = 325;
	map<string, bool>  map_string_bool  = 326;

	// Oneof fields.
	oneof oneof_union {
		bool     oneof_bool     = 400;
		int32    oneof_int32    = 401;
		sint32   oneof_sint32   = 402;
		uint32   oneof_uint32   = 403;
		int64    oneof_int64    = 404;
		sint64   oneof_sint64   = 405;
		uint64   oneof_uint64   = 406;
		fixed32  oneof_fixed32  = 407;
		sfixed32 oneof_sfixed32 = 408;
		float    oneof_float    = 409;
		fixed64  oneof_fixed64  = 410;
		sfixed64 oneof_sfixed64 = 411;
		double   oneof_double   = 412;
		string   oneof_string   = 413;
		bytes    oneof_bytes    = 414;

		ChildEnum      oneof_child_enum      = 415;
		ChildMessage   oneof_child_message   = 416;
		SiblingEnum    oneof_sibling_enum    = 417;
		SiblingMessage oneof_sibling_message = 418;

		string oneof_string1 = 419;
		string oneof_string2 = 420;
		string oneof_string3 = 421;
	}
}
