syntax = "proto2";

enum Enum {
    ELEVEN = 11;
    TWELVE = 12;
    THIRTEEN = 13;
}

message DecimalMessage1 {
    required int64 field = 1;
}

message DecimalMessage2 {
    required int64 smth = 1;
}

message SimpleTypesMessage {
    required int32 tint32 = 1;
    required int64 tint64 = 2;
    required uint32 tuint32 = 3;
    required uint64 tuint64 = 4;
    required sint32 tsint32 = 5;
    required sint64 tsint64 = 6;
    required fixed32 tfixed32 = 7;
    required fixed64 tfixed64 = 8;
    required sfixed32 tsfixed32 = 9;
    required sfixed64 tsfixed64 = 10;
    required bool tbool = 11;
    required string tstring = 12;
}

message RepeatedMessage {
    repeated int64 rint = 1;
}

message Submessage {
    required int32 tint = 1;
}

message ParentMessage {
    required int32 tint = 1;
    required Submessage tsub = 2;
}

message MessageOne {
    required int32 tint = 1;
}

message MessageTwo {
    required string tstring = 1;
}

message Message {
    required int32 tint1 = 1;
    required int32 tint2 = 2;
}

message Child {
    required int32 i1 = 1;
    required int32 i2 = 2;
}

message Parent {
    required Child child = 1;
}

message Level3Message {
    required int32 tint = 1;
}

message Level2Message {
    required Level3Message child = 1;
}

message Level1Message {
    required Level2Message child = 1;
}

message Level0Message {
    required Level1Message child = 1;
}

message ParentRepeated {
    repeated Child children = 1;
}

message ChildWithRepeated {
    repeated int32 tints = 1;
}

message ParentWithChildWithRepeated {
    required ChildWithRepeated child = 1;
}

message MessageWithOptionalField {
    required int32 required_field = 1;
    optional int32 optional_field_one = 2;
    optional int32 optional_field_two = 3;
}

message MessageWithOnlyOptionalFields {
    optional int32 optional_field_one = 1;
    optional int32 optional_field_two = 2;
}

message MessageWithSubmessageFieldOfOptionals {
    required MessageWithOnlyOptionalFields optional_submessage = 1;
}

message Date {
    required uint32 year = 1;
    required uint32 month = 2;
    required uint32 day = 3;
}


message WithSchemasInputMessage {
      required uint64 some_input = 1;
}

message WithSchemasOutputMessage {
      required uint64 some_output = 1;
}

message MessageWithMapFields {
    map<string, string> map_field_one = 1;
    map<string, uint32> map_field_two = 2;
    map<uint32, Child> map_field_three = 3;
}
