syntax = "proto3"; package basic_test; import "google/protobuf/descriptor.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; import "test_import_proto2.proto"; option deprecated = true; message Foo { Bar bar = 1; repeated Baz baz = 2; } message Bar { string msg = 1; } message Baz { string msg = 1; } message TestMessage { optional int32 optional_int32 = 1; optional int64 optional_int64 = 2; optional uint32 optional_uint32 = 3; optional uint64 optional_uint64 = 4; optional bool optional_bool = 5; optional float optional_float = 6; optional double optional_double = 7; optional string optional_string = 8; optional bytes optional_bytes = 9; optional TestMessage2 optional_msg = 10; optional TestEnum optional_enum = 11; optional foo_bar.proto2.TestImportedMessage optional_proto2_submessage = 24; repeated int32 repeated_int32 = 12; repeated int64 repeated_int64 = 13; repeated uint32 repeated_uint32 = 14; repeated uint64 repeated_uint64 = 15; repeated bool repeated_bool = 16; repeated float repeated_float = 17; repeated double repeated_double = 18; repeated string repeated_string = 19; repeated bytes repeated_bytes = 20; repeated TestMessage2 repeated_msg = 21; repeated TestEnum repeated_enum = 22; optional TestSingularFields optional_msg2 = 23; } message TestUnpackedMessage { repeated int32 repeated_int32 = 25 [packed = false]; } message TestSingularFields { int32 singular_int32 = 1; int64 singular_int64 = 2; uint32 singular_uint32 = 3; uint64 singular_uint64 = 4; bool singular_bool = 5; float singular_float = 6; double singular_double = 7; string singular_string = 8; bytes singular_bytes = 9; TestMessage2 singular_msg = 10; TestEnum singular_enum = 11; } message TestMessage2 { optional int32 foo = 1; } extend google.protobuf.OneofOptions { optional string test_top_level_option = 1000; } message TestDeprecatedMessage { option deprecated = true; extend google.protobuf.OneofOptions { optional string test_nested_option = 1001; } optional int32 foo = 1 [deprecated = true]; oneof test_deprecated_message_oneof { option (test_top_level_option) = "Custom option value"; option (test_nested_option) = "Another custom option value"; string a = 2; int32 b = 3; } map map_string_msg = 4; repeated TestMessage2 repeated_msg = 5; } enum TestEnum { Default = 0; A = 1; B = 2; C = 3; v0 = 4; } enum TestDeprecatedEnum { option deprecated = true; DefaultA = 0; AA = 1 [deprecated = true]; } message TestEmbeddedMessageParent { TestEmbeddedMessageChild child_msg = 1; int32 number = 2; repeated TestEmbeddedMessageChild repeated_msg = 3; repeated int32 repeated_number = 4; } message TestEmbeddedMessageChild { TestMessage sub_child = 1; } message Recursive1 { Recursive2 foo = 1; } message Recursive2 { Recursive1 foo = 1; } message MapMessage { map map_string_int32 = 1; map map_string_msg = 2; map map_string_enum = 3; } message MapMessageWireEquiv { repeated MapMessageWireEquiv_entry1 map_string_int32 = 1; repeated MapMessageWireEquiv_entry2 map_string_msg = 2; } message MapMessageWireEquiv_entry1 { string key = 1; int32 value = 2; } message MapMessageWireEquiv_entry2 { string key = 1; TestMessage2 value = 2; } message OneofMessage { oneof my_oneof { string a = 1; int32 b = 2; TestMessage2 c = 3; TestEnum d = 4; } } message Outer { map items = 1; } message Inner {} message Wrapper { google.protobuf.DoubleValue double = 1; google.protobuf.FloatValue float = 2; google.protobuf.Int32Value int32 = 3; google.protobuf.Int64Value int64 = 4; google.protobuf.UInt32Value uint32 = 5; google.protobuf.UInt64Value uint64 = 6; google.protobuf.BoolValue bool = 7; google.protobuf.StringValue string = 8; google.protobuf.BytesValue bytes = 9; string real_string = 100; oneof a_oneof { string string_in_oneof = 10; } // Repeated wrappers don't make sense, but we still need to make sure they // work and don't crash. repeated google.protobuf.DoubleValue repeated_double = 11; repeated google.protobuf.FloatValue repeated_float = 12; repeated google.protobuf.Int32Value repeated_int32 = 13; repeated google.protobuf.Int64Value repeated_int64 = 14; repeated google.protobuf.UInt32Value repeated_uint32 = 15; repeated google.protobuf.UInt64Value repeated_uint64 = 16; repeated google.protobuf.BoolValue repeated_bool = 17; repeated google.protobuf.StringValue repeated_string = 18; repeated google.protobuf.BytesValue repeated_bytes = 19; // Wrappers as map keys don't make sense, but we still need to make sure they // work and don't crash. map map_double = 21; map map_float = 22; map map_int32 = 23; map map_int64 = 24; map map_uint32 = 25; map map_uint64 = 26; map map_bool = 27; map map_string = 28; map map_bytes = 29; // Wrappers in oneofs don't make sense, but we still need to make sure they // work and don't crash. oneof wrapper_oneof { google.protobuf.DoubleValue oneof_double = 31; google.protobuf.FloatValue oneof_float = 32; google.protobuf.Int32Value oneof_int32 = 33; google.protobuf.Int64Value oneof_int64 = 34; google.protobuf.UInt32Value oneof_uint32 = 35; google.protobuf.UInt64Value oneof_uint64 = 36; google.protobuf.BoolValue oneof_bool = 37; google.protobuf.StringValue oneof_string = 38; google.protobuf.BytesValue oneof_bytes = 39; string oneof_plain_string = 101; } } message TimeMessage { google.protobuf.Timestamp timestamp = 1; google.protobuf.Duration duration = 2; } message Enumer { TestEnum optional_enum = 1; repeated TestEnum repeated_enum = 2; string a_const = 3; oneof a_oneof { string str = 10; TestEnum const = 11; } } message MyRepeatedStruct { repeated MyStruct structs = 1; } message MyStruct { string string = 1; google.protobuf.Struct struct = 2; } message WithJsonName { optional int32 foo_bar = 1 [json_name = "jsonFooBar"]; repeated WithJsonName baz = 2 [json_name = "jsonBaz"]; } message HelloRequest { optional uint32 id = 1; optional uint32 random_name_a0 = 2; optional uint32 random_name_a1 = 3; optional uint32 random_name_a2 = 4; optional uint32 random_name_a3 = 5; optional uint32 random_name_a4 = 6; optional uint32 random_name_a5 = 7; optional uint32 random_name_a6 = 8; optional uint32 random_name_a7 = 9; optional uint32 random_name_a8 = 10; optional uint32 random_name_a9 = 11; optional uint32 random_name_b0 = 12; optional uint32 random_name_b1 = 13; optional uint32 random_name_b2 = 14; optional uint32 random_name_b3 = 15; optional uint32 random_name_b4 = 16; optional uint32 random_name_b5 = 17; optional uint32 random_name_b6 = 18; optional uint32 random_name_b7 = 19; optional uint32 random_name_b8 = 20; optional uint32 random_name_b9 = 21; optional uint32 random_name_c0 = 22; optional uint32 random_name_c1 = 23; optional uint32 random_name_c2 = 24; optional uint32 random_name_c3 = 25; optional uint32 random_name_c4 = 26; optional uint32 random_name_c5 = 27; optional uint32 random_name_c6 = 28; optional uint32 random_name_c7 = 29; optional uint32 random_name_c8 = 30; optional uint32 random_name_c9 = 31; optional string version = 32; } message BadFieldNames { optional int32 dup = 1; optional int32 class = 2; } // Messages to test the fix for // https://github.com/protocolbuffers/protobuf/issues/8311. message Inner8311 { // Removing either of these fixes the segfault. optional string foo = 1; optional string bar = 2; } message Outer8311 { repeated Inner8311 inners = 1; } // Messages to test the fix for // https://github.com/protocolbuffers/protobuf/issues/9507 message NpeMessage { optional TestEnum9507 type = 1; optional string other = 2; } enum TestEnum9507 { Something = 0; }