// Protocol Buffers - Google's data interchange format
// Copyright 2015 Google Inc.  All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd

syntax = "proto2";

// Explicit empty prefix, tests some validations code paths also.
package objc.protobuf.tests;

option objc_class_prefix = "";

message Message2 {
  enum Enum {
    FOO = 0;
    BAR = 1;
    BAZ = 2;
    EXTRA_2 = 20;
  }

  optional    int32 optional_int32    =  1;
  optional    int64 optional_int64    =  2;
  optional   uint32 optional_uint32   =  3;
  optional   uint64 optional_uint64   =  4;
  optional   sint32 optional_sint32   =  5;
  optional   sint64 optional_sint64   =  6;
  optional  fixed32 optional_fixed32  =  7;
  optional  fixed64 optional_fixed64  =  8;
  optional sfixed32 optional_sfixed32 =  9;
  optional sfixed64 optional_sfixed64 = 10;
  optional    float optional_float    = 11;
  optional   double optional_double   = 12;
  optional     bool optional_bool     = 13;
  optional   string optional_string   = 14;
  optional    bytes optional_bytes    = 15;
  optional group OptionalGroup = 16 {
    optional int32 a = 17;
  }
  optional Message2  optional_message = 18;
  optional Enum         optional_enum = 19;

  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 group RepeatedGroup = 46 {
    optional int32 a = 47;
  }
  repeated Message2 repeated_message  = 48;
  repeated Enum     repeated_enum     = 49;

  oneof o {
       int32 oneof_int32    = 51 [default = 100];
       int64 oneof_int64    = 52 [default = 101];
      uint32 oneof_uint32   = 53 [default = 102];
      uint64 oneof_uint64   = 54 [default = 103];
      sint32 oneof_sint32   = 55 [default = 104];
      sint64 oneof_sint64   = 56 [default = 105];
     fixed32 oneof_fixed32  = 57 [default = 106];
     fixed64 oneof_fixed64  = 58 [default = 107];
    sfixed32 oneof_sfixed32 = 59 [default = 108];
    sfixed64 oneof_sfixed64 = 60 [default = 109];
       float oneof_float    = 61 [default = 110];
      double oneof_double   = 62 [default = 111];
        bool oneof_bool     = 63 [default = true];
      string oneof_string   = 64 [default = "string"];
       bytes oneof_bytes    = 65 [default = "data"];
       group OneofGroup     = 66 {
         optional int32 a = 67;
         optional int32 b = 167;
       }
     Message2 oneof_message = 68;
     Enum        oneof_enum = 69 [default = BAZ];
  }

  // Some token map cases, too many combinations to list them all.
  map<int32   , int32   > map_int32_int32       = 70;
  map<int64   , int64   > map_int64_int64       = 71;
  map<uint32  , uint32  > map_uint32_uint32     = 72;
  map<uint64  , uint64  > map_uint64_uint64     = 73;
  map<sint32  , sint32  > map_sint32_sint32     = 74;
  map<sint64  , sint64  > map_sint64_sint64     = 75;
  map<fixed32 , fixed32 > map_fixed32_fixed32   = 76;
  map<fixed64 , fixed64 > map_fixed64_fixed64   = 77;
  map<sfixed32, sfixed32> map_sfixed32_sfixed32 = 78;
  map<sfixed64, sfixed64> map_sfixed64_sfixed64 = 79;
  map<int32   , float   > map_int32_float       = 80;
  map<int32   , double  > map_int32_double      = 81;
  map<bool    , bool    > map_bool_bool         = 82;
  map<string  , string  > map_string_string     = 83;
  map<string  , bytes   > map_string_bytes      = 84;
  map<string  , Message2> map_string_message    = 85;
  map<int32   , bytes   > map_int32_bytes       = 86;
  map<int32   , Enum    > map_int32_enum        = 87;
  map<int32   , Message2> map_int32_message     = 88;
}
