// Protocol Buffers - Google's data interchange format
// Copyright 2008 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";

import "objectivec/Tests/unittest_import.proto";

package objc.protobuf.tests;

// Explicit empty prefix, tests some validations code paths also.
option objc_class_prefix = "";

enum Proto2MapEnum {
  PROTO2_MAP_ENUM_FOO   = 0;
  PROTO2_MAP_ENUM_BAR   = 1;
  PROTO2_MAP_ENUM_BAZ   = 2;
}

enum Proto2MapEnumPlusExtra {
  E_PROTO2_MAP_ENUM_FOO   = 0;
  E_PROTO2_MAP_ENUM_BAR   = 1;
  E_PROTO2_MAP_ENUM_BAZ   = 2;
  E_PROTO2_MAP_ENUM_EXTRA = 3;
}

message TestEnumMap {
  map<int32, Proto2MapEnum> known_map_field = 101;
  map<int32, Proto2MapEnum> unknown_map_field = 102;
}

message TestEnumMapPlusExtra {
  map<int32, Proto2MapEnumPlusExtra> known_map_field = 101;
  map<int32, Proto2MapEnumPlusExtra> unknown_map_field = 102;
}

message TestImportEnumMap {
  map<int32, objc.protobuf.tests.import.EnumForMap> import_enum_amp = 1;
}

message TestIntIntMap {
  map<int32, int32> m = 1;
}

// Test all key types: string, plus the non-floating-point scalars.
message TestMaps {
  map<int32, TestIntIntMap> m_int32 = 1;
  map<int64, TestIntIntMap> m_int64 = 2;
  map<uint32, TestIntIntMap> m_uint32 = 3;
  map<uint64, TestIntIntMap> m_uint64 = 4;
  map<sint32, TestIntIntMap> m_sint32 = 5;
  map<sint64, TestIntIntMap> m_sint64 = 6;
  map<fixed32, TestIntIntMap> m_fixed32 = 7;
  map<fixed64, TestIntIntMap> m_fixed64 = 8;
  map<sfixed32, TestIntIntMap> m_sfixed32 = 9;
  map<sfixed64, TestIntIntMap> m_sfixed64 = 10;
  map<bool, TestIntIntMap> m_bool = 11;
  map<string, TestIntIntMap> m_string = 12;
}

// Test maps in submessages.
message TestSubmessageMaps {
  optional TestMaps m = 1;
}
