// 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 = "proto3";

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

option objc_class_prefix = "";

message Message3 {
  enum Enum {
    FOO = 0;
    BAR = 1;
    BAZ = 2;
    EXTRA_3 = 30;
  }

     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;
  // No 'group' in proto3.
  Message3 optional_message  = 18;
      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;
  // No 'group' in proto3.
  repeated Message3 repeated_message  = 48;
  repeated     Enum repeated_enum     = 49;

  oneof o {
       int32 oneof_int32    = 51;
       int64 oneof_int64    = 52;
      uint32 oneof_uint32   = 53;
      uint64 oneof_uint64   = 54;
      sint32 oneof_sint32   = 55;
      sint64 oneof_sint64   = 56;
     fixed32 oneof_fixed32  = 57;
     fixed64 oneof_fixed64  = 58;
    sfixed32 oneof_sfixed32 = 59;
    sfixed64 oneof_sfixed64 = 60;
       float oneof_float    = 61;
      double oneof_double   = 62;
        bool oneof_bool     = 63;
      string oneof_string   = 64;
       bytes oneof_bytes    = 65;
    // No 'group' in proto3.
    Message3 oneof_message  = 68;
        Enum oneof_enum     = 69;
  }

  // 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  , Message3> map_string_message    = 85;
  map<int32   , bytes   > map_int32_bytes       = 86;
  map<int32   , Enum    > map_int32_enum        = 87;
  map<int32   , Message3> map_int32_message     = 88;
}

message Message3Optional {
  enum Enum {
    FOO = 0;
    BAR = 1;
    BAZ = 2;
    EXTRA_3 = 30;
  }

  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;
  // No 'group' in proto3.
  optional Message3  optional_message = 18;
  optional Enum         optional_enum = 19;
}
