1// Copyright 2018 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5syntax = "proto2"; 6 7package goproto.proto.test; 8 9import "internal/testprotos/enums/enums.proto"; 10import "internal/testprotos/test/test_import.proto"; 11import public "internal/testprotos/test/test_public.proto"; 12import weak "internal/testprotos/test/weak1/test_weak.proto"; 13import weak "internal/testprotos/test/weak2/test_weak.proto"; 14 15option go_package = "google.golang.org/protobuf/internal/testprotos/test"; 16 17message TestAllTypes { 18 message NestedMessage { 19 optional int32 a = 1; 20 optional TestAllTypes corecursive = 2; 21 } 22 23 enum NestedEnum { 24 FOO = 0; 25 BAR = 1; 26 BAZ = 2; 27 NEG = -1; // Intentionally negative. 28 } 29 30 optional int32 optional_int32 = 1; 31 optional int64 optional_int64 = 2; 32 optional uint32 optional_uint32 = 3; 33 optional uint64 optional_uint64 = 4; 34 optional sint32 optional_sint32 = 5; 35 optional sint64 optional_sint64 = 6; 36 optional fixed32 optional_fixed32 = 7; 37 optional fixed64 optional_fixed64 = 8; 38 optional sfixed32 optional_sfixed32 = 9; 39 optional sfixed64 optional_sfixed64 = 10; 40 optional float optional_float = 11; 41 optional double optional_double = 12; 42 optional bool optional_bool = 13; 43 optional string optional_string = 14; 44 optional bytes optional_bytes = 15; 45 optional group OptionalGroup = 16 { 46 optional int32 a = 17; 47 optional NestedMessage optional_nested_message = 1000; 48 optional int32 same_field_number = 16; 49 } 50 optional NestedMessage optional_nested_message = 18; 51 optional ForeignMessage optional_foreign_message = 19; 52 optional ImportMessage optional_import_message = 20; 53 optional NestedEnum optional_nested_enum = 21; 54 optional ForeignEnum optional_foreign_enum = 22; 55 optional ImportEnum optional_import_enum = 23; 56 57 repeated int32 repeated_int32 = 31; 58 repeated int64 repeated_int64 = 32; 59 repeated uint32 repeated_uint32 = 33; 60 repeated uint64 repeated_uint64 = 34; 61 repeated sint32 repeated_sint32 = 35; 62 repeated sint64 repeated_sint64 = 36; 63 repeated fixed32 repeated_fixed32 = 37; 64 repeated fixed64 repeated_fixed64 = 38; 65 repeated sfixed32 repeated_sfixed32 = 39; 66 repeated sfixed64 repeated_sfixed64 = 40; 67 repeated float repeated_float = 41; 68 repeated double repeated_double = 42; 69 repeated bool repeated_bool = 43; 70 repeated string repeated_string = 44; 71 repeated bytes repeated_bytes = 45; 72 repeated group RepeatedGroup = 46 { 73 optional int32 a = 47; 74 optional NestedMessage optional_nested_message = 1001; 75 } 76 repeated NestedMessage repeated_nested_message = 48; 77 repeated ForeignMessage repeated_foreign_message = 49; 78 repeated ImportMessage repeated_importmessage = 50; 79 repeated NestedEnum repeated_nested_enum = 51; 80 repeated ForeignEnum repeated_foreign_enum = 52; 81 repeated ImportEnum repeated_importenum = 53; 82 83 map < int32, int32> map_int32_int32 = 56; 84 map < int64, int64> map_int64_int64 = 57; 85 map < uint32, uint32> map_uint32_uint32 = 58; 86 map < uint64, uint64> map_uint64_uint64 = 59; 87 map < sint32, sint32> map_sint32_sint32 = 60; 88 map < sint64, sint64> map_sint64_sint64 = 61; 89 map < fixed32, fixed32> map_fixed32_fixed32 = 62; 90 map < fixed64, fixed64> map_fixed64_fixed64 = 63; 91 map <sfixed32, sfixed32> map_sfixed32_sfixed32 = 64; 92 map <sfixed64, sfixed64> map_sfixed64_sfixed64 = 65; 93 map < int32, float> map_int32_float = 66; 94 map < int32, double> map_int32_double = 67; 95 map < bool, bool> map_bool_bool = 68; 96 map < string, string> map_string_string = 69; 97 map < string, bytes> map_string_bytes = 70; 98 map < string, NestedMessage> map_string_nested_message = 71; 99 map < string, NestedEnum> map_string_nested_enum = 73; 100 101 // Singular with defaults 102 optional int32 default_int32 = 81 [default = 81 ]; 103 optional int64 default_int64 = 82 [default = 82 ]; 104 optional uint32 default_uint32 = 83 [default = 83 ]; 105 optional uint64 default_uint64 = 84 [default = 84 ]; 106 optional sint32 default_sint32 = 85 [default = -85 ]; 107 optional sint64 default_sint64 = 86 [default = 86 ]; 108 optional fixed32 default_fixed32 = 87 [default = 87 ]; 109 optional fixed64 default_fixed64 = 88 [default = 88 ]; 110 optional sfixed32 default_sfixed32 = 89 [default = 89 ]; 111 optional sfixed64 default_sfixed64 = 80 [default = -90 ]; 112 optional float default_float = 91 [default = 91.5 ]; 113 optional double default_double = 92 [default = 92e3 ]; 114 optional bool default_bool = 93 [default = true ]; 115 optional string default_string = 94 [default = "hello"]; 116 optional bytes default_bytes = 95 [default = "world"]; 117 optional NestedEnum default_nested_enum = 96 [default = BAR ]; 118 optional ForeignEnum default_foreign_enum = 97 [default = FOREIGN_BAR]; 119 120 oneof oneof_field { 121 uint32 oneof_uint32 = 111; 122 NestedMessage oneof_nested_message = 112; 123 string oneof_string = 113; 124 bytes oneof_bytes = 114; 125 bool oneof_bool = 115; 126 uint64 oneof_uint64 = 116; 127 float oneof_float = 117; 128 double oneof_double = 118; 129 NestedEnum oneof_enum = 119; 130 group OneofGroup = 121 { 131 optional int32 a = 1; 132 optional int32 b = 2; 133 } 134 } 135 136 // A oneof with exactly one field. 137 oneof oneof_optional { 138 uint32 oneof_optional_uint32 = 120; 139 } 140} 141 142message TestDeprecatedMessage { 143 option deprecated = true; 144 optional int32 deprecated_int32 = 1 [deprecated=true]; 145 enum DeprecatedEnum { 146 option deprecated = true; 147 DEPRECATED = 0 [deprecated=true]; 148 } 149 oneof deprecated_oneof { 150 int32 deprecated_oneof_field = 2 [deprecated = true]; 151 } 152} 153 154message ForeignMessage { 155 optional int32 c = 1; 156 optional int32 d = 2; 157} 158 159enum ForeignEnum { 160 FOREIGN_FOO = 4; 161 FOREIGN_BAR = 5; 162 FOREIGN_BAZ = 6; 163} 164 165message TestReservedFields { 166 reserved 2, 15, 9 to 11; 167 reserved "bar", "baz"; 168} 169 170enum TestReservedEnumFields { 171 RESERVED_ENUM = 0; 172 reserved 2, 15, 9 to 11; 173 reserved "BAR", "BAZ"; 174} 175 176message TestAllExtensions { 177 message NestedMessage { 178 optional int32 a = 1; 179 optional TestAllExtensions corecursive = 2; 180 } 181 182 extensions 1 to max; 183} 184 185extend TestAllExtensions { 186 optional int32 optional_int32 = 1; 187 optional int64 optional_int64 = 2; 188 optional uint32 optional_uint32 = 3; 189 optional uint64 optional_uint64 = 4; 190 optional sint32 optional_sint32 = 5; 191 optional sint64 optional_sint64 = 6; 192 optional fixed32 optional_fixed32 = 7; 193 optional fixed64 optional_fixed64 = 8; 194 optional sfixed32 optional_sfixed32 = 9; 195 optional sfixed64 optional_sfixed64 = 10; 196 optional float optional_float = 11; 197 optional double optional_double = 12; 198 optional bool optional_bool = 13; 199 optional string optional_string = 14; 200 optional bytes optional_bytes = 15; 201 202 optional group OptionalGroup = 16 { 203 optional int32 a = 17; 204 optional int32 same_field_number = 16; 205 optional TestAllExtensions.NestedMessage optional_nested_message = 1000; 206 } 207 208 optional TestAllExtensions.NestedMessage optional_nested_message = 18; 209 optional TestAllTypes.NestedEnum optional_nested_enum = 21; 210 211 repeated int32 repeated_int32 = 31; 212 repeated int64 repeated_int64 = 32; 213 repeated uint32 repeated_uint32 = 33; 214 repeated uint64 repeated_uint64 = 34; 215 repeated sint32 repeated_sint32 = 35; 216 repeated sint64 repeated_sint64 = 36; 217 repeated fixed32 repeated_fixed32 = 37; 218 repeated fixed64 repeated_fixed64 = 38; 219 repeated sfixed32 repeated_sfixed32 = 39; 220 repeated sfixed64 repeated_sfixed64 = 40; 221 repeated float repeated_float = 41; 222 repeated double repeated_double = 42; 223 repeated bool repeated_bool = 43; 224 repeated string repeated_string = 44; 225 repeated bytes repeated_bytes = 45; 226 227 repeated group RepeatedGroup = 46 { 228 optional int32 a = 47; 229 optional TestAllExtensions.NestedMessage optional_nested_message = 1001; 230 } 231 232 repeated TestAllExtensions.NestedMessage repeated_nested_message = 48; 233 repeated TestAllTypes.NestedEnum repeated_nested_enum = 51; 234 235 optional int32 default_int32 = 81 [default = 81 ]; 236 optional int64 default_int64 = 82 [default = 82 ]; 237 optional uint32 default_uint32 = 83 [default = 83 ]; 238 optional uint64 default_uint64 = 84 [default = 84 ]; 239 optional sint32 default_sint32 = 85 [default = -85 ]; 240 optional sint64 default_sint64 = 86 [default = 86 ]; 241 optional fixed32 default_fixed32 = 87 [default = 87 ]; 242 optional fixed64 default_fixed64 = 88 [default = 88 ]; 243 optional sfixed32 default_sfixed32 = 89 [default = 89 ]; 244 optional sfixed64 default_sfixed64 = 80 [default = -90 ]; 245 optional float default_float = 91 [default = 91.5 ]; 246 optional double default_double = 92 [default = 92e3 ]; 247 optional bool default_bool = 93 [default = true ]; 248 optional string default_string = 94 [default = "hello"]; 249 optional bytes default_bytes = 95 [default = "world"]; 250} 251 252message TestNestedExtension { 253 extend TestAllExtensions { 254 optional string nested_string_extension = 1003; 255 } 256} 257 258message TestRequired { 259 required int32 required_field = 1; 260 261 extend TestAllExtensions { 262 optional TestRequired single = 1000; 263 repeated TestRequired multi = 1001; 264 } 265} 266 267message TestRequiredForeign { 268 optional TestRequired optional_message = 1; 269 repeated TestRequired repeated_message = 2; 270 map<int32, TestRequired> map_message = 3; 271 oneof oneof_field { 272 TestRequired oneof_message = 4; 273 } 274} 275 276message TestRequiredGroupFields { 277 optional group OptionalGroup = 1 { 278 required int32 a = 2; 279 } 280 repeated group RepeatedGroup = 3 { 281 required int32 a = 4; 282 } 283} 284 285message TestWeak { 286 optional goproto.proto.test.weak.WeakImportMessage1 weak_message1 = 1 [weak=true]; 287 optional goproto.proto.test.weak.WeakImportMessage2 weak_message2 = 2 [weak=true]; 288} 289 290message TestPackedTypes { 291 repeated int32 packed_int32 = 90 [packed = true]; 292 repeated int64 packed_int64 = 91 [packed = true]; 293 repeated uint32 packed_uint32 = 92 [packed = true]; 294 repeated uint64 packed_uint64 = 93 [packed = true]; 295 repeated sint32 packed_sint32 = 94 [packed = true]; 296 repeated sint64 packed_sint64 = 95 [packed = true]; 297 repeated fixed32 packed_fixed32 = 96 [packed = true]; 298 repeated fixed64 packed_fixed64 = 97 [packed = true]; 299 repeated sfixed32 packed_sfixed32 = 98 [packed = true]; 300 repeated sfixed64 packed_sfixed64 = 99 [packed = true]; 301 repeated float packed_float = 100 [packed = true]; 302 repeated double packed_double = 101 [packed = true]; 303 repeated bool packed_bool = 102 [packed = true]; 304 repeated ForeignEnum packed_enum = 103 [packed = true]; 305} 306 307message TestUnpackedTypes { 308 repeated int32 unpacked_int32 = 90 [packed = false]; 309 repeated int64 unpacked_int64 = 91 [packed = false]; 310 repeated uint32 unpacked_uint32 = 92 [packed = false]; 311 repeated uint64 unpacked_uint64 = 93 [packed = false]; 312 repeated sint32 unpacked_sint32 = 94 [packed = false]; 313 repeated sint64 unpacked_sint64 = 95 [packed = false]; 314 repeated fixed32 unpacked_fixed32 = 96 [packed = false]; 315 repeated fixed64 unpacked_fixed64 = 97 [packed = false]; 316 repeated sfixed32 unpacked_sfixed32 = 98 [packed = false]; 317 repeated sfixed64 unpacked_sfixed64 = 99 [packed = false]; 318 repeated float unpacked_float = 100 [packed = false]; 319 repeated double unpacked_double = 101 [packed = false]; 320 repeated bool unpacked_bool = 102 [packed = false]; 321 repeated ForeignEnum unpacked_enum = 103 [packed = false]; 322} 323 324message TestPackedExtensions { 325 extensions 1 to max; 326} 327 328extend TestPackedExtensions { 329 repeated int32 packed_int32 = 90 [packed = true]; 330 repeated int64 packed_int64 = 91 [packed = true]; 331 repeated uint32 packed_uint32 = 92 [packed = true]; 332 repeated uint64 packed_uint64 = 93 [packed = true]; 333 repeated sint32 packed_sint32 = 94 [packed = true]; 334 repeated sint64 packed_sint64 = 95 [packed = true]; 335 repeated fixed32 packed_fixed32 = 96 [packed = true]; 336 repeated fixed64 packed_fixed64 = 97 [packed = true]; 337 repeated sfixed32 packed_sfixed32 = 98 [packed = true]; 338 repeated sfixed64 packed_sfixed64 = 99 [packed = true]; 339 repeated float packed_float = 100 [packed = true]; 340 repeated double packed_double = 101 [packed = true]; 341 repeated bool packed_bool = 102 [packed = true]; 342 repeated ForeignEnum packed_enum = 103 [packed = true]; 343} 344 345message TestUnpackedExtensions { 346 extensions 1 to max; 347} 348 349extend TestUnpackedExtensions { 350 repeated int32 unpacked_int32 = 90 [packed = false]; 351 repeated int64 unpacked_int64 = 91 [packed = false]; 352 repeated uint32 unpacked_uint32 = 92 [packed = false]; 353 repeated uint64 unpacked_uint64 = 93 [packed = false]; 354 repeated sint32 unpacked_sint32 = 94 [packed = false]; 355 repeated sint64 unpacked_sint64 = 95 [packed = false]; 356 repeated fixed32 unpacked_fixed32 = 96 [packed = false]; 357 repeated fixed64 unpacked_fixed64 = 97 [packed = false]; 358 repeated sfixed32 unpacked_sfixed32 = 98 [packed = false]; 359 repeated sfixed64 unpacked_sfixed64 = 99 [packed = false]; 360 repeated float unpacked_float = 100 [packed = false]; 361 repeated double unpacked_double = 101 [packed = false]; 362 repeated bool unpacked_bool = 102 [packed = false]; 363 repeated ForeignEnum unpacked_enum = 103 [packed = false]; 364} 365 366// Test that RPC services work. 367message FooRequest {} 368message FooResponse {} 369 370service TestService { 371 rpc Foo(FooRequest) returns (FooResponse); 372 rpc TestStream(stream FooRequest) returns (stream FooResponse); 373} 374 375service TestDeprecatedService { 376 option deprecated = true; 377 rpc Deprecated(TestDeprecatedMessage) returns (TestDeprecatedMessage) { 378 option deprecated = true; 379 } 380} 381 382message WeirdDefault { 383 optional bytes weird_default = 1 [default = "hello, \"world!\"\ndead\xde\xad\xbe\xefbeef`"]; 384} 385 386message RemoteDefault { 387 optional goproto.proto.enums.Enum default = 1; 388 optional goproto.proto.enums.Enum zero = 2 [default = ZERO]; 389 optional goproto.proto.enums.Enum one = 3 [default = ONE]; 390 optional goproto.proto.enums.Enum elevent = 4 [default = ELEVENT]; 391 optional goproto.proto.enums.Enum seventeen = 5 [default = SEVENTEEN]; 392 optional goproto.proto.enums.Enum thirtyseven = 6 [default = THIRTYSEVEN]; 393 optional goproto.proto.enums.Enum sixtyseven = 7 [default = SIXTYSEVEN]; 394 optional goproto.proto.enums.Enum negative = 8 [default = NEGATIVE]; 395} 396