syntax = "proto3";

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;

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

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 TestReverseFieldOrder {
  repeated int32 a = 2;
  string b = 1;
}

message testLowerCaseMessage {
}

enum testLowerCaseEnum {
  VALUE = 0;
}
