syntax = "proto2";

package google.protobuf;

option go_package = "google.golang.org/protobuf/types/descriptorpb";
option java_package = "com.google.protobuf";
option java_outer_classname = "DescriptorProtos";
option csharp_namespace = "Google.Protobuf.Reflection";
option objc_class_prefix = "GPB";
option cc_enable_arenas = true;
option optimize_for = "SPEED";

message FileDescriptorSet {

    repeated FileDescriptorProto file = 1;

    extensions 536000000;
}

enum Edition {

    EDITION_UNKNOWN = 0;
    EDITION_LEGACY = 900;
    EDITION_PROTO2 = 998;
    EDITION_PROTO3 = 999;
    EDITION_2023 = 1000;
    EDITION_2024 = 1001;
    EDITION_1_TEST_ONLY = 1;
    EDITION_2_TEST_ONLY = 2;
    EDITION_99997_TEST_ONLY = 99997;
    EDITION_99998_TEST_ONLY = 99998;
    EDITION_99999_TEST_ONLY = 99999;
    EDITION_MAX = 2147483647;
}

message FileDescriptorProto {

    optional string name = 1;
    optional string package = 2;
    repeated string dependency = 3;
    repeated int32 public_dependency = 10;
    repeated int32 weak_dependency = 11;
    repeated string option_dependency = 15;
    repeated DescriptorProto message_type = 4;
    repeated EnumDescriptorProto enum_type = 5;
    repeated ServiceDescriptorProto service = 6;
    repeated FieldDescriptorProto extension = 7;
    optional FileOptions options = 8;
    optional SourceCodeInfo source_code_info = 9;
    optional string syntax = 12;
    optional Edition edition = 14;
}

message DescriptorProto {

    optional string name = 1;
    repeated FieldDescriptorProto field = 2;
    repeated FieldDescriptorProto extension = 6;
    repeated DescriptorProto nested_type = 3;
    repeated EnumDescriptorProto enum_type = 4;
    repeated ExtensionRange extension_range = 5;
    repeated OneofDescriptorProto oneof_decl = 8;
    optional MessageOptions options = 7;
    repeated ReservedRange reserved_range = 9;
    repeated string reserved_name = 10;
    optional SymbolVisibility visibility = 11;

    message ExtensionRange {

        optional int32 start = 1;
        optional int32 end = 2;
        optional ExtensionRangeOptions options = 3;
    }

    message ReservedRange {

        optional int32 start = 1;
        optional int32 end = 2;
    }
}

message ExtensionRangeOptions {

    repeated UninterpretedOption uninterpreted_option = 999;
    repeated Declaration declaration = 2 [retention="RETENTION_SOURCE"];
    optional FeatureSet features = 50;
    optional VerificationState verification = 3 [default=UNVERIFIED, retention="RETENTION_SOURCE"];

    message Declaration {

        optional int32 number = 1;
        optional string full_name = 2;
        optional string type = 3;
        optional bool reserved = 5;
        optional bool repeated = 6;

        reserved 4;
    }

    enum VerificationState {

        DECLARATION = 0;
        UNVERIFIED = 1;
    }

    extensions 1000 to max;
}

message FieldDescriptorProto {

    optional string name = 1;
    optional int32 number = 3;
    optional Label label = 4;
    optional Type type = 5;
    optional string type_name = 6;
    optional string extendee = 2;
    optional string default_value = 7;
    optional int32 oneof_index = 9;
    optional string json_name = 10;
    optional FieldOptions options = 8;
    optional bool proto3_optional = 17;

    enum Type {

        TYPE_DOUBLE = 1;
        TYPE_FLOAT = 2;
        TYPE_INT64 = 3;
        TYPE_UINT64 = 4;
        TYPE_INT32 = 5;
        TYPE_FIXED64 = 6;
        TYPE_FIXED32 = 7;
        TYPE_BOOL = 8;
        TYPE_STRING = 9;
        TYPE_GROUP = 10;
        TYPE_MESSAGE = 11;
        TYPE_BYTES = 12;
        TYPE_UINT32 = 13;
        TYPE_ENUM = 14;
        TYPE_SFIXED32 = 15;
        TYPE_SFIXED64 = 16;
        TYPE_SINT32 = 17;
        TYPE_SINT64 = 18;
    }

    enum Label {

        LABEL_OPTIONAL = 1;
        LABEL_REPEATED = 3;
        LABEL_REQUIRED = 2;
    }
}

message OneofDescriptorProto {

    optional string name = 1;
    optional OneofOptions options = 2;
}

message EnumDescriptorProto {

    optional string name = 1;
    repeated EnumValueDescriptorProto value = 2;
    optional EnumOptions options = 3;
    repeated EnumReservedRange reserved_range = 4;
    repeated string reserved_name = 5;
    optional SymbolVisibility visibility = 6;

    message EnumReservedRange {

        optional int32 start = 1;
        optional int32 end = 2;
    }
}

message EnumValueDescriptorProto {

    optional string name = 1;
    optional int32 number = 2;
    optional EnumValueOptions options = 3;
}

message ServiceDescriptorProto {

    optional string name = 1;
    repeated MethodDescriptorProto method = 2;
    optional ServiceOptions options = 3;
}

message MethodDescriptorProto {

    optional string name = 1;
    optional string input_type = 2;
    optional string output_type = 3;
    optional MethodOptions options = 4;
    optional bool client_streaming = 5;
    optional bool server_streaming = 6;
}

message FileOptions {

    optional string java_package = 1;
    optional string java_outer_classname = 8;
    optional bool java_multiple_files = 10;
    optional bool java_generate_equals_and_hash = 20 [deprecated=true];
    optional bool java_string_check_utf8 = 27;
    optional OptimizeMode optimize_for = 9 [default=SPEED];
    optional string go_package = 11;
    optional bool cc_generic_services = 16;
    optional bool java_generic_services = 17;
    optional bool py_generic_services = 18;
    optional bool deprecated = 23;
    optional bool cc_enable_arenas = 31 [default=true];
    optional string objc_class_prefix = 36;
    optional string csharp_namespace = 37;
    optional string swift_prefix = 39;
    optional string php_class_prefix = 40;
    optional string php_namespace = 41;
    optional string php_metadata_namespace = 44;
    optional string ruby_package = 45;
    optional FeatureSet features = 50;
    repeated UninterpretedOption uninterpreted_option = 999;

    enum OptimizeMode {

        SPEED = 1;
        CODE_SIZE = 2;
        LITE_RUNTIME = 3;
    }

    extensions 1000 to max;

    reserved 42, "php_generic_services", 38;
}

message MessageOptions {

    optional bool message_set_wire_format = 1;
    optional bool no_standard_descriptor_accessor = 2;
    optional bool deprecated = 3;
    optional bool map_entry = 7;
    optional bool deprecated_legacy_json_field_conflicts = 11 [deprecated=true];
    optional FeatureSet features = 12;
    repeated UninterpretedOption uninterpreted_option = 999;

    extensions 1000 to max;

    reserved 4, 5, 6, 8, 9;
}

message FieldOptions {

    optional CType ctype = 1 [default=STRING];
    optional bool packed = 2;
    optional JSType jstype = 6 [default=JS_NORMAL];
    optional bool lazy = 5;
    optional bool unverified_lazy = 15;
    optional bool deprecated = 3;
    optional bool weak = 10 [deprecated=true];
    optional bool debug_redact = 16;
    optional OptionRetention retention = 17;
    repeated OptionTargetType targets = 19;
    repeated EditionDefault edition_defaults = 20;
    optional FeatureSet features = 21;
    optional FeatureSupport feature_support = 22;
    repeated UninterpretedOption uninterpreted_option = 999;

    enum CType {

        STRING = 0;
        CORD = 1;
        STRING_PIECE = 2;
    }

    enum JSType {

        JS_NORMAL = 0;
        JS_STRING = 1;
        JS_NUMBER = 2;
    }

    enum OptionRetention {

        RETENTION_UNKNOWN = 0;
        RETENTION_RUNTIME = 1;
        RETENTION_SOURCE = 2;
    }

    enum OptionTargetType {

        TARGET_TYPE_UNKNOWN = 0;
        TARGET_TYPE_FILE = 1;
        TARGET_TYPE_EXTENSION_RANGE = 2;
        TARGET_TYPE_MESSAGE = 3;
        TARGET_TYPE_FIELD = 4;
        TARGET_TYPE_ONEOF = 5;
        TARGET_TYPE_ENUM = 6;
        TARGET_TYPE_ENUM_ENTRY = 7;
        TARGET_TYPE_SERVICE = 8;
        TARGET_TYPE_METHOD = 9;
    }

    message EditionDefault {

        optional Edition edition = 3;
        optional string value = 2;
    }

    message FeatureSupport {

        optional Edition edition_introduced = 1;
        optional Edition edition_deprecated = 2;
        optional string deprecation_warning = 3;
        optional Edition edition_removed = 4;
    }

    extensions 1000 to max;

    reserved 4, 18;
}

message OneofOptions {

    optional FeatureSet features = 1;
    repeated UninterpretedOption uninterpreted_option = 999;

    extensions 1000 to max;
}

message EnumOptions {

    optional bool allow_alias = 2;
    optional bool deprecated = 3;
    optional bool deprecated_legacy_json_field_conflicts = 6 [deprecated=true];
    optional FeatureSet features = 7;
    repeated UninterpretedOption uninterpreted_option = 999;

    extensions 1000 to max;

    reserved 5;
}

message EnumValueOptions {

    optional bool deprecated = 1;
    optional FeatureSet features = 2;
    optional bool debug_redact = 3;
    optional FieldOptions.FeatureSupport feature_support = 4;
    repeated UninterpretedOption uninterpreted_option = 999;

    extensions 1000 to max;
}

message ServiceOptions {

    optional FeatureSet features = 34;
    optional bool deprecated = 33;
    repeated UninterpretedOption uninterpreted_option = 999;

    extensions 1000 to max;
}

message MethodOptions {

    optional bool deprecated = 33;
    optional IdempotencyLevel idempotency_level = 34 [default=IDEMPOTENCY_UNKNOWN];
    optional FeatureSet features = 35;
    repeated UninterpretedOption uninterpreted_option = 999;

    enum IdempotencyLevel {

        IDEMPOTENCY_UNKNOWN = 0;
        NO_SIDE_EFFECTS = 1;
        IDEMPOTENT = 2;
    }

    extensions 1000 to max;
}

message UninterpretedOption {

    repeated NamePart name = 2;
    optional string identifier_value = 3;
    optional uint64 positive_int_value = 4;
    optional int64 negative_int_value = 5;
    optional double double_value = 6;
    optional bytes string_value = 7;
    optional string aggregate_value = 8;

    message NamePart {

        required string name_part = 1;
        required bool is_extension = 2;
    }
}

message FeatureSet {

    optional FieldPresence field_presence = 1 [retention="RETENTION_RUNTIME", targets="TARGET_TYPE_FILE", feature_support.edition_introduced="EDITION_2023", edition_defaults.edition="EDITION_2023", edition_defaults.value="EXPLICIT"];
    optional EnumType enum_type = 2 [retention="RETENTION_RUNTIME", targets="TARGET_TYPE_FILE", feature_support.edition_introduced="EDITION_2023", edition_defaults.edition="EDITION_PROTO3", edition_defaults.value="OPEN"];
    optional RepeatedFieldEncoding repeated_field_encoding = 3 [retention="RETENTION_RUNTIME", targets="TARGET_TYPE_FILE", feature_support.edition_introduced="EDITION_2023", edition_defaults.edition="EDITION_PROTO3", edition_defaults.value="PACKED"];
    optional Utf8Validation utf8_validation = 4 [retention="RETENTION_RUNTIME", targets="TARGET_TYPE_FILE", feature_support.edition_introduced="EDITION_2023", edition_defaults.edition="EDITION_PROTO3", edition_defaults.value="VERIFY"];
    optional MessageEncoding message_encoding = 5 [retention="RETENTION_RUNTIME", targets="TARGET_TYPE_FILE", feature_support.edition_introduced="EDITION_2023", edition_defaults.edition="EDITION_LEGACY", edition_defaults.value="LENGTH_PREFIXED"];
    optional JsonFormat json_format = 6 [retention="RETENTION_RUNTIME", targets="TARGET_TYPE_FILE", feature_support.edition_introduced="EDITION_2023", edition_defaults.edition="EDITION_PROTO3", edition_defaults.value="ALLOW"];
    optional EnforceNamingStyle enforce_naming_style = 7 [retention="RETENTION_SOURCE", targets="TARGET_TYPE_METHOD", feature_support.edition_introduced="EDITION_2024", edition_defaults.edition="EDITION_2024", edition_defaults.value="STYLE2024"];
    optional VisibilityFeature.DefaultSymbolVisibility default_symbol_visibility = 8 [retention="RETENTION_SOURCE", targets="TARGET_TYPE_FILE", feature_support.edition_introduced="EDITION_2024", edition_defaults.edition="EDITION_2024", edition_defaults.value="EXPORT_TOP_LEVEL"];

    enum FieldPresence {

        FIELD_PRESENCE_UNKNOWN = 0;
        EXPLICIT = 1;
        IMPLICIT = 2;
        LEGACY_REQUIRED = 3;
    }

    enum EnumType {

        ENUM_TYPE_UNKNOWN = 0;
        OPEN = 1;
        CLOSED = 2;
    }

    enum RepeatedFieldEncoding {

        REPEATED_FIELD_ENCODING_UNKNOWN = 0;
        PACKED = 1;
        EXPANDED = 2;
    }

    enum Utf8Validation {

        UTF8_VALIDATION_UNKNOWN = 0;
        VERIFY = 2;
        NONE = 3;
    }

    enum MessageEncoding {

        MESSAGE_ENCODING_UNKNOWN = 0;
        LENGTH_PREFIXED = 1;
        DELIMITED = 2;
    }

    enum JsonFormat {

        JSON_FORMAT_UNKNOWN = 0;
        ALLOW = 1;
        LEGACY_BEST_EFFORT = 2;
    }

    enum EnforceNamingStyle {

        ENFORCE_NAMING_STYLE_UNKNOWN = 0;
        STYLE2024 = 1;
        STYLE_LEGACY = 2;
    }

    message VisibilityFeature {

        enum DefaultSymbolVisibility {

            DEFAULT_SYMBOL_VISIBILITY_UNKNOWN = 0;
            EXPORT_ALL = 1;
            EXPORT_TOP_LEVEL = 2;
            LOCAL_ALL = 3;
            STRICT = 4;
        }

        reserved 1 to max;
    }

    extensions 1000 to 9994, 9995 to 9999, 10000;

    reserved 999;
}

message FeatureSetDefaults {

    repeated FeatureSetEditionDefault defaults = 1;
    optional Edition minimum_edition = 4;
    optional Edition maximum_edition = 5;

    message FeatureSetEditionDefault {

        optional Edition edition = 3;
        optional FeatureSet overridable_features = 4;
        optional FeatureSet fixed_features = 5;

        reserved 1, 2, "features";
    }
}

message SourceCodeInfo {

    repeated Location location = 1;

    message Location {

        repeated int32 path = 1 [packed=true];
        repeated int32 span = 2 [packed=true];
        optional string leading_comments = 3;
        optional string trailing_comments = 4;
        repeated string leading_detached_comments = 6;
    }

    extensions 536000000;
}

message GeneratedCodeInfo {

    repeated Annotation annotation = 1;

    message Annotation {

        repeated int32 path = 1 [packed=true];
        optional string source_file = 2;
        optional int32 begin = 3;
        optional int32 end = 4;
        optional Semantic semantic = 5;

        enum Semantic {

            NONE = 0;
            SET = 1;
            ALIAS = 2;
        }
    }
}

enum SymbolVisibility {

    VISIBILITY_UNSET = 0;
    VISIBILITY_LOCAL = 1;
    VISIBILITY_EXPORT = 2;
}