// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package google.api; import "google/api/launch_stage.proto"; import "google/protobuf/descriptor.proto"; import "google/protobuf/duration.proto"; option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; option java_multiple_files = true; option java_outer_classname = "ClientProto"; option java_package = "com.google.api"; option objc_class_prefix = "GAPI"; extend google.protobuf.MethodOptions { // A definition of a client library method signature. // // In client libraries, each proto RPC corresponds to one or more methods // which the end user is able to call, and calls the underlying RPC. // Normally, this method receives a single argument (a struct or instance // corresponding to the RPC request object). Defining this field will // add one or more overloads providing flattened or simpler method signatures // in some languages. // // The fields on the method signature are provided as a comma-separated // string. // // For example, the proto RPC and annotation: // // rpc CreateSubscription(CreateSubscriptionRequest) // returns (Subscription) { // option (google.api.method_signature) = "name,topic"; // } // // Would add the following Java overload (in addition to the method accepting // the request object): // // public final Subscription createSubscription(String name, String topic) // // The following backwards-compatibility guidelines apply: // // * Adding this annotation to an unannotated method is backwards // compatible. // * Adding this annotation to a method which already has existing // method signature annotations is backwards compatible if and only if // the new method signature annotation is last in the sequence. // * Modifying or removing an existing method signature annotation is // a breaking change. // * Re-ordering existing method signature annotations is a breaking // change. repeated string method_signature = 1051; } extend google.protobuf.ServiceOptions { // The hostname for this service. // This should be specified with no prefix or protocol. // // Example: // // service Foo { // option (google.api.default_host) = "foo.googleapi.com"; // ... // } string default_host = 1049; // OAuth scopes needed for the client. // // Example: // // service Foo { // option (google.api.oauth_scopes) = \ // "https://www.googleapis.com/auth/cloud-platform"; // ... // } // // If there is more than one scope, use a comma-separated string: // // Example: // // service Foo { // option (google.api.oauth_scopes) = \ // "https://www.googleapis.com/auth/cloud-platform," // "https://www.googleapis.com/auth/monitoring"; // ... // } string oauth_scopes = 1050; // The API version of this service, which should be sent by version-aware // clients to the service. This allows services to abide by the schema and // behavior of the service at the time this API version was deployed. // The format of the API version must be treated as opaque by clients. // Services may use a format with an apparent structure, but clients must // not rely on this to determine components within an API version, or attempt // to construct other valid API versions. Note that this is for upcoming // functionality and may not be implemented for all services. // // Example: // // service Foo { // option (google.api.api_version) = "v1_20230821_preview"; // } string api_version = 525000001; } // Required information for every language. message CommonLanguageSettings { // Link to automatically generated reference documentation. Example: // https://cloud.google.com/nodejs/docs/reference/asset/latest string reference_docs_uri = 1 [deprecated = true]; // The destination where API teams want this client library to be published. repeated ClientLibraryDestination destinations = 2; // Configuration for which RPCs should be generated in the GAPIC client. SelectiveGapicGeneration selective_gapic_generation = 3; } // Details about how and where to publish client libraries. message ClientLibrarySettings { // Version of the API to apply these settings to. This is the full protobuf // package for the API, ending in the version element. // Examples: "google.cloud.speech.v1" and "google.spanner.admin.database.v1". string version = 1; // Launch stage of this version of the API. LaunchStage launch_stage = 2; // When using transport=rest, the client request will encode enums as // numbers rather than strings. bool rest_numeric_enums = 3; // Settings for legacy Java features, supported in the Service YAML. JavaSettings java_settings = 21; // Settings for C++ client libraries. CppSettings cpp_settings = 22; // Settings for PHP client libraries. PhpSettings php_settings = 23; // Settings for Python client libraries. PythonSettings python_settings = 24; // Settings for Node client libraries. NodeSettings node_settings = 25; // Settings for .NET client libraries. DotnetSettings dotnet_settings = 26; // Settings for Ruby client libraries. RubySettings ruby_settings = 27; // Settings for Go client libraries. GoSettings go_settings = 28; } // This message configures the settings for publishing [Google Cloud Client // libraries](https://cloud.google.com/apis/docs/cloud-client-libraries) // generated from the service config. message Publishing { // A list of API method settings, e.g. the behavior for methods that use the // long-running operation pattern. repeated MethodSettings method_settings = 2; // Link to a *public* URI where users can report issues. Example: // https://issuetracker.google.com/issues/new?component=190865&template=1161103 string new_issue_uri = 101; // Link to product home page. Example: // https://cloud.google.com/asset-inventory/docs/overview string documentation_uri = 102; // Used as a tracking tag when collecting data about the APIs developer // relations artifacts like docs, packages delivered to package managers, // etc. Example: "speech". string api_short_name = 103; // GitHub label to apply to issues and pull requests opened for this API. string github_label = 104; // GitHub teams to be added to CODEOWNERS in the directory in GitHub // containing source code for the client libraries for this API. repeated string codeowner_github_teams = 105; // A prefix used in sample code when demarking regions to be included in // documentation. string doc_tag_prefix = 106; // For whom the client library is being published. ClientLibraryOrganization organization = 107; // Client library settings. If the same version string appears multiple // times in this list, then the last one wins. Settings from earlier // settings with the same version string are discarded. repeated ClientLibrarySettings library_settings = 109; // Optional link to proto reference documentation. Example: // https://cloud.google.com/pubsub/lite/docs/reference/rpc string proto_reference_documentation_uri = 110; // Optional link to REST reference documentation. Example: // https://cloud.google.com/pubsub/lite/docs/reference/rest string rest_reference_documentation_uri = 111; } // Settings for Java client libraries. message JavaSettings { // The package name to use in Java. Clobbers the java_package option // set in the protobuf. This should be used **only** by APIs // who have already set the language_settings.java.package_name" field // in gapic.yaml. API teams should use the protobuf java_package option // where possible. // // Example of a YAML configuration:: // // publishing: // java_settings: // library_package: com.google.cloud.pubsub.v1 string library_package = 1; // Configure the Java class name to use instead of the service's for its // corresponding generated GAPIC client. Keys are fully-qualified // service names as they appear in the protobuf (including the full // the language_settings.java.interface_names" field in gapic.yaml. API // teams should otherwise use the service name as it appears in the // protobuf. // // Example of a YAML configuration:: // // publishing: // java_settings: // service_class_names: // - google.pubsub.v1.Publisher: TopicAdmin // - google.pubsub.v1.Subscriber: SubscriptionAdmin map service_class_names = 2; // Some settings. CommonLanguageSettings common = 3; } // Settings for C++ client libraries. message CppSettings { // Some settings. CommonLanguageSettings common = 1; } // Settings for Php client libraries. message PhpSettings { // Some settings. CommonLanguageSettings common = 1; } // Settings for Python client libraries. message PythonSettings { // Experimental features to be included during client library generation. // These fields will be deprecated once the feature graduates and is enabled // by default. message ExperimentalFeatures { // Enables generation of asynchronous REST clients if `rest` transport is // enabled. By default, asynchronous REST clients will not be generated. // This feature will be enabled by default 1 month after launching the // feature in preview packages. bool rest_async_io_enabled = 1; // Enables generation of protobuf code using new types that are more // Pythonic which are included in `protobuf>=5.29.x`. This feature will be // enabled by default 1 month after launching the feature in preview // packages. bool protobuf_pythonic_types_enabled = 2; } // Some settings. CommonLanguageSettings common = 1; // Experimental features to be included during client library generation. ExperimentalFeatures experimental_features = 2; } // Settings for Node client libraries. message NodeSettings { // Some settings. CommonLanguageSettings common = 1; } // Settings for Dotnet client libraries. message DotnetSettings { // Some settings. CommonLanguageSettings common = 1; // Map from original service names to renamed versions. // This is used when the default generated types // would cause a naming conflict. (Neither name is // fully-qualified.) // Example: Subscriber to SubscriberServiceApi. map renamed_services = 2; // Map from full resource types to the effective short name // for the resource. This is used when otherwise resource // named from different services would cause naming collisions. // Example entry: // "datalabeling.googleapis.com/Dataset": "DataLabelingDataset" map renamed_resources = 3; // List of full resource types to ignore during generation. // This is typically used for API-specific Location resources, // which should be handled by the generator as if they were actually // the common Location resources. // Example entry: "documentai.googleapis.com/Location" repeated string ignored_resources = 4; // Namespaces which must be aliased in snippets due to // a known (but non-generator-predictable) naming collision repeated string forced_namespace_aliases = 5; // Method signatures (in the form "service.method(signature)") // which are provided separately, so shouldn't be generated. // Snippets *calling* these methods are still generated, however. repeated string handwritten_signatures = 6; } // Settings for Ruby client libraries. message RubySettings { // Some settings. CommonLanguageSettings common = 1; } // Settings for Go client libraries. message GoSettings { // Some settings. CommonLanguageSettings common = 1; } // Describes the generator configuration for a method. message MethodSettings { // Describes settings to use when generating API methods that use the // long-running operation pattern. // All default values below are from those used in the client library // generators (e.g. // [Java](https://github.com/googleapis/gapic-generator-java/blob/04c2faa191a9b5a10b92392fe8482279c4404803/src/main/java/com/google/api/generator/gapic/composer/common/RetrySettingsComposer.java)). message LongRunning { // Initial delay after which the first poll request will be made. // Default value: 5 seconds. google.protobuf.Duration initial_poll_delay = 1; // Multiplier to gradually increase delay between subsequent polls until it // reaches max_poll_delay. // Default value: 1.5. float poll_delay_multiplier = 2; // Maximum time between two subsequent poll requests. // Default value: 45 seconds. google.protobuf.Duration max_poll_delay = 3; // Total polling timeout. // Default value: 5 minutes. google.protobuf.Duration total_poll_timeout = 4; } // The fully qualified name of the method, for which the options below apply. // This is used to find the method to apply the options. // // Example: // // publishing: // method_settings: // - selector: google.storage.control.v2.StorageControl.CreateFolder // # method settings for CreateFolder... string selector = 1; // Describes settings to use for long-running operations when generating // API methods for RPCs. Complements RPCs that use the annotations in // google/longrunning/operations.proto. // // Example of a YAML configuration:: // // publishing: // method_settings: // - selector: google.cloud.speech.v2.Speech.BatchRecognize // long_running: // initial_poll_delay: 60s # 1 minute // poll_delay_multiplier: 1.5 // max_poll_delay: 360s # 6 minutes // total_poll_timeout: 54000s # 90 minutes LongRunning long_running = 2; // List of top-level fields of the request message, that should be // automatically populated by the client libraries based on their // (google.api.field_info).format. Currently supported format: UUID4. // // Example of a YAML configuration: // // publishing: // method_settings: // - selector: google.example.v1.ExampleService.CreateExample // auto_populated_fields: // - request_id repeated string auto_populated_fields = 3; } // The organization for which the client libraries are being published. // Affects the url where generated docs are published, etc. enum ClientLibraryOrganization { // Not useful. CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED = 0; // Google Cloud Platform Org. CLOUD = 1; // Ads (Advertising) Org. ADS = 2; // Photos Org. PHOTOS = 3; // Street View Org. STREET_VIEW = 4; // Shopping Org. SHOPPING = 5; // Geo Org. GEO = 6; // Generative AI - https://developers.generativeai.google GENERATIVE_AI = 7; } // To where should client libraries be published? enum ClientLibraryDestination { // Client libraries will neither be generated nor published to package // managers. CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0; // Generate the client library in a repo under github.com/googleapis, // but don't publish it to package managers. GITHUB = 10; // Publish the library to package managers like nuget.org and npmjs.com. PACKAGE_MANAGER = 20; } // This message is used to configure the generation of a subset of the RPCs in // a service for client libraries. message SelectiveGapicGeneration { // An allowlist of the fully qualified names of RPCs that should be included // on public client surfaces. repeated string methods = 1; }