1syntax = "proto3"; 2 3package foo; 4 5import 'google/protobuf/any.proto'; 6import 'google/protobuf/struct.proto'; 7import 'google/protobuf/wrappers.proto'; 8import 'proto/test_empty_php_namespace.proto'; 9import 'proto/test_include.proto'; 10import 'proto/test_no_namespace.proto'; 11import 'proto/test_php_namespace.proto'; 12import 'proto/test_prefix.proto'; 13 14message TestMessage { 15 // Singular 16 int32 optional_int32 = 1; 17 int64 optional_int64 = 2; 18 uint32 optional_uint32 = 3; 19 uint64 optional_uint64 = 4; 20 sint32 optional_sint32 = 5; 21 sint64 optional_sint64 = 6; 22 fixed32 optional_fixed32 = 7; 23 fixed64 optional_fixed64 = 8; 24 sfixed32 optional_sfixed32 = 9; 25 sfixed64 optional_sfixed64 = 10; 26 float optional_float = 11; 27 double optional_double = 12; 28 bool optional_bool = 13; 29 string optional_string = 14; 30 bytes optional_bytes = 15; 31 32 TestEnum optional_enum = 16; 33 Sub optional_message = 17; 34 bar.TestInclude optional_included_message = 18; 35 TestMessage recursive = 19; 36 37 // True optional 38 optional int32 true_optional_int32 = 201; 39 optional int64 true_optional_int64 = 202; 40 optional uint32 true_optional_uint32 = 203; 41 optional uint64 true_optional_uint64 = 204; 42 optional sint32 true_optional_sint32 = 205; 43 optional sint64 true_optional_sint64 = 206; 44 optional fixed32 true_optional_fixed32 = 207; 45 optional fixed64 true_optional_fixed64 = 208; 46 optional sfixed32 true_optional_sfixed32 = 209; 47 optional sfixed64 true_optional_sfixed64 = 210; 48 optional float true_optional_float = 211; 49 optional double true_optional_double = 212; 50 optional bool true_optional_bool = 213; 51 optional string true_optional_string = 214; 52 optional bytes true_optional_bytes = 215; 53 54 optional TestEnum true_optional_enum = 216; 55 optional Sub true_optional_message = 217; 56 optional bar.TestInclude true_optional_included_message = 218; 57 58 // Repeated 59 repeated int32 repeated_int32 = 31; 60 repeated int64 repeated_int64 = 32; 61 repeated uint32 repeated_uint32 = 33; 62 repeated uint64 repeated_uint64 = 34; 63 repeated sint32 repeated_sint32 = 35; 64 repeated sint64 repeated_sint64 = 36; 65 repeated fixed32 repeated_fixed32 = 37; 66 repeated fixed64 repeated_fixed64 = 38; 67 repeated sfixed32 repeated_sfixed32 = 39; 68 repeated sfixed64 repeated_sfixed64 = 40; 69 repeated float repeated_float = 41; 70 repeated double repeated_double = 42; 71 repeated bool repeated_bool = 43; 72 repeated string repeated_string = 44; 73 repeated bytes repeated_bytes = 45; 74 75 repeated TestEnum repeated_enum = 46; 76 repeated Sub repeated_message = 47; 77 repeated TestMessage repeated_recursive = 48; 78 79 oneof my_oneof { 80 int32 oneof_int32 = 51; 81 int64 oneof_int64 = 52; 82 uint32 oneof_uint32 = 53; 83 uint64 oneof_uint64 = 54; 84 uint32 oneof_sint32 = 55; 85 uint64 oneof_sint64 = 56; 86 uint32 oneof_fixed32 = 57; 87 uint64 oneof_fixed64 = 58; 88 uint32 oneof_sfixed32 = 59; 89 uint64 oneof_sfixed64 = 60; 90 double oneof_double = 61; 91 float oneof_float = 62; 92 bool oneof_bool = 63; 93 string oneof_string = 64; 94 bytes oneof_bytes = 65; 95 TestEnum oneof_enum = 66; 96 Sub oneof_message = 67; 97 } 98 99 map<int32, int32> map_int32_int32 = 71; 100 map<int64, int64> map_int64_int64 = 72; 101 map<uint32, uint32> map_uint32_uint32 = 73; 102 map<uint64, uint64> map_uint64_uint64 = 74; 103 map<sint32, sint32> map_sint32_sint32 = 75; 104 map<sint64, sint64> map_sint64_sint64 = 76; 105 map<fixed32, fixed32> map_fixed32_fixed32 = 77; 106 map<fixed64, fixed64> map_fixed64_fixed64 = 78; 107 map<sfixed32, sfixed32> map_sfixed32_sfixed32 = 79; 108 map<sfixed64, sfixed64> map_sfixed64_sfixed64 = 80; 109 map<int32, float> map_int32_float = 81; 110 map<int32, double> map_int32_double = 82; 111 map<bool, bool> map_bool_bool = 83; 112 map<string, string> map_string_string = 84; 113 map<int32, bytes> map_int32_bytes = 85; 114 map<int32, TestEnum> map_int32_enum = 86; 115 map<int32, Sub> map_int32_message = 87; 116 117 map<int32, TestMessage> map_recursive = 88; 118 119 message Sub { 120 int32 a = 1; 121 repeated int32 b = 2; 122 } 123 124 // Reserved for non-existing field test. 125 // int32 non_exist = 89; 126 127 NoNamespaceMessage optional_no_namespace_message = 91; 128 NoNamespaceEnum optional_no_namespace_enum = 92; 129 repeated NoNamespaceMessage repeated_no_namespace_message = 93; 130 repeated NoNamespaceEnum repeated_no_namespace_enum = 94; 131 132 enum NestedEnum { 133 ZERO = 0; 134 } 135 136 NestedEnum optional_nested_enum = 101; 137 138 // Test prefix for reserved words. 139 message Empty { 140 int32 a = 1; 141 } 142 143 reserved 111; 144 145 // Test map with missing message value 146 map<string, TestMessage> map_string_message = 121; 147 map<string, google.protobuf.Any> map_string_any = 122; 148 map<string, google.protobuf.ListValue> map_string_list = 123; 149 map<string, google.protobuf.Struct> map_string_struct = 124; 150 151 // deprecated field 152 int32 deprecated_int32 = 125 [deprecated = true]; 153 // deprecated optional field 154 optional int32 deprecated_optional_int32 = 126 [deprecated = true]; 155 // deprecated wrapped field 156 google.protobuf.Int32Value deprecated_int32_value = 127 [deprecated = true]; 157 // deprecated oneof 158 oneof deprecated_oneof { 159 int32 deprecated_oneof_int32 = 128 [deprecated = true]; 160 } 161 // deprecated repeated field 162 repeated int32 deprecated_repeated_int32 = 129 [deprecated = true]; 163 // deprecated map 164 map<int32, int32> deprecated_map_int32_int32 = 130 [deprecated = true]; 165 // deprecated any 166 google.protobuf.Any deprecated_any = 131 [deprecated = true]; 167 // deprecated message 168 TestMessage deprecated_message = 132 [deprecated = true]; 169 // deprecated enum 170 NestedEnum deprecated_enum = 133 [deprecated = true]; 171} 172 173enum TestEnum { 174 ZERO = 0; 175 ONE = 1; 176 TWO = 2; 177 ECHO = 3; // Test reserved name. 178} 179 180// Test prefix for reserved words. 181message Empty { 182 int32 a = 1; 183} 184 185message ARRAY { 186 int32 a = 1; 187} 188 189message EmptyAnySerialization { 190 string a = 1; 191} 192 193message TestPackedMessage { 194 repeated int32 repeated_int32 = 90 [packed = true]; 195 repeated int64 repeated_int64 = 91 [packed = true]; 196 repeated uint32 repeated_uint32 = 92 [packed = true]; 197 repeated uint64 repeated_uint64 = 93 [packed = true]; 198 repeated sint32 repeated_sint32 = 94 [packed = true]; 199 repeated sint64 repeated_sint64 = 95 [packed = true]; 200 repeated fixed32 repeated_fixed32 = 96 [packed = true]; 201 repeated fixed64 repeated_fixed64 = 97 [packed = true]; 202 repeated sfixed32 repeated_sfixed32 = 98 [packed = true]; 203 repeated sfixed64 repeated_sfixed64 = 99 [packed = true]; 204 repeated float repeated_float = 100 [packed = true]; 205 repeated double repeated_double = 101 [packed = true]; 206 repeated bool repeated_bool = 102 [packed = true]; 207 repeated TestEnum repeated_enum = 103 [packed = true]; 208} 209 210// Need to be in sync with TestPackedMessage. 211message TestUnpackedMessage { 212 repeated int32 repeated_int32 = 90 [packed = false]; 213 repeated int64 repeated_int64 = 91 [packed = false]; 214 repeated uint32 repeated_uint32 = 92 [packed = false]; 215 repeated uint64 repeated_uint64 = 93 [packed = false]; 216 repeated sint32 repeated_sint32 = 94 [packed = false]; 217 repeated sint64 repeated_sint64 = 95 [packed = false]; 218 repeated fixed32 repeated_fixed32 = 96 [packed = false]; 219 repeated fixed64 repeated_fixed64 = 97 [packed = false]; 220 repeated sfixed32 repeated_sfixed32 = 98 [packed = false]; 221 repeated sfixed64 repeated_sfixed64 = 99 [packed = false]; 222 repeated float repeated_float = 100 [packed = false]; 223 repeated double repeated_double = 101 [packed = false]; 224 repeated bool repeated_bool = 102 [packed = false]; 225 repeated TestEnum repeated_enum = 103 [packed = false]; 226} 227 228// /**/@<>&\{ 229message TestPhpDoc { 230 int32 a = 1; 231} 232 233message TestIncludePrefixMessage { 234 TestPrefix prefix_message = 1; 235} 236 237message TestIncludeNamespaceMessage { 238 TestNamespace namespace_message = 1; 239 TestEmptyNamespace empty_namespace_message = 2; 240} 241 242// This will cause upb fields not ordered by the order in the generated code. 243message TestRandomFieldOrder { 244 int64 tag13 = 150; 245 string tag14 = 160; 246} 247 248message TestLargeFieldNumber { 249 int32 large_field_number = 536870911; 250} 251 252message TestReverseFieldOrder { 253 repeated int32 a = 2; 254 string b = 1; 255} 256 257message testLowerCaseMessage {} 258 259enum testLowerCaseEnum { 260 VALUE = 0; 261} 262 263message TestAny { 264 google.protobuf.Any any = 1; 265} 266 267message TestInt32Value { 268 google.protobuf.Int32Value field = 1; 269 repeated google.protobuf.Int32Value repeated_field = 2; 270 oneof oneof_fields { 271 google.protobuf.Int32Value oneof_field = 3; 272 int32 int32_field = 4; 273 } 274} 275 276message TestInt64Value { 277 google.protobuf.Int64Value field = 1; 278 repeated google.protobuf.Int64Value repeated_field = 2; 279 oneof oneof_fields { 280 google.protobuf.Int64Value oneof_field = 3; 281 int32 int32_field = 4; 282 } 283} 284 285message TestUInt32Value { 286 google.protobuf.UInt32Value field = 1; 287 repeated google.protobuf.UInt32Value repeated_field = 2; 288 oneof oneof_fields { 289 google.protobuf.UInt32Value oneof_field = 3; 290 int32 int32_field = 4; 291 } 292} 293 294message TestUInt64Value { 295 google.protobuf.UInt64Value field = 1; 296 repeated google.protobuf.UInt64Value repeated_field = 2; 297 oneof oneof_fields { 298 google.protobuf.UInt64Value oneof_field = 3; 299 int32 int32_field = 4; 300 } 301} 302 303message TestBoolValue { 304 google.protobuf.BoolValue field = 1; 305 repeated google.protobuf.BoolValue repeated_field = 2; 306 oneof oneof_fields { 307 google.protobuf.BoolValue oneof_field = 3; 308 int32 int32_field = 4; 309 } 310} 311 312message TestStringValue { 313 google.protobuf.StringValue field = 1; 314 repeated google.protobuf.StringValue repeated_field = 2; 315 oneof oneof_fields { 316 google.protobuf.StringValue oneof_field = 3; 317 int32 int32_field = 4; 318 } 319 map<int32, google.protobuf.StringValue> map_field = 5; 320} 321 322message TestBytesValue { 323 google.protobuf.BytesValue field = 1; 324 repeated google.protobuf.BytesValue repeated_field = 2; 325 oneof oneof_fields { 326 google.protobuf.BytesValue oneof_field = 3; 327 int32 int32_field = 4; 328 } 329} 330 331message Test32Fields { 332 optional uint32 id = 1; 333 optional uint32 random_name_a0 = 2; 334 optional uint32 random_name_a1 = 3; 335 optional uint32 random_name_a2 = 4; 336 optional uint32 random_name_a3 = 5; 337 optional uint32 random_name_a4 = 6; 338 optional uint32 random_name_a5 = 7; 339 optional uint32 random_name_a6 = 8; 340 optional uint32 random_name_a7 = 9; 341 optional uint32 random_name_a8 = 10; 342 optional uint32 random_name_a9 = 11; 343 optional uint32 random_name_b0 = 12; 344 optional uint32 random_name_b1 = 13; 345 optional uint32 random_name_b2 = 14; 346 optional uint32 random_name_b3 = 15; 347 optional uint32 random_name_b4 = 16; 348 optional uint32 random_name_b5 = 17; 349 optional uint32 random_name_b6 = 18; 350 optional uint32 random_name_b7 = 19; 351 optional uint32 random_name_b8 = 20; 352 optional uint32 random_name_b9 = 21; 353 optional uint32 random_name_c0 = 22; 354 optional uint32 random_name_c1 = 23; 355 optional uint32 random_name_c2 = 24; 356 optional uint32 random_name_c3 = 25; 357 optional uint32 random_name_c4 = 26; 358 optional uint32 random_name_c5 = 27; 359 optional uint32 random_name_c6 = 28; 360 optional uint32 random_name_c7 = 29; 361 optional uint32 random_name_c8 = 30; 362 optional uint32 random_name_c9 = 31; 363 optional string version = 32; 364} 365