syntax = "proto3";

import 'google/protobuf/any.proto';
import 'google/protobuf/wrappers.proto';
import 'google/protobuf/struct.proto';
import 'proto/test_include.proto';
import 'proto/test_no_namespace.proto';
import 'proto/test_php_namespace.proto';
import 'proto/test_empty_php_namespace.proto';
import 'proto/test_prefix.proto';

package foo;

message TestMessage {
  // Singular
  int32 optional_int32 = 1;
  int64 optional_int64 = 2;
  uint32 optional_uint32 = 3;
  uint64 optional_uint64 = 4;
  sint32 optional_sint32 = 5;
  sint64 optional_sint64 = 6;
  fixed32 optional_fixed32 = 7;
  fixed64 optional_fixed64 = 8;
  sfixed32 optional_sfixed32 = 9;
  sfixed64 optional_sfixed64 = 10;
  float optional_float = 11;
  double optional_double = 12;
  bool optional_bool = 13;
  string optional_string = 14;
  bytes optional_bytes = 15;

  TestEnum optional_enum = 16;
  Sub optional_message = 17;
  bar.TestInclude optional_included_message = 18;
  TestMessage recursive = 19;

  // True optional
  optional int32 true_optional_int32 = 201;
  optional int64 true_optional_int64 = 202;
  optional uint32 true_optional_uint32 = 203;
  optional uint64 true_optional_uint64 = 204;
  optional sint32 true_optional_sint32 = 205;
  optional sint64 true_optional_sint64 = 206;
  optional fixed32 true_optional_fixed32 = 207;
  optional fixed64 true_optional_fixed64 = 208;
  optional sfixed32 true_optional_sfixed32 = 209;
  optional sfixed64 true_optional_sfixed64 = 210;
  optional float true_optional_float = 211;
  optional double true_optional_double = 212;
  optional bool true_optional_bool = 213;
  optional string true_optional_string = 214;
  optional bytes true_optional_bytes = 215;

  optional TestEnum true_optional_enum = 216;
  optional Sub true_optional_message = 217;
  optional bar.TestInclude true_optional_included_message = 218;

  // Repeated
  repeated    int32 repeated_int32    = 31;
  repeated    int64 repeated_int64    = 32;
  repeated   uint32 repeated_uint32   = 33;
  repeated   uint64 repeated_uint64   = 34;
  repeated   sint32 repeated_sint32   = 35;
  repeated   sint64 repeated_sint64   = 36;
  repeated  fixed32 repeated_fixed32  = 37;
  repeated  fixed64 repeated_fixed64  = 38;
  repeated sfixed32 repeated_sfixed32 = 39;
  repeated sfixed64 repeated_sfixed64 = 40;
  repeated    float repeated_float    = 41;
  repeated   double repeated_double   = 42;
  repeated     bool repeated_bool     = 43;
  repeated   string repeated_string   = 44;
  repeated    bytes repeated_bytes    = 45;

  repeated TestEnum repeated_enum = 46;
  repeated Sub repeated_message = 47;
  repeated TestMessage repeated_recursive = 48;

  oneof my_oneof {
    int32  oneof_int32    = 51;
    int64  oneof_int64    = 52;
    uint32 oneof_uint32   = 53;
    uint64 oneof_uint64   = 54;
    uint32 oneof_sint32   = 55;
    uint64 oneof_sint64   = 56;
    uint32 oneof_fixed32  = 57;
    uint64 oneof_fixed64  = 58;
    uint32 oneof_sfixed32 = 59;
    uint64 oneof_sfixed64 = 60;
    double oneof_double   = 61;
    float  oneof_float    = 62;
    bool   oneof_bool     = 63;
    string oneof_string   = 64;
    bytes  oneof_bytes    = 65;
    TestEnum oneof_enum   = 66;
    Sub    oneof_message  = 67;
  }

  map<int32,       int32> map_int32_int32       = 71;
  map<int64,       int64> map_int64_int64       = 72;
  map<uint32,     uint32> map_uint32_uint32     = 73;
  map<uint64,     uint64> map_uint64_uint64     = 74;
  map<sint32,     sint32> map_sint32_sint32     = 75;
  map<sint64,     sint64> map_sint64_sint64     = 76;
  map<fixed32,   fixed32> map_fixed32_fixed32   = 77;
  map<fixed64,   fixed64> map_fixed64_fixed64   = 78;
  map<sfixed32, sfixed32> map_sfixed32_sfixed32 = 79;
  map<sfixed64, sfixed64> map_sfixed64_sfixed64 = 80;
  map<int32,       float> map_int32_float       = 81;
  map<int32,      double> map_int32_double      = 82;
  map<bool,         bool> map_bool_bool         = 83;
  map<string,     string> map_string_string     = 84;
  map<int32,       bytes> map_int32_bytes       = 85;
  map<int32,    TestEnum> map_int32_enum        = 86;
  map<int32,         Sub> map_int32_message     = 87;

  map<int32, TestMessage> map_recursive = 88;

  message Sub {
    int32 a = 1;
    repeated int32 b = 2;
  }

  // Reserved for non-existing field test.
  // int32 non_exist = 89;

  NoNamespaceMessage optional_no_namespace_message = 91;
  NoNamespaceEnum optional_no_namespace_enum = 92;
  repeated NoNamespaceMessage repeated_no_namespace_message = 93;
  repeated NoNamespaceEnum repeated_no_namespace_enum = 94;

  enum NestedEnum {
    ZERO = 0;
  }

  NestedEnum optional_nested_enum = 101;

  // Test prefix for reserved words.
  message Empty {
    int32 a = 1;
  }

  reserved 111;

  // Test map with missing message value
  map<string, TestMessage> map_string_message = 121;
  map<string, google.protobuf.Any> map_string_any = 122;
  map<string, google.protobuf.ListValue> map_string_list = 123;
  map<string, google.protobuf.Struct> map_string_struct = 124;

  // deprecated field
  int32 deprecated_optional_int32 = 125 [deprecated=true];
}

enum TestEnum {
  ZERO = 0;
  ONE  = 1;
  TWO  = 2;
  ECHO = 3;  // Test reserved name.
}

// Test prefix for reserved words.
message Empty {
  int32 a = 1;
}

message ARRAY {
  int32 a = 1;
}

message TestPackedMessage {
  repeated int32    repeated_int32    = 90  [packed = true];
  repeated int64    repeated_int64    = 91  [packed = true];
  repeated uint32   repeated_uint32   = 92  [packed = true];
  repeated uint64   repeated_uint64   = 93  [packed = true];
  repeated sint32   repeated_sint32   = 94  [packed = true];
  repeated sint64   repeated_sint64   = 95  [packed = true];
  repeated fixed32  repeated_fixed32  = 96  [packed = true];
  repeated fixed64  repeated_fixed64  = 97  [packed = true];
  repeated sfixed32 repeated_sfixed32 = 98  [packed = true];
  repeated sfixed64 repeated_sfixed64 = 99  [packed = true];
  repeated float    repeated_float    = 100 [packed = true];
  repeated double   repeated_double   = 101 [packed = true];
  repeated bool     repeated_bool     = 102 [packed = true];
  repeated TestEnum repeated_enum     = 103 [packed = true];
}

// Need to be in sync with TestPackedMessage.
message TestUnpackedMessage {
  repeated int32    repeated_int32    = 90  [packed = false];
  repeated int64    repeated_int64    = 91  [packed = false];
  repeated uint32   repeated_uint32   = 92  [packed = false];
  repeated uint64   repeated_uint64   = 93  [packed = false];
  repeated sint32   repeated_sint32   = 94  [packed = false];
  repeated sint64   repeated_sint64   = 95  [packed = false];
  repeated fixed32  repeated_fixed32  = 96  [packed = false];
  repeated fixed64  repeated_fixed64  = 97  [packed = false];
  repeated sfixed32 repeated_sfixed32 = 98  [packed = false];
  repeated sfixed64 repeated_sfixed64 = 99  [packed = false];
  repeated float    repeated_float    = 100 [packed = false];
  repeated double   repeated_double   = 101 [packed = false];
  repeated bool     repeated_bool     = 102 [packed = false];
  repeated TestEnum repeated_enum     = 103 [packed = false];
}

// /**/@<>&\{
message TestPhpDoc {
  int32 a = 1;
}

message TestIncludePrefixMessage {
  TestPrefix prefix_message = 1;
}

message TestIncludeNamespaceMessage {
  TestNamespace namespace_message = 1;
  TestEmptyNamespace empty_namespace_message = 2;
}

// This will cause upb fields not ordered by the order in the generated code.
message TestRandomFieldOrder {
  int64 tag13 = 150;
  string tag14 = 160;
}

message TestLargeFieldNumber {
  int32 large_field_number = 536870911;
}

message TestReverseFieldOrder {
  repeated int32 a = 2;
  string b = 1;
}

message testLowerCaseMessage {
}

enum testLowerCaseEnum {
  VALUE = 0;
}

message TestAny {
  google.protobuf.Any any = 1;
}

message TestInt32Value {
  google.protobuf.Int32Value field = 1;
  repeated google.protobuf.Int32Value repeated_field = 2;
  oneof oneof_fields {
    google.protobuf.Int32Value oneof_field = 3;
    int32 int32_field = 4;
  }
}

message TestInt64Value {
  google.protobuf.Int64Value field = 1;
  repeated google.protobuf.Int64Value repeated_field = 2;
  oneof oneof_fields {
    google.protobuf.Int64Value oneof_field = 3;
    int32 int32_field = 4;
  }
}

message TestUInt32Value {
  google.protobuf.UInt32Value field = 1;
  repeated google.protobuf.UInt32Value repeated_field = 2;
  oneof oneof_fields {
    google.protobuf.UInt32Value oneof_field = 3;
    int32 int32_field = 4;
  }
}

message TestUInt64Value {
  google.protobuf.UInt64Value field = 1;
  repeated google.protobuf.UInt64Value repeated_field = 2;
  oneof oneof_fields {
    google.protobuf.UInt64Value oneof_field = 3;
    int32 int32_field = 4;
  }
}

message TestBoolValue {
  google.protobuf.BoolValue field = 1;
  repeated google.protobuf.BoolValue repeated_field = 2;
  oneof oneof_fields {
    google.protobuf.BoolValue oneof_field = 3;
    int32 int32_field = 4;
  }
}

message TestStringValue {
  google.protobuf.StringValue field = 1;
  repeated google.protobuf.StringValue repeated_field = 2;
  oneof oneof_fields {
    google.protobuf.StringValue oneof_field = 3;
    int32 int32_field = 4;
  }
  map<int32, google.protobuf.StringValue> map_field = 5;
}

message TestBytesValue {
  google.protobuf.BytesValue field = 1;
  repeated google.protobuf.BytesValue repeated_field = 2;
  oneof oneof_fields {
    google.protobuf.BytesValue oneof_field = 3;
    int32 int32_field = 4;
  }
}

message Test32Fields {
  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;
}
