// Protocol Buffers - Google's data interchange format
// Copyright 2015 Google Inc.  All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

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