| // 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. | 
 |   // Can only be true for proto using the Open Struct api. | 
 |   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" | 
 |     } | 
 |   ]; | 
 | } |