syntax = "proto2";

package basic_test_proto2;

import "google/protobuf/duration.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";

message Foo {
  optional Bar bar = 1;
  repeated Baz baz = 2;
}

message Bar {
  optional string msg = 1;
}

message Baz {
  optional 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;

  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;
}

message TestPackedMessage {
  repeated int32 repeated_int32 = 12 [packed = true];
}

message TestGroupMessage {
  optional group GroupField = 1 {
    optional int32 a = 1;
  }
}

message TestRequiredMessage {
  required int32 required_int32 = 1;
}

message TestMessage2 {
  optional int32 foo = 1;
}

message TestMessageDefaults {
  optional int32 optional_int32 = 1 [default = 1];
  optional int64 optional_int64 = 2 [default = 2];
  optional uint32 optional_uint32 = 3 [default = 3];
  optional uint64 optional_uint64 = 4 [default = 4];
  optional bool optional_bool = 5 [default = true];
  optional float optional_float = 6 [default = 6];
  optional double optional_double = 7 [default = 7];
  optional string optional_string = 8 [default = "Default Str"];
  optional bytes optional_bytes = 9 [default = "\xCF\xA5s\xBD\xBA\xE6fubar"];
  optional TestMessage2 optional_msg = 10;
  optional TestNonZeroEnum optional_enum = 11 [default = B2];
}

enum TestEnum {
  Default = 0;
  A = 1;
  B = 2;
  C = 3;
  v0 = 4;
}

enum TestNonZeroEnum {
  A2 = 1;
  B2 = 2;
  C2 = 3;
}

message TestEmbeddedMessageParent {
  optional TestEmbeddedMessageChild child_msg = 1;
  optional int32 number = 2;

  repeated TestEmbeddedMessageChild repeated_msg = 3;
  repeated int32 repeated_number = 4;
}

message TestEmbeddedMessageChild {
  optional TestMessage sub_child = 1;
}

message Recursive1 {
  optional Recursive2 foo = 1;
}

message Recursive2 {
  optional Recursive1 foo = 1;
}

message MapMessageWireEquiv {
  repeated MapMessageWireEquiv_entry1 map_string_int32 = 1;
  repeated MapMessageWireEquiv_entry2 map_string_msg = 2;
}

message MapMessageWireEquiv_entry1 {
  optional string key = 1;
  optional int32 value = 2;
}

message MapMessageWireEquiv_entry2 {
  optional string key = 1;
  optional TestMessage2 value = 2;
}

message OneofMessage {
  oneof my_oneof {
    string a = 1;
    int32 b = 2;
    TestMessage2 c = 3;
    TestEnum d = 4;
  }
}

message Wrapper {
  optional google.protobuf.DoubleValue double = 1;
  optional google.protobuf.FloatValue float = 2;
  optional google.protobuf.Int32Value int32 = 3;
  optional google.protobuf.Int64Value int64 = 4;
  optional google.protobuf.UInt32Value uint32 = 5;
  optional google.protobuf.UInt64Value uint64 = 6;
  optional google.protobuf.BoolValue bool = 7;
  optional google.protobuf.StringValue string = 8;
  optional google.protobuf.BytesValue bytes = 9;
  optional string real_string = 100;
  oneof a_oneof {
    string string_in_oneof = 10;
  }

  // Repeated wrappers don't really 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 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 {
  optional google.protobuf.Timestamp timestamp = 1;
  optional google.protobuf.Duration duration = 2;
}

message Enumer {
  optional TestEnum optional_enum = 11;
  repeated TestEnum repeated_enum = 22;
  optional string a_const = 3;
  oneof a_oneof {
    string str = 100;
    TestEnum const = 101;
  }
}

message MyRepeatedStruct {
  repeated MyStruct structs = 1;
}

message MyStruct {
  optional string string = 1;
  optional google.protobuf.Struct struct = 2;
}

message TestExtensions {
  extensions 1 to max;
}

message TestNestedExtension {
  extend TestExtensions {
    optional string test = 1002 [default = "test"];
  }
}

extend TestExtensions {
  optional int32 optional_int32_extension = 1;
}

// A message with message_set_wire_format.
message TestMessageSet {
  option message_set_wire_format = true;

  extensions 4 to max;
}

message TestMessageSetExtension1 {
  extend TestMessageSet {
    optional TestMessageSetExtension1 message_set_extension = 98418603;
  }
  optional int32 i = 15;
}

message TestMessageSetExtension2 {
  extend TestMessageSet {
    optional TestMessageSetExtension2 message_set_extension = 98418634;
  }
  optional string str = 25;
}

message TestMessageSetExtension3 {
  optional string text = 35;
}

extend TestMessageSet {
  optional TestMessageSetExtension3 message_set_extension3 = 98418655;
}

message BadFieldNames {
  optional int32 dup = 1;
  optional int32 class = 2;
}
