syntax = "proto3";

package basic;

message Test1 {
    int32 a = 1;
}

message Test2 {
    string b = 2;
}

message Test3 {
    Test1 c = 3;
}

message Test4 {
    repeated int32 d = 4 [packed=true];
}


message TestPackedUnpacked {
    repeated int32 unpacked = 4;
    repeated int32 packed = 5 [packed=true];
}

message TestEmpty {
    int32 foo = 10;
}

message Test{
    bool b = 5;
}

message TestUnknownFields {
    int32 a = 1;
}

// just check it compiles
message TestSelfReference {
    TestSelfReference r1 = 1;
    TestSelfReference r2 = 2;
}

message TestDefaultInstanceField {
    string s = 1;
}

message TestDefaultInstance {
    TestDefaultInstanceField field = 1;
}

message TestDescriptor {
    int32 stuff = 10;
}

enum TestEnumDescriptor {
    UNKNOWN = 0;
    RED = 1;
    BLUE = 2;
    GREEN = 3;
}

message TestTypesSingular {
    double double_field = 1;
    float float_field = 2;
    int32 int32_field = 3;
    int64 int64_field = 4;
    uint32 uint32_field = 5;
    uint64 uint64_field = 6;
    sint32 sint32_field = 7;
    sint64 sint64_field = 8;
    fixed32 fixed32_field = 9;
    fixed64 fixed64_field = 10;
    sfixed32 sfixed32_field = 11;
    sfixed64 sfixed64_field = 12;
    bool bool_field = 13;
    string string_field = 14;
    bytes bytes_field = 15;
    TestEnumDescriptor enum_field = 16;
}

message TestTypesRepeated {
    repeated double double_field = 1 [packed=false];
    repeated float float_field = 2 [packed=false];
    repeated int32 int32_field = 3 [packed=false];
    repeated int64 int64_field = 4 [packed=false];
    repeated uint32 uint32_field = 5 [packed=false];
    repeated uint64 uint64_field = 6 [packed=false];
    repeated sint32 sint32_field = 7 [packed=false];
    repeated sint64 sint64_field = 8 [packed=false];
    repeated fixed32 fixed32_field = 9 [packed=false];
    repeated fixed64 fixed64_field = 10 [packed=false];
    repeated sfixed32 sfixed32_field = 11 [packed=false];
    repeated sfixed64 sfixed64_field = 12 [packed=false];
    repeated bool bool_field = 13 [packed=false];
    repeated string string_field = 14;
    repeated bytes bytes_field = 15;
    repeated TestEnumDescriptor enum_field = 16 [packed=false];
}

message TestTypesRepeatedPacked {
    repeated double double_field = 1 [packed=true];
    repeated float float_field = 2 [packed=true];
    repeated int32 int32_field = 3 [packed=true];
    repeated int64 int64_field = 4 [packed=true];
    repeated uint32 uint32_field = 5 [packed=true];
    repeated uint64 uint64_field = 6 [packed=true];
    repeated sint32 sint32_field = 7 [packed=true];
    repeated sint64 sint64_field = 8 [packed=true];
    repeated fixed32 fixed32_field = 9 [packed=true];
    repeated fixed64 fixed64_field = 10 [packed=true];
    repeated sfixed32 sfixed32_field = 11 [packed=true];
    repeated sfixed64 sfixed64_field = 12 [packed=true];
    repeated bool bool_field = 13 [packed=true];
    repeated string string_field = 14;
    repeated bytes bytes_field = 15;
    repeated TestEnumDescriptor enum_field = 16 [packed=true];
}

message TestInvalidTag {
}

message TestTruncated {
    repeated fixed32 ints = 2 [packed=true];
}

message TestBugSint {
    sint32 s32 = 1;
    sint64 s64 = 2;
}
