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

edition = "2023";

package protobuf_test_messages.editions;

option features.message_encoding = DELIMITED;
option java_package = "com.google.protobuf_test_messages.edition2023";
option java_multiple_files = true;
option objc_class_prefix = "Editions";

message ComplexMessage {
  int32 d = 1;
}

message TestAllTypesEdition2023 {
  message NestedMessage {
    int32 a = 1;
    TestAllTypesEdition2023 corecursive = 2
        [features.message_encoding = LENGTH_PREFIXED];
  }

  enum NestedEnum {
    FOO = 0;
    BAR = 1;
    BAZ = 2;
    NEG = -1;  // Intentionally negative.
  }

  // Singular
  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;

  NestedMessage optional_nested_message = 18
      [features.message_encoding = LENGTH_PREFIXED];
  ForeignMessageEdition2023 optional_foreign_message = 19
      [features.message_encoding = LENGTH_PREFIXED];

  NestedEnum optional_nested_enum = 21;
  ForeignEnumEdition2023 optional_foreign_enum = 22;

  string optional_string_piece = 24 [ctype = STRING_PIECE];
  string optional_cord = 25 [ctype = CORD];

  TestAllTypesEdition2023 recursive_message = 27
      [features.message_encoding = LENGTH_PREFIXED];

  // 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 NestedMessage repeated_nested_message = 48
      [features.message_encoding = LENGTH_PREFIXED];
  repeated ForeignMessageEdition2023 repeated_foreign_message = 49
      [features.message_encoding = LENGTH_PREFIXED];

  repeated NestedEnum repeated_nested_enum = 51;
  repeated ForeignEnumEdition2023 repeated_foreign_enum = 52;

  repeated string repeated_string_piece = 54 [ctype = STRING_PIECE];
  repeated string repeated_cord = 55 [ctype = CORD];

  // Packed
  repeated int32 packed_int32 = 75 [features.repeated_field_encoding = PACKED];
  repeated int64 packed_int64 = 76 [features.repeated_field_encoding = PACKED];
  repeated uint32 packed_uint32 = 77
      [features.repeated_field_encoding = PACKED];
  repeated uint64 packed_uint64 = 78
      [features.repeated_field_encoding = PACKED];
  repeated sint32 packed_sint32 = 79
      [features.repeated_field_encoding = PACKED];
  repeated sint64 packed_sint64 = 80
      [features.repeated_field_encoding = PACKED];
  repeated fixed32 packed_fixed32 = 81
      [features.repeated_field_encoding = PACKED];
  repeated fixed64 packed_fixed64 = 82
      [features.repeated_field_encoding = PACKED];
  repeated sfixed32 packed_sfixed32 = 83
      [features.repeated_field_encoding = PACKED];
  repeated sfixed64 packed_sfixed64 = 84
      [features.repeated_field_encoding = PACKED];
  repeated float packed_float = 85 [features.repeated_field_encoding = PACKED];
  repeated double packed_double = 86
      [features.repeated_field_encoding = PACKED];
  repeated bool packed_bool = 87 [features.repeated_field_encoding = PACKED];
  repeated NestedEnum packed_nested_enum = 88
      [features.repeated_field_encoding = PACKED];

  // Unpacked
  repeated int32 unpacked_int32 = 89
      [features.repeated_field_encoding = EXPANDED];
  repeated int64 unpacked_int64 = 90
      [features.repeated_field_encoding = EXPANDED];
  repeated uint32 unpacked_uint32 = 91
      [features.repeated_field_encoding = EXPANDED];
  repeated uint64 unpacked_uint64 = 92
      [features.repeated_field_encoding = EXPANDED];
  repeated sint32 unpacked_sint32 = 93
      [features.repeated_field_encoding = EXPANDED];
  repeated sint64 unpacked_sint64 = 94
      [features.repeated_field_encoding = EXPANDED];
  repeated fixed32 unpacked_fixed32 = 95
      [features.repeated_field_encoding = EXPANDED];
  repeated fixed64 unpacked_fixed64 = 96
      [features.repeated_field_encoding = EXPANDED];
  repeated sfixed32 unpacked_sfixed32 = 97
      [features.repeated_field_encoding = EXPANDED];
  repeated sfixed64 unpacked_sfixed64 = 98
      [features.repeated_field_encoding = EXPANDED];
  repeated float unpacked_float = 99
      [features.repeated_field_encoding = EXPANDED];
  repeated double unpacked_double = 100
      [features.repeated_field_encoding = EXPANDED];
  repeated bool unpacked_bool = 101
      [features.repeated_field_encoding = EXPANDED];
  repeated NestedEnum unpacked_nested_enum = 102
      [features.repeated_field_encoding = EXPANDED];

  // Map
  map<int32, int32> map_int32_int32 = 56;
  map<int64, int64> map_int64_int64 = 57;
  map<uint32, uint32> map_uint32_uint32 = 58;
  map<uint64, uint64> map_uint64_uint64 = 59;
  map<sint32, sint32> map_sint32_sint32 = 60;
  map<sint64, sint64> map_sint64_sint64 = 61;
  map<fixed32, fixed32> map_fixed32_fixed32 = 62;
  map<fixed64, fixed64> map_fixed64_fixed64 = 63;
  map<sfixed32, sfixed32> map_sfixed32_sfixed32 = 64;
  map<sfixed64, sfixed64> map_sfixed64_sfixed64 = 65;
  map<int32, float> map_int32_float = 66;
  map<int32, double> map_int32_double = 67;
  map<bool, bool> map_bool_bool = 68;
  map<string, string> map_string_string = 69;
  map<string, bytes> map_string_bytes = 70;
  map<string, NestedMessage> map_string_nested_message = 71;
  map<string, ForeignMessageEdition2023> map_string_foreign_message = 72;
  map<string, NestedEnum> map_string_nested_enum = 73;
  map<string, ForeignEnumEdition2023> map_string_foreign_enum = 74;

  oneof oneof_field {
    uint32 oneof_uint32 = 111;
    NestedMessage oneof_nested_message = 112
        [features.message_encoding = LENGTH_PREFIXED];
    string oneof_string = 113;
    bytes oneof_bytes = 114;
    bool oneof_bool = 115;
    uint64 oneof_uint64 = 116;
    float oneof_float = 117;
    double oneof_double = 118;
    NestedEnum oneof_enum = 119;
  }

  // extensions
  extensions 120 to 200;

  // groups
  message GroupLikeType {
    int32 group_int32 = 202;
    uint32 group_uint32 = 203;
  }
  GroupLikeType groupliketype = 201;
  GroupLikeType delimited_field = 202;
}

message ForeignMessageEdition2023 {
  int32 c = 1;
}

enum ForeignEnumEdition2023 {
  FOREIGN_FOO = 0;
  FOREIGN_BAR = 1;
  FOREIGN_BAZ = 2;
}

extend TestAllTypesEdition2023 {
  int32 extension_int32 = 120;
}

message GroupLikeType {
  int32 c = 1;
}

extend TestAllTypesEdition2023 {
  GroupLikeType groupliketype = 121;
  GroupLikeType delimited_ext = 122;
}
