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

package pb;

import "google/protobuf/descriptor.proto";

option go_package = "google.golang.org/protobuf/types/gofeaturespb";

extend google.protobuf.FeatureSet {
  optional GoFeatures go = 1002;
}

message GoFeatures {
  // Whether or not to generate the deprecated UnmarshalJSON method for enums.
  optional bool legacy_unmarshal_json_enum = 1 [
    retention = RETENTION_RUNTIME,
    targets = TARGET_TYPE_ENUM,
    targets = TARGET_TYPE_FILE,
    feature_support = {
      edition_introduced: EDITION_2023,
      edition_deprecated: EDITION_2023,
      deprecation_warning: "The legacy UnmarshalJSON API is deprecated and "
                           "will be removed in a future edition.",
    },
    edition_defaults = { edition: EDITION_LEGACY, value: "true" },
    edition_defaults = { edition: EDITION_PROTO3, value: "false" }
  ];

  enum APILevel {
    // API_LEVEL_UNSPECIFIED results in selecting the OPEN API,
    // but needs to be a separate value to distinguish between
    // an explicitly set api level or a missing api level.
    API_LEVEL_UNSPECIFIED = 0;
    API_OPEN = 1;
    API_HYBRID = 2;
    API_OPAQUE = 3;
  }

  // One of OPEN, HYBRID or OPAQUE.
  optional APILevel api_level = 2 [
    retention = RETENTION_RUNTIME,
    targets = TARGET_TYPE_MESSAGE,
    targets = TARGET_TYPE_FILE,
    feature_support = {
      edition_introduced: EDITION_2023,
    },
    edition_defaults = { edition: EDITION_LEGACY, value: "API_LEVEL_UNSPECIFIED" },
    edition_defaults = { edition: EDITION_2024, value: "API_OPAQUE" }
   ];

  enum StripEnumPrefix {
    STRIP_ENUM_PREFIX_UNSPECIFIED = 0;
    STRIP_ENUM_PREFIX_KEEP = 1;
    STRIP_ENUM_PREFIX_GENERATE_BOTH = 2;
    STRIP_ENUM_PREFIX_STRIP = 3;
  }

  optional StripEnumPrefix strip_enum_prefix = 3 [
    retention = RETENTION_RUNTIME,
    targets = TARGET_TYPE_ENUM,
    targets = TARGET_TYPE_ENUM_ENTRY,
    targets = TARGET_TYPE_FILE,
    feature_support = {
      edition_introduced: EDITION_2024,
    },
    // TODO: change the default to STRIP_ENUM_PREFIX_STRIP for edition 2025.
    edition_defaults = {
      edition: EDITION_LEGACY,
      value: "STRIP_ENUM_PREFIX_KEEP"
    }
  ];
}
