// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc.  All rights reserved.
// https://developers.google.com/protocol-buffers/
//
// 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.

// LINT: ALLOW_GROUPS

syntax = "proto2";


package jspb.test;

// These types are borrowed from `unittest.proto` in the protobuf tree. We want
// to ensure that the binary-format support will handle all field types
// properly.
message TestAllTypes {
  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 ForeignMessage optional_foreign_message = 19;
  optional ForeignEnum optional_foreign_enum = 22;

  // 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 group RepeatedGroup = 46 {
    optional int32 a = 47;
  }

  repeated ForeignMessage repeated_foreign_message = 49;
  repeated ForeignEnum repeated_foreign_enum = 52;

  // Packed repeated
  repeated int32 packed_repeated_int32 = 61 [packed = true];
  repeated int64 packed_repeated_int64 = 62 [packed = true];
  repeated uint32 packed_repeated_uint32 = 63 [packed = true];
  repeated uint64 packed_repeated_uint64 = 64 [packed = true];
  repeated sint32 packed_repeated_sint32 = 65 [packed = true];
  repeated sint64 packed_repeated_sint64 = 66 [packed = true];
  repeated fixed32 packed_repeated_fixed32 = 67 [packed = true];
  repeated fixed64 packed_repeated_fixed64 = 68 [packed = true];
  repeated sfixed32 packed_repeated_sfixed32 = 69 [packed = true];
  repeated sfixed64 packed_repeated_sfixed64 = 70 [packed = true];
  repeated float packed_repeated_float = 71 [packed = true];
  repeated double packed_repeated_double = 72 [packed = true];
  repeated bool packed_repeated_bool = 73 [packed = true];

  oneof oneof_field {
    uint32 oneof_uint32 = 111;
    ForeignMessage oneof_foreign_message = 112;
    string oneof_string = 113;
    bytes oneof_bytes = 114;
  }

}

message ForeignMessage {
  optional int32 c = 1;
}

enum ForeignEnum {
  FOREIGN_FOO = 4;
  FOREIGN_BAR = 5;
  FOREIGN_BAZ = 6;
}

message TestExtendable {
  extensions 1 to max;
}

message ExtendsWithMessage {
  extend TestExtendable {
    optional ExtendsWithMessage optional_extension = 19;
    repeated ExtendsWithMessage repeated_extension = 49;
  }
  optional int32 foo = 1;
}

extend TestExtendable {
  optional int32 extend_optional_int32 = 1;
  optional int64 extend_optional_int64 = 2;
  optional uint32 extend_optional_uint32 = 3;
  optional uint64 extend_optional_uint64 = 4;
  optional sint32 extend_optional_sint32 = 5;
  optional sint64 extend_optional_sint64 = 6;
  optional fixed32 extend_optional_fixed32 = 7;
  optional fixed64 extend_optional_fixed64 = 8;
  optional sfixed32 extend_optional_sfixed32 = 9;
  optional sfixed64 extend_optional_sfixed64 = 10;
  optional float extend_optional_float = 11;
  optional double extend_optional_double = 12;
  optional bool extend_optional_bool = 13;
  optional string extend_optional_string = 14;
  optional bytes extend_optional_bytes = 15;
  optional ForeignEnum extend_optional_foreign_enum = 22;

  repeated int32 extend_repeated_int32 = 31;
  repeated int64 extend_repeated_int64 = 32;
  repeated uint32 extend_repeated_uint32 = 33;
  repeated uint64 extend_repeated_uint64 = 34;
  repeated sint32 extend_repeated_sint32 = 35;
  repeated sint64 extend_repeated_sint64 = 36;
  repeated fixed32 extend_repeated_fixed32 = 37;
  repeated fixed64 extend_repeated_fixed64 = 38;
  repeated sfixed32 extend_repeated_sfixed32 = 39;
  repeated sfixed64 extend_repeated_sfixed64 = 40;
  repeated float extend_repeated_float = 41;
  repeated double extend_repeated_double = 42;
  repeated bool extend_repeated_bool = 43;
  repeated string extend_repeated_string = 44;
  repeated bytes extend_repeated_bytes = 45;
  repeated ForeignEnum extend_repeated_foreign_enum = 52;

  repeated int32 extend_packed_repeated_int32 = 61 [packed = true];
  repeated int64 extend_packed_repeated_int64 = 62 [packed = true];
  repeated uint32 extend_packed_repeated_uint32 = 63 [packed = true];
  repeated uint64 extend_packed_repeated_uint64 = 64 [packed = true];
  repeated sint32 extend_packed_repeated_sint32 = 65 [packed = true];
  repeated sint64 extend_packed_repeated_sint64 = 66 [packed = true];
  repeated fixed32 extend_packed_repeated_fixed32 = 67 [packed = true];
  repeated fixed64 extend_packed_repeated_fixed64 = 68 [packed = true];
  repeated sfixed32 extend_packed_repeated_sfixed32 = 69 [packed = true];
  repeated sfixed64 extend_packed_repeated_sfixed64 = 70 [packed = true];
  repeated float extend_packed_repeated_float = 71 [packed = true];
  repeated double extend_packed_repeated_double = 72 [packed = true];
  repeated bool extend_packed_repeated_bool = 73 [packed = true];
  repeated ForeignEnum extend_packed_repeated_foreign_enum = 82 [packed = true];

}

message TestMapFields {
  map<string, string> map_string_string = 1;
  map<string, int32> map_string_int32 = 2;
  map<string, int64> map_string_int64 = 3;
  map<string, bool> map_string_bool = 4;
  map<string, double> map_string_double = 5;
  map<string, MapValueEnum> map_string_enum = 6;
  map<string, MapValueMessage> map_string_msg = 7;

  map<int32, string> map_int32_string = 8;
  map<int64, string> map_int64_string = 9;
  map<bool, string> map_bool_string = 10;

  optional TestMapFields test_map_fields = 11;
  map<string, TestMapFields> map_string_testmapfields = 12;
}

// These proto are 'mock map' entries to test the above map deserializing with
// undefined keys. Make sure TestMapFieldsOptionalKeys is written to be
// deserialized by TestMapFields
message MapEntryOptionalKeysStringKey {
  optional string key = 1;
  optional string value = 2;
}

message MapEntryOptionalKeysInt32Key {
  optional int32 key = 1;
  optional string value = 2;
}

message MapEntryOptionalKeysInt64Key {
  optional int64 key = 1;
  optional string value = 2;
}

message MapEntryOptionalKeysBoolKey {
  optional bool key = 1;
  optional string value = 2;
}

message TestMapFieldsOptionalKeys {
  optional MapEntryOptionalKeysStringKey map_string_string = 1;
  optional MapEntryOptionalKeysInt32Key map_int32_string = 8;
  optional MapEntryOptionalKeysInt64Key map_int64_string = 9;
  optional MapEntryOptionalKeysBoolKey map_bool_string = 10;
}

// End mock-map entries

// These proto are 'mock map' entries to test the above map deserializing with
// undefined values. Make sure TestMapFieldsOptionalValues is written to be
// deserialized by TestMapFields
message MapEntryOptionalValuesStringValue {
  optional string key = 1;
  optional string value = 2;
}

message MapEntryOptionalValuesInt32Value {
  optional string key = 1;
  optional int32 value = 2;
}

message MapEntryOptionalValuesInt64Value {
  optional string key = 1;
  optional int64 value = 2;
}

message MapEntryOptionalValuesBoolValue {
  optional string key = 1;
  optional bool value = 2;
}

message MapEntryOptionalValuesDoubleValue {
  optional string key = 1;
  optional double value = 2;
}

message MapEntryOptionalValuesEnumValue {
  optional string key = 1;
  optional MapValueEnum value = 2;
}

message MapEntryOptionalValuesMessageValue {
  optional string key = 1;
  optional MapValueMessage value = 2;
}

message TestMapFieldsOptionalValues {
  optional MapEntryOptionalValuesStringValue map_string_string = 1;
  optional MapEntryOptionalValuesInt32Value map_string_int32 = 2;
  optional MapEntryOptionalValuesInt64Value map_string_int64 = 3;
  optional MapEntryOptionalValuesBoolValue map_string_bool = 4;
  optional MapEntryOptionalValuesDoubleValue map_string_double = 5;
  optional MapEntryOptionalValuesEnumValue map_string_enum = 6;
  optional MapEntryOptionalValuesMessageValue map_string_msg = 7;
}

// End mock-map entries

enum MapValueEnum {
  MAP_VALUE_FOO = 0;
  MAP_VALUE_BAR = 1;
  MAP_VALUE_BAZ = 2;
}

message MapValueMessage {
  optional int32 foo = 1;
}

