// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

edition = "2023";

package opaque.goproto.proto.testeditions;

import "internal/testprotos/enums/enums_opaque/enums.opaque.proto";
import "internal/testprotos/testeditions/testeditions_opaque/test_import.opaque.proto";

option go_package = "google.golang.org/protobuf/internal/testprotos/testeditions/testeditions_opaque";
import "google/protobuf/go_features.proto";
option features.(pb.go).api_level = API_OPAQUE;

message TestAllTypes {
  message NestedMessage {
    int32 a = 1;
    TestAllTypes corecursive = 2;
  }

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

  int32 singular_int32 = 124 [features.field_presence = IMPLICIT];
  int64 singular_int64 = 125 [features.field_presence = IMPLICIT];
  uint32 singular_uint32 = 126 [features.field_presence = IMPLICIT];
  uint64 singular_uint64 = 127 [features.field_presence = IMPLICIT];
  sint32 singular_sint32 = 128 [features.field_presence = IMPLICIT];
  sint64 singular_sint64 = 129 [features.field_presence = IMPLICIT];
  fixed32 singular_fixed32 = 130 [features.field_presence = IMPLICIT];
  fixed64 singular_fixed64 = 131 [features.field_presence = IMPLICIT];
  sfixed32 singular_sfixed32 = 132 [features.field_presence = IMPLICIT];
  sfixed64 singular_sfixed64 = 133 [features.field_presence = IMPLICIT];
  float singular_float = 134 [features.field_presence = IMPLICIT];
  double singular_double = 135 [features.field_presence = IMPLICIT];
  bool singular_bool = 136 [features.field_presence = IMPLICIT];
  string singular_string = 137 [features.field_presence = IMPLICIT];
  bytes singular_bytes = 138 [features.field_presence = IMPLICIT];
  // message-typed fields elided, as they cannot specify implicit presence.
  NestedEnum singular_nested_enum = 142 [features.field_presence = IMPLICIT];
  ForeignEnum singular_foreign_enum = 143 [features.field_presence = IMPLICIT];
  ImportEnum singular_import_enum = 144 [features.field_presence = IMPLICIT];

  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;
  message OptionalGroup {
    int32 a = 17;
    NestedMessage optional_nested_message = 1000;
    int32 same_field_number = 16;
  }
  OptionalGroup optionalgroup = 16 [features.message_encoding = DELIMITED];
  OptionalGroup not_group_like_delimited = 17
      [features.message_encoding = DELIMITED];
  NestedMessage optional_nested_message = 18;
  ForeignMessage optional_foreign_message = 19;
  ImportMessage optional_import_message = 20;
  NestedEnum optional_nested_enum = 21;
  ForeignEnum optional_foreign_enum = 22;
  ImportEnum optional_import_enum = 23;
  NestedMessage optional_lazy_nested_message = 24 [lazy = true];

  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;

  message RepeatedGroup {
    int32 a = 47;
    NestedMessage optional_nested_message = 1001;
  }
  repeated RepeatedGroup repeatedgroup = 46 [
    features.message_encoding = DELIMITED,
    features.repeated_field_encoding = EXPANDED
  ];
  repeated NestedMessage repeated_nested_message = 48;
  repeated ForeignMessage repeated_foreign_message = 49;
  repeated ImportMessage repeated_importmessage = 50;
  repeated NestedEnum repeated_nested_enum = 51;
  repeated ForeignEnum repeated_foreign_enum = 52;
  repeated ImportEnum repeated_importenum = 53;

  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, NestedEnum> map_string_nested_enum = 73;

  // Singular with defaults
  int32 default_int32 = 81 [default = 81];
  int64 default_int64 = 82 [default = 82];
  uint32 default_uint32 = 83 [default = 83];
  uint64 default_uint64 = 84 [default = 84];
  sint32 default_sint32 = 85 [default = -85];
  sint64 default_sint64 = 86 [default = 86];
  fixed32 default_fixed32 = 87 [default = 87];
  fixed64 default_fixed64 = 88 [default = 88];
  sfixed32 default_sfixed32 = 89 [default = 89];
  sfixed64 default_sfixed64 = 80 [default = -90];
  float default_float = 91 [default = 91.5];
  double default_double = 92 [default = 92e3];
  bool default_bool = 93 [default = true];
  string default_string = 94 [default = "hello"];
  bytes default_bytes = 95 [default = "world"];
  NestedEnum default_nested_enum = 96 [default = BAR];
  ForeignEnum default_foreign_enum = 97 [default = FOREIGN_BAR];

  message OneofGroup {
    int32 a = 1;
    int32 b = 2;
  }
  oneof oneof_field {
    uint32 oneof_uint32 = 111;
    NestedMessage oneof_nested_message = 112;
    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;
    OneofGroup oneofgroup = 121 [features.message_encoding = DELIMITED];
  }

  // A oneof with exactly one field.
  oneof oneof_optional {
    uint32 oneof_optional_uint32 = 120;
  }
}

message TestManyMessageFieldsMessage {
  TestAllTypes f1 = 1;
  TestAllTypes f2 = 2;
  TestAllTypes f3 = 3;
  TestAllTypes f4 = 4;
  TestAllTypes f5 = 5;
  TestAllTypes f6 = 6;
  TestAllTypes f7 = 7;
  TestAllTypes f8 = 8;
  TestAllTypes f9 = 9;
  TestAllTypes f10 = 10;
  TestAllTypes f11 = 11;
  TestAllTypes f12 = 12;
  TestAllTypes f13 = 13;
  TestAllTypes f14 = 14;
  TestAllTypes f15 = 15;
  TestAllTypes f16 = 16;
  TestAllTypes f17 = 17;
  TestAllTypes f18 = 18;
  TestAllTypes f19 = 19;
  TestAllTypes f20 = 20;
  TestAllTypes f21 = 21;
  TestAllTypes f22 = 22;
  TestAllTypes f23 = 23;
  TestAllTypes f24 = 24;
  TestAllTypes f25 = 25;
  TestAllTypes f26 = 26;
  TestAllTypes f27 = 27;
  TestAllTypes f28 = 28;
  TestAllTypes f29 = 29;
  TestAllTypes f30 = 30;
  TestAllTypes f31 = 31;
  TestAllTypes f32 = 32;
  TestAllTypes f33 = 33;
  TestAllTypes f34 = 34;
  TestAllTypes f35 = 35;
  TestAllTypes f36 = 36;
  TestAllTypes f37 = 37;
  TestAllTypes f38 = 38;
  TestAllTypes f39 = 39;
  TestAllTypes f40 = 40;
  TestAllTypes f41 = 41;
  TestAllTypes f42 = 42;
  TestAllTypes f43 = 43;
  TestAllTypes f44 = 44;
  TestAllTypes f45 = 45;
  TestAllTypes f46 = 46;
  TestAllTypes f47 = 47;
  TestAllTypes f48 = 48;
  TestAllTypes f49 = 49;
  TestAllTypes f50 = 50;
  TestAllTypes f51 = 51;
  TestAllTypes f52 = 52;
  TestAllTypes f53 = 53;
  TestAllTypes f54 = 54;
  TestAllTypes f55 = 55;
  TestAllTypes f56 = 56;
  TestAllTypes f57 = 57;
  TestAllTypes f58 = 58;
  TestAllTypes f59 = 59;
  TestAllTypes f60 = 60;
  TestAllTypes f61 = 61;
  TestAllTypes f62 = 62;
  TestAllTypes f63 = 63;
  TestAllTypes f64 = 64;
  TestAllTypes f65 = 65;
  TestAllTypes f66 = 66;
  TestAllTypes f67 = 67;
  TestAllTypes f68 = 68;
  TestAllTypes f69 = 69;
  TestAllTypes f70 = 70;
  TestAllTypes f71 = 71;
  TestAllTypes f72 = 72;
  TestAllTypes f73 = 73;
  TestAllTypes f74 = 74;
  TestAllTypes f75 = 75;
  TestAllTypes f76 = 76;
  TestAllTypes f77 = 77;
  TestAllTypes f78 = 78;
  TestAllTypes f79 = 79;
  TestAllTypes f80 = 80;
  TestAllTypes f81 = 81;
  TestAllTypes f82 = 82;
  TestAllTypes f83 = 83;
  TestAllTypes f84 = 84;
  TestAllTypes f85 = 85;
  TestAllTypes f86 = 86;
  TestAllTypes f87 = 87;
  TestAllTypes f88 = 88;
  TestAllTypes f89 = 89;
  TestAllTypes f90 = 90;
  TestAllTypes f91 = 91;
  TestAllTypes f92 = 92;
  TestAllTypes f93 = 93;
  TestAllTypes f94 = 94;
  TestAllTypes f95 = 95;
  TestAllTypes f96 = 96;
  TestAllTypes f97 = 97;
  TestAllTypes f98 = 98;
  TestAllTypes f99 = 99;
  TestAllTypes f100 = 100;
}

message TestOneofWithRequired {
  oneof oneof_field {
    uint32 oneof_uint32 = 1;
    TestRequired oneof_required = 2;
  }
}

message ForeignMessage {
  int32 c = 1;
  int32 d = 2;
}

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

message TestRequired {
  int32 required_field = 1 [features.field_presence = LEGACY_REQUIRED];
}

message TestRequiredForeign {
  TestRequired optional_message = 1;
  repeated TestRequired repeated_message = 2;
  map<int32, TestRequired> map_message = 3;
  oneof oneof_field {
    TestRequired oneof_message = 4;
  }
}

message TestRequiredGroupFields {
  message OptionalGroup {
    int32 a = 2 [features.field_presence = LEGACY_REQUIRED];
  }
  OptionalGroup optionalgroup = 1 [features.message_encoding = DELIMITED];
  message RepeatedGroup {
    int32 a = 4 [features.field_presence = LEGACY_REQUIRED];
  }
  repeated RepeatedGroup repeatedgroup = 3
      [features.message_encoding = DELIMITED];
}

message TestRequiredLazy {
  TestRequired optional_lazy_message = 1 [lazy = true];
}

message TestPackedTypes {
  repeated int32 packed_int32 = 90 [features.repeated_field_encoding = PACKED];
  repeated int64 packed_int64 = 91 [features.repeated_field_encoding = PACKED];
  repeated uint32 packed_uint32 = 92
      [features.repeated_field_encoding = PACKED];
  repeated uint64 packed_uint64 = 93
      [features.repeated_field_encoding = PACKED];
  repeated sint32 packed_sint32 = 94
      [features.repeated_field_encoding = PACKED];
  repeated sint64 packed_sint64 = 95
      [features.repeated_field_encoding = PACKED];
  repeated fixed32 packed_fixed32 = 96
      [features.repeated_field_encoding = PACKED];
  repeated fixed64 packed_fixed64 = 97
      [features.repeated_field_encoding = PACKED];
  repeated sfixed32 packed_sfixed32 = 98
      [features.repeated_field_encoding = PACKED];
  repeated sfixed64 packed_sfixed64 = 99
      [features.repeated_field_encoding = PACKED];
  repeated float packed_float = 100 [features.repeated_field_encoding = PACKED];
  repeated double packed_double = 101
      [features.repeated_field_encoding = PACKED];
  repeated bool packed_bool = 102 [features.repeated_field_encoding = PACKED];
  repeated ForeignEnum packed_enum = 103
      [features.repeated_field_encoding = PACKED];
}

message TestPackedExtensions {
  extensions 1 to max;
}

extend TestPackedExtensions {
  repeated int32 packed_int32 = 90 [features.repeated_field_encoding = PACKED];
  repeated int64 packed_int64 = 91 [features.repeated_field_encoding = PACKED];
  repeated uint32 packed_uint32 = 92
      [features.repeated_field_encoding = PACKED];
  repeated uint64 packed_uint64 = 93
      [features.repeated_field_encoding = PACKED];
  repeated sint32 packed_sint32 = 94
      [features.repeated_field_encoding = PACKED];
  repeated sint64 packed_sint64 = 95
      [features.repeated_field_encoding = PACKED];
  repeated fixed32 packed_fixed32 = 96
      [features.repeated_field_encoding = PACKED];
  repeated fixed64 packed_fixed64 = 97
      [features.repeated_field_encoding = PACKED];
  repeated sfixed32 packed_sfixed32 = 98
      [features.repeated_field_encoding = PACKED];
  repeated sfixed64 packed_sfixed64 = 99
      [features.repeated_field_encoding = PACKED];
  repeated float packed_float = 100 [features.repeated_field_encoding = PACKED];
  repeated double packed_double = 101
      [features.repeated_field_encoding = PACKED];
  repeated bool packed_bool = 102 [features.repeated_field_encoding = PACKED];
  repeated ForeignEnum packed_enum = 103
      [features.repeated_field_encoding = PACKED];
}

message RemoteDefault {
  goproto.proto.enums.Enum default = 1;
  goproto.proto.enums.Enum zero = 2 [default = ZERO];
  goproto.proto.enums.Enum one = 3 [default = ONE];
  goproto.proto.enums.Enum elevent = 4 [default = ELEVENT];
  goproto.proto.enums.Enum seventeen = 5 [default = SEVENTEEN];
  goproto.proto.enums.Enum thirtyseven = 6 [default = THIRTYSEVEN];
  goproto.proto.enums.Enum sixtyseven = 7 [default = SIXTYSEVEN];
  goproto.proto.enums.Enum negative = 8 [default = NEGATIVE];
}