// 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" } ]; }