// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc.  All rights reserved.
// https://protobuf.dev/
//
// 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;
}

