| // 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 |
| |
| edition = "2023"; |
| |
| package pb; |
| |
| import "google/protobuf/descriptor.proto"; |
| |
| extend google.protobuf.FeatureSet { |
| TestFeatures test = 9999; |
| } |
| |
| message TestMessage { |
| extend google.protobuf.FeatureSet { |
| TestFeatures test_message = 9998; |
| } |
| message Nested { |
| extend google.protobuf.FeatureSet { |
| TestFeatures test_nested = 9997; |
| } |
| } |
| } |
| |
| enum EnumFeature { |
| TEST_ENUM_FEATURE_UNKNOWN = 0; |
| VALUE1 = 1; |
| VALUE2 = 2; |
| VALUE3 = 3; |
| VALUE4 = 4; |
| VALUE5 = 5; |
| VALUE6 = 6; |
| VALUE7 = 7; |
| VALUE8 = 8; |
| VALUE9 = 9; |
| VALUE10 = 10; |
| VALUE11 = 11; |
| VALUE12 = 12; |
| VALUE13 = 13; |
| VALUE14 = 14; |
| VALUE15 = 15; |
| } |
| |
| enum ValueLifetimeFeature { |
| TEST_VALUE_LIFETIME_UNKNOWN = 0; |
| VALUE_LIFETIME_INHERITED = 1; |
| VALUE_LIFETIME_SUPPORT = 2 [feature_support = { |
| edition_introduced: EDITION_99997_TEST_ONLY |
| edition_deprecated: EDITION_99998_TEST_ONLY |
| deprecation_warning: "Custom feature deprecation warning" |
| edition_removed: EDITION_99999_TEST_ONLY |
| }]; |
| VALUE_LIFETIME_EMPTY_SUPPORT = 3 [feature_support = {}]; |
| VALUE_LIFETIME_FUTURE = 4 |
| [feature_support.edition_introduced = EDITION_99997_TEST_ONLY]; |
| VALUE_LIFETIME_DEPRECATED = 5 [feature_support = { |
| edition_deprecated: EDITION_99997_TEST_ONLY |
| deprecation_warning: "Custom feature deprecation warning" |
| }]; |
| VALUE_LIFETIME_REMOVED = 6 [feature_support = { |
| edition_deprecated: EDITION_2023 |
| edition_removed: EDITION_99997_TEST_ONLY |
| }]; |
| } |
| |
| message TestFeatures { |
| EnumFeature file_feature = 1 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_FILE, |
| feature_support.edition_introduced = EDITION_2023, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" }, |
| edition_defaults = { edition: EDITION_PROTO3, value: "VALUE2" }, |
| edition_defaults = { edition: EDITION_2023, value: "VALUE3" }, |
| edition_defaults = { edition: EDITION_99997_TEST_ONLY, value: "VALUE4" }, |
| edition_defaults = { edition: EDITION_99998_TEST_ONLY, value: "VALUE5" } |
| ]; |
| EnumFeature extension_range_feature = 2 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_EXTENSION_RANGE, |
| feature_support.edition_introduced = EDITION_2023, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" } |
| ]; |
| EnumFeature message_feature = 3 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_MESSAGE, |
| feature_support.edition_introduced = EDITION_2023, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" } |
| ]; |
| EnumFeature field_feature = 4 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_FIELD, |
| feature_support.edition_introduced = EDITION_2023, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" } |
| ]; |
| EnumFeature oneof_feature = 5 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_ONEOF, |
| feature_support.edition_introduced = EDITION_2023, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" } |
| ]; |
| EnumFeature enum_feature = 6 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_ENUM, |
| feature_support.edition_introduced = EDITION_2023, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" } |
| ]; |
| EnumFeature enum_entry_feature = 7 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_ENUM_ENTRY, |
| feature_support.edition_introduced = EDITION_2023, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" } |
| ]; |
| EnumFeature service_feature = 8 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_SERVICE, |
| feature_support.edition_introduced = EDITION_2023, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" } |
| ]; |
| EnumFeature method_feature = 9 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_METHOD, |
| feature_support.edition_introduced = EDITION_2023, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" } |
| ]; |
| EnumFeature multiple_feature = 10 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_FILE, |
| targets = TARGET_TYPE_FIELD, |
| targets = TARGET_TYPE_MESSAGE, |
| targets = TARGET_TYPE_ENUM, |
| targets = TARGET_TYPE_ENUM_ENTRY, |
| targets = TARGET_TYPE_SERVICE, |
| targets = TARGET_TYPE_METHOD, |
| targets = TARGET_TYPE_ONEOF, |
| targets = TARGET_TYPE_EXTENSION_RANGE, |
| feature_support.edition_introduced = EDITION_2023, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" } |
| ]; |
| |
| bool bool_field_feature = 11 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_FIELD, |
| feature_support.edition_introduced = EDITION_2023, |
| edition_defaults = { edition: EDITION_LEGACY, value: "false" }, |
| edition_defaults = { edition: EDITION_99997_TEST_ONLY, value: "true" } |
| ]; |
| |
| EnumFeature source_feature = 15 [ |
| retention = RETENTION_SOURCE, |
| targets = TARGET_TYPE_FILE, |
| targets = TARGET_TYPE_FIELD, |
| targets = TARGET_TYPE_MESSAGE, |
| targets = TARGET_TYPE_ENUM, |
| targets = TARGET_TYPE_ENUM_ENTRY, |
| targets = TARGET_TYPE_SERVICE, |
| targets = TARGET_TYPE_METHOD, |
| targets = TARGET_TYPE_ONEOF, |
| targets = TARGET_TYPE_EXTENSION_RANGE, |
| feature_support.edition_introduced = EDITION_2023, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" } |
| ]; |
| |
| EnumFeature source_feature2 = 16 [ |
| retention = RETENTION_SOURCE, |
| targets = TARGET_TYPE_FILE, |
| targets = TARGET_TYPE_FIELD, |
| targets = TARGET_TYPE_MESSAGE, |
| targets = TARGET_TYPE_ENUM, |
| targets = TARGET_TYPE_ENUM_ENTRY, |
| targets = TARGET_TYPE_SERVICE, |
| targets = TARGET_TYPE_METHOD, |
| targets = TARGET_TYPE_ONEOF, |
| targets = TARGET_TYPE_EXTENSION_RANGE, |
| feature_support.edition_introduced = EDITION_2023, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" } |
| ]; |
| |
| EnumFeature removed_feature = 17 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_FILE, |
| targets = TARGET_TYPE_FIELD, |
| feature_support = { |
| edition_introduced: EDITION_2023 |
| edition_deprecated: EDITION_2023 |
| deprecation_warning: "Custom feature deprecation warning" |
| edition_removed: EDITION_2024 |
| }, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" }, |
| edition_defaults = { edition: EDITION_2023, value: "VALUE2" }, |
| edition_defaults = { edition: EDITION_2024, value: "VALUE3" } |
| ]; |
| |
| EnumFeature future_feature = 18 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_FILE, |
| targets = TARGET_TYPE_FIELD, |
| feature_support = { edition_introduced: EDITION_2024 }, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" }, |
| edition_defaults = { edition: EDITION_2024, value: "VALUE2" } |
| ]; |
| |
| EnumFeature legacy_feature = 19 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_FILE, |
| targets = TARGET_TYPE_FIELD, |
| feature_support = { |
| edition_introduced: EDITION_PROTO3 |
| edition_removed: EDITION_2023 |
| }, |
| edition_defaults = { edition: EDITION_LEGACY, value: "VALUE1" }, |
| edition_defaults = { edition: EDITION_2023, value: "VALUE2" } |
| ]; |
| |
| ValueLifetimeFeature value_lifetime_feature = 20 [ |
| retention = RETENTION_RUNTIME, |
| targets = TARGET_TYPE_FILE, |
| feature_support = { |
| edition_introduced: EDITION_2023 |
| edition_deprecated: EDITION_99998_TEST_ONLY |
| deprecation_warning: "Custom feature deprecation warning" |
| edition_removed: EDITION_99999_TEST_ONLY |
| }, |
| edition_defaults = { |
| edition: EDITION_LEGACY, |
| value: "VALUE_LIFETIME_INHERITED" |
| }, |
| // Verify edition defaults can use future values. |
| edition_defaults = { |
| edition: EDITION_2023, |
| value: "VALUE_LIFETIME_FUTURE" |
| }, |
| // Verify edition defaults can use removed values. |
| edition_defaults = { |
| edition: EDITION_99999_TEST_ONLY, |
| value: "VALUE_LIFETIME_FUTURE" |
| } |
| ]; |
| } |