diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 678143b7f31e..f10ea00bc0a3 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -9,3 +9,4 @@ /java-vertexai/ @googleapis/vertexai-team @googleapis/cloud-sdk-java-team /java-bigquerystorage/ @googleapis/bigquery-team @googleapis/cloud-sdk-java-team /java-bigquery/ @googleapis/bigquery-team @googleapis/cloud-sdk-java-team +/java-pubsub/ @googleapis/pubsub-team @googleapis/cloud-sdk-java-team diff --git a/.kokoro/common.sh b/.kokoro/common.sh index c2db30296c22..c5a9190c36ad 100644 --- a/.kokoro/common.sh +++ b/.kokoro/common.sh @@ -23,6 +23,7 @@ excluded_modules=( 'java-bigquerystorage' 'java-datastore' 'java-logging-logback' + 'java-pubsub' ) function retry_with_backoff { diff --git a/.kokoro/presubmit/logging-graalvm-native-presubmit.cfg b/.kokoro/presubmit/logging-graalvm-native-presubmit.cfg index d16598bb817f..0cffee8cea7b 100644 --- a/.kokoro/presubmit/logging-graalvm-native-presubmit.cfg +++ b/.kokoro/presubmit/logging-graalvm-native-presubmit.cfg @@ -3,7 +3,7 @@ # Configure the docker image for kokoro-trampoline. env_vars: { key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.56.1" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.57.0" # {x-version-update:google-cloud-shared-dependencies:current} } env_vars: { @@ -14,25 +14,29 @@ env_vars: { # TODO: remove this after we've migrated all tests and scripts env_vars: { key: "GCLOUD_PROJECT" - value: "cloud-java-ci-test" + value: "gcloud-devel" } env_vars: { key: "GOOGLE_CLOUD_PROJECT" - value: "cloud-java-ci-test" + value: "gcloud-devel" } env_vars: { key: "GOOGLE_APPLICATION_CREDENTIALS" - value: "secret_manager/cloud-java-ci-it-service-account" + value: "secret_manager/java-it-service-account" } env_vars: { key: "SECRET_MANAGER_KEYS" - value: "cloud-java-ci-it-service-account, java-bigqueryconnection-samples-secrets" + value: "java-it-service-account" } +env_vars: { + key: "IT_SERVICE_ACCOUNT_EMAIL" + value: "it-service-account@gcloud-devel.iam.gserviceaccount.com" +} env_vars: { key: "BUILD_SUBDIR" - value: "java-logging" + value: "java-pubsub" } diff --git a/.kokoro/presubmit/logging-integration.cfg b/.kokoro/presubmit/logging-integration.cfg index 30143885f2b4..be3f86be735e 100644 --- a/.kokoro/presubmit/logging-integration.cfg +++ b/.kokoro/presubmit/logging-integration.cfg @@ -3,7 +3,7 @@ # Configure the docker image for kokoro-trampoline. env_vars: { key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java11" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" } env_vars: { @@ -14,25 +14,26 @@ env_vars: { # TODO: remove this after we've migrated all tests and scripts env_vars: { key: "GCLOUD_PROJECT" - value: "cloud-java-ci-test" + value: "gcloud-devel" } env_vars: { key: "GOOGLE_CLOUD_PROJECT" - value: "cloud-java-ci-test" + value: "gcloud-devel" } env_vars: { key: "GOOGLE_APPLICATION_CREDENTIALS" - value: "secret_manager/cloud-java-ci-it-service-account" + value: "secret_manager/java-it-service-account" } env_vars: { key: "SECRET_MANAGER_KEYS" - value: "cloud-java-ci-it-service-account, java-bigqueryconnection-samples-secrets" + value: "java-it-service-account" } + env_vars: { key: "BUILD_SUBDIR" - value: "java-logging" + value: "java-pubsub" } diff --git a/.kokoro/presubmit/pubsub-graalvm-native-presubmit.cfg b/.kokoro/presubmit/pubsub-graalvm-native-presubmit.cfg new file mode 100644 index 000000000000..0cffee8cea7b --- /dev/null +++ b/.kokoro/presubmit/pubsub-graalvm-native-presubmit.cfg @@ -0,0 +1,42 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.57.0" # {x-version-update:google-cloud-shared-dependencies:current} +} + +env_vars: { + key: "JOB_TYPE" + value: "graalvm-single" +} + +# TODO: remove this after we've migrated all tests and scripts +env_vars: { + key: "GCLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_CLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_APPLICATION_CREDENTIALS" + value: "secret_manager/java-it-service-account" +} + +env_vars: { + key: "SECRET_MANAGER_KEYS" + value: "java-it-service-account" +} + +env_vars: { + key: "IT_SERVICE_ACCOUNT_EMAIL" + value: "it-service-account@gcloud-devel.iam.gserviceaccount.com" +} +env_vars: { + key: "BUILD_SUBDIR" + value: "java-pubsub" +} diff --git a/.kokoro/presubmit/pubsub-integration.cfg b/.kokoro/presubmit/pubsub-integration.cfg new file mode 100644 index 000000000000..be3f86be735e --- /dev/null +++ b/.kokoro/presubmit/pubsub-integration.cfg @@ -0,0 +1,39 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" +} + +env_vars: { + key: "JOB_TYPE" + value: "integration-single" +} + +# TODO: remove this after we've migrated all tests and scripts +env_vars: { + key: "GCLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_CLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_APPLICATION_CREDENTIALS" + value: "secret_manager/java-it-service-account" +} + +env_vars: { + key: "SECRET_MANAGER_KEYS" + value: "java-it-service-account" +} + + +env_vars: { + key: "BUILD_SUBDIR" + value: "java-pubsub" +} diff --git a/gapic-libraries-bom/pom.xml b/gapic-libraries-bom/pom.xml index 70790ff3c588..3b692f202f91 100644 --- a/gapic-libraries-bom/pom.xml +++ b/gapic-libraries-bom/pom.xml @@ -1074,6 +1074,13 @@ pom import + + com.google.cloud + google-cloud-pubsub-bom + 1.149.1-SNAPSHOT + pom + import + com.google.cloud google-cloud-rapidmigrationassessment-bom diff --git a/generation/check_non_release_please_versions.sh b/generation/check_non_release_please_versions.sh index 14393d905915..36b73e389ef3 100755 --- a/generation/check_non_release_please_versions.sh +++ b/generation/check_non_release_please_versions.sh @@ -12,6 +12,7 @@ for pomFile in $(find . -mindepth 2 -name pom.xml | sort ); do [[ "${pomFile}" =~ .*java-datastore.* ]] || \ [[ "${pomFile}" =~ .*java-logging-logback.* ]] || \ [[ "${pomFile}" =~ .*java-bigquery.* ]] || \ + [[ "${pomFile}" =~ .*java-pubsub.* ]] || \ [[ "${pomFile}" =~ .*.github*. ]]; then continue fi diff --git a/generation_config.yaml b/generation_config.yaml index 0909dc1bc824..1310c174009e 100644 --- a/generation_config.yaml +++ b/generation_config.yaml @@ -2019,6 +2019,27 @@ libraries: GAPICs: - proto_path: google/cloud/security/publicca/v1beta1 - proto_path: google/cloud/security/publicca/v1 +- api_shortname: pubsub + name_pretty: Cloud Pub/Sub + api_reference: https://cloud.google.com/pubsub/ + product_documentation: https://cloud.google.com/pubsub/docs/ + client_documentation: https://cloud.google.com/java/docs/reference/google-cloud-pubsub/latest/history + api_description: is designed to provide reliable, many-to-many, asynchronous messaging + between applications. Publisher applications can send messages to a topic and + other applications can subscribe to that topic to receive the messages. By decoupling + senders and receivers, Google Cloud Pub/Sub allows developers to communicate between + independently written applications. + issue_tracker: https://issuetracker.google.com/savedsearches/559741 + release_level: stable + language: java + distribution_name: com.google.cloud:google-cloud-pubsub + codeowner_team: '@googleapis/pubsub-team' + api_id: pubsub.googleapis.com + library_type: GAPIC_COMBO + requires_billing: true + recommended_package: com.google.cloud.pubsub.v1 + GAPICs: + - proto_path: google/pubsub/v1 - api_shortname: rapidmigrationassessment name_pretty: Rapid Migration Assessment API product_documentation: https://cloud.google.com/migration-center/docs diff --git a/java-pubsub/.OwlBot-hermetic.yaml b/java-pubsub/.OwlBot-hermetic.yaml new file mode 100644 index 000000000000..75c13c86d7aa --- /dev/null +++ b/java-pubsub/.OwlBot-hermetic.yaml @@ -0,0 +1,77 @@ +# Copyright 2021 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. + +deep-remove-regex: +- /java-pubsub/grpc-google-.*/src +- /java-pubsub/proto-google-.*/src +- /java-pubsub/google-.*/src +deep-preserve-regex: +- /java-pubsub/google-cloud-pubsub/src/test/resources/META-INF/native-image/.* +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/.*/v.*/it/IT.*Test.java +- /java-pubsub/google-.*/src/test/java/com/google/cloud/.*/v.*/it/IT.*Test.java +- /java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeletedTopic.java +- /java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectSnapshotName.java +- /java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectSubscriptionName.java +- /java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectTopicName.java +- /java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/TopicNames.java +- /java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UntypedTopicName.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/it/ITPubSubTest.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/CustomArgumentMatchers.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakeClock.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakePublisherServiceImpl.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakeScheduledExecutorService.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakeSubscriberServiceImpl.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MessageDataMatcher.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MessageDispatcherTest.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/OpenCensusUtilTest.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/OpenTelemetryTest.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/PublisherImplTest.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SequentialExecutorServiceTest.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/StatusUtilTest.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnectionTest.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriberShutdownSettingsTest.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriberTest.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/TopicAdminSmokeTest.java +- /java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumer.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumerImpl.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumerWithResponse.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumerWithResponseImpl.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckRequestData.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckResponse.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageDispatcher.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageReceiver.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageReceiverWithAckResponse.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/ModackRequestData.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/OpenCensusUtil.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/OpenTelemetryPubsubTracer.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Publisher.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PublisherInterface.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PubsubMessageWrapper.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SequentialExecutorService.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/StatusUtil.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnection.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Subscriber.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberInterface.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberShutdownSettings.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberStats.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Waiter.java +- /java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/LoggingUtil.java +deep-copy-regex: +- source: /google/pubsub/(v.*)/.*-java/proto-google-.*/src + dest: /owl-bot-staging/java-pubsub/$1/proto-google-cloud-pubsub-$1/src +- source: /google/pubsub/(v.*)/.*-java/grpc-google-.*/src + dest: /owl-bot-staging/java-pubsub/$1/grpc-google-cloud-pubsub-$1/src +- source: /google/pubsub/(v.*)/.*-java/gapic-google-.*/src + dest: /owl-bot-staging/java-pubsub/$1/google-cloud-pubsub/src diff --git a/java-pubsub/.cloudbuild/samples_build.yaml b/java-pubsub/.cloudbuild/samples_build.yaml new file mode 100644 index 000000000000..2d4a498e397f --- /dev/null +++ b/java-pubsub/.cloudbuild/samples_build.yaml @@ -0,0 +1,31 @@ +steps: +- name: gcr.io/cloud-devrel-public-resources/java8 + entrypoint: ls + args: [ + '-alt', + ] +- name: gcr.io/cloud-devrel-public-resources/java8 + entrypoint: curl + args: [ + '--header', + 'Metadata-Flavor: Google', + 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/email' + ] +- name: gcr.io/cloud-devrel-public-resources/java8 + entrypoint: pwd +- name: gcr.io/cloud-devrel-public-resources/java8 + entrypoint: bash + args: [ + '.kokoro/build.sh' + ] + env: + - 'JOB_TYPE=samples' + - 'GOOGLE_CLOUD_PROJECT=cloud-java-ci-sample' +- name: gcr.io/cloud-devrel-public-resources/java8 + entrypoint: echo + args: [ + 'Sample job succeeded', + ] +timeout: 3600s +options: + defaultLogsBucketBehavior: REGIONAL_USER_OWNED_BUCKET diff --git a/java-pubsub/.readme-partials.yaml b/java-pubsub/.readme-partials.yaml new file mode 100644 index 000000000000..640d3b70b7a6 --- /dev/null +++ b/java-pubsub/.readme-partials.yaml @@ -0,0 +1,132 @@ +custom_content: | + #### Creating a topic + + With Pub/Sub you can create topics. A topic is a named resource to which messages are sent by + publishers. Add the following imports at the top of your file: + + ```java + import com.google.cloud.pubsub.v1.TopicAdminClient; + import com.google.pubsub.v1.TopicName; + ``` + Then, to create the topic, use the following code: + + ```java + TopicName topic = TopicName.of("test-project", "test-topic"); + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + topicAdminClient.createTopic(topic); + } + ``` + + #### Publishing messages + + With Pub/Sub you can publish messages to a topic. Add the following import at the top of your file: + + ```java + import com.google.api.core.ApiFuture; + import com.google.api.core.ApiFutureCallback; + import com.google.api.core.ApiFutures; + import com.google.cloud.pubsub.v1.Publisher; + import com.google.common.util.concurrent.MoreExecutors; + import com.google.protobuf.ByteString; + import com.google.pubsub.v1.PubsubMessage; + ``` + Then, to publish messages asynchronously, use the following code: + + ```java + Publisher publisher = null; + try { + publisher = Publisher.newBuilder(topic).build(); + ByteString data = ByteString.copyFromUtf8("my-message"); + PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build(); + ApiFuture messageIdFuture = publisher.publish(pubsubMessage); + ApiFutures.addCallback(messageIdFuture, new ApiFutureCallback() { + public void onSuccess(String messageId) { + System.out.println("published with message id: " + messageId); + } + + public void onFailure(Throwable t) { + System.out.println("failed to publish: " + t); + } + }, MoreExecutors.directExecutor()); + //... + } finally { + if (publisher != null) { + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } + ``` + + #### Creating a subscription + + With Pub/Sub you can create subscriptions. A subscription represents the stream of messages from a + single, specific topic. Add the following imports at the top of your file: + + ```java + import com.google.cloud.pubsub.v1.SubscriptionAdminClient; + import com.google.pubsub.v1.PushConfig; + import com.google.pubsub.v1.SubscriptionName; + import com.google.pubsub.v1.TopicName; + ``` + Then, to create the subscription, use the following code: + + ```java + TopicName topic = TopicName.of("test-project", "test-topic"); + SubscriptionName subscription = SubscriptionName.of("test-project", "test-subscription"); + + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + subscriptionAdminClient.createSubscription(subscription, topic, PushConfig.getDefaultInstance(), 0); + } + ``` + + #### Pulling messages + + With Pub/Sub you can pull messages from a subscription. Add the following imports at the top of your + file: + + ```java + import com.google.cloud.pubsub.v1.AckReplyConsumer; + import com.google.cloud.pubsub.v1.MessageReceiver; + import com.google.cloud.pubsub.v1.Subscriber; + import com.google.common.util.concurrent.MoreExecutors; + import com.google.pubsub.v1.PubsubMessage; + import com.google.pubsub.v1.SubscriptionName; + import com.google.pubsub.v1.TopicName; + ``` + Then, to pull messages asynchronously, use the following code: + + ```java + SubscriptionName subscription = SubscriptionName.of("test-project", "test-subscription"); + + MessageReceiver receiver = + new MessageReceiver() { + @Override + public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) { + System.out.println("got message: " + message.getData().toStringUtf8()); + consumer.ack(); + } + }; + + Subscriber subscriber = null; + try { + subscriber = Subscriber.newBuilder(subscription.toString(), receiver).build(); + subscriber.addListener( + new Subscriber.Listener() { + @Override + public void failed(Subscriber.State from, Throwable failure) { + // Handle failure. This is called when the Subscriber encountered a fatal error and is shutting down. + System.err.println(failure); + } + }, + MoreExecutors.directExecutor()); + subscriber.startAsync().awaitRunning(); + //... + } finally { + if (subscriber != null) { + subscriber.stopAsync(); + } + } + ``` + #### Complete source code + + In [CreateTopicAndPublishMessages.java](https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-examples/src/main/java/com/google/cloud/examples/pubsub/snippets/CreateTopicAndPublishMessages.java) and [CreateSubscriptionAndConsumeMessages.java](https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-examples/src/main/java/com/google/cloud/examples/pubsub/snippets/CreateSubscriptionAndConsumeMessages.java) we put together all the code shown above into two programs. The programs assume that you are running on Compute Engine, App Engine Flexible or from your own desktop. diff --git a/java-pubsub/.repo-metadata.json b/java-pubsub/.repo-metadata.json new file mode 100644 index 000000000000..08e23ec2102c --- /dev/null +++ b/java-pubsub/.repo-metadata.json @@ -0,0 +1,20 @@ +{ + "api_shortname": "pubsub", + "name_pretty": "Cloud Pub/Sub", + "product_documentation": "https://cloud.google.com/pubsub/docs/", + "api_description": "is designed to provide reliable, many-to-many, asynchronous messaging between applications. Publisher applications can send messages to a topic and other applications can subscribe to that topic to receive the messages. By decoupling senders and receivers, Google Cloud Pub/Sub allows developers to communicate between independently written applications.", + "client_documentation": "https://cloud.google.com/java/docs/reference/google-cloud-pubsub/latest/history", + "release_level": "stable", + "transport": "both", + "language": "java", + "repo": "googleapis/google-cloud-java", + "repo_short": "java-pubsub", + "distribution_name": "com.google.cloud:google-cloud-pubsub", + "api_id": "pubsub.googleapis.com", + "library_type": "GAPIC_COMBO", + "requires_billing": true, + "api_reference": "https://cloud.google.com/pubsub/", + "codeowner_team": "@googleapis/pubsub-team", + "issue_tracker": "https://issuetracker.google.com/savedsearches/559741", + "recommended_package": "com.google.cloud.pubsub.v1" +} \ No newline at end of file diff --git a/java-pubsub/CHANGELOG.md b/java-pubsub/CHANGELOG.md new file mode 100644 index 000000000000..7d86617e68ea --- /dev/null +++ b/java-pubsub/CHANGELOG.md @@ -0,0 +1,2540 @@ +# Changelog + +## [1.149.0](https://github.com/googleapis/java-pubsub/compare/v1.148.0...v1.149.0) (2026-02-26) + + +### Features + +* Add client library debug logging ([c4e10b9](https://github.com/googleapis/java-pubsub/commit/c4e10b95880d0db61b62e89c58d269c755d9e11e)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.67.0 ([c85f4ea](https://github.com/googleapis/java-pubsub/commit/c85f4eaaf2b28e7c0c544d5a4a92a197112e7723)) +* Do not use directExecutor() for the publish callback when ordering is enabled ([#2693](https://github.com/googleapis/java-pubsub/issues/2693)) ([c7ecd2b](https://github.com/googleapis/java-pubsub/commit/c7ecd2b5aac2719ca55a93d6bd5b9afc9aeb5a9c)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.59.0 ([#2690](https://github.com/googleapis/java-pubsub/issues/2690)) ([bed9464](https://github.com/googleapis/java-pubsub/commit/bed94648ceede888a244d21082b7e403fbae0aaa)) +* Update dependency com.google.cloud:google-cloud-core to v2.65.0 ([#2681](https://github.com/googleapis/java-pubsub/issues/2681)) ([e291b0d](https://github.com/googleapis/java-pubsub/commit/e291b0d98d576f0beceb49af002fc501ad31683f)) +* Update dependency com.google.cloud:google-cloud-storage to v2.63.0 ([#2676](https://github.com/googleapis/java-pubsub/issues/2676)) ([2a1ebea](https://github.com/googleapis/java-pubsub/commit/2a1ebea9d101cc650e1276e30063f87193eb1f6e)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.57.0 ([#2696](https://github.com/googleapis/java-pubsub/issues/2696)) ([dd02393](https://github.com/googleapis/java-pubsub/commit/dd02393c586de6cfe7d91d9579a490533876c7f1)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.33.5 ([#2678](https://github.com/googleapis/java-pubsub/issues/2678)) ([70b781c](https://github.com/googleapis/java-pubsub/commit/70b781c51dc82de76ff1417c1c0ab4b012cb7cc0)) +* Update googleapis/sdk-platform-java action to v2.67.0 ([#2683](https://github.com/googleapis/java-pubsub/issues/2683)) ([9d5fa5b](https://github.com/googleapis/java-pubsub/commit/9d5fa5b04c633879567b2025bc045ef2e6b48b59)) + +## [1.148.0](https://github.com/googleapis/java-pubsub/compare/v1.147.0...v1.148.0) (2026-02-11) + + +### Features + +* Next release from main branch is 1.148.0 ([#2686](https://github.com/googleapis/java-pubsub/issues/2686)) ([6b133e8](https://github.com/googleapis/java-pubsub/commit/6b133e8277bba25ab8f91d970d8d79e8bdaaa7e7)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.56.1 ([#2682](https://github.com/googleapis/java-pubsub/issues/2682)) ([1a94be9](https://github.com/googleapis/java-pubsub/commit/1a94be982e291c8cbf1ac2ec4aa6a84a4dabd17d)) + +## [1.147.0](https://github.com/googleapis/java-pubsub/compare/v1.146.0...v1.147.0) (2026-01-27) + + +### Features + +* Enable Subscriber StreamingPull keepalives by increasing the StreamingPull protocol version ([#2672](https://github.com/googleapis/java-pubsub/issues/2672)) ([18a592d](https://github.com/googleapis/java-pubsub/commit/18a592d81971ca99fa8fac0b355b02c4c3646bf2)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.58.0 ([#2639](https://github.com/googleapis/java-pubsub/issues/2639)) ([afe27d8](https://github.com/googleapis/java-pubsub/commit/afe27d881379ad2564961b439176c61d0e9ce663)) +* Update dependency com.google.cloud:google-cloud-core to v2.64.0 ([#2641](https://github.com/googleapis/java-pubsub/issues/2641)) ([93368a3](https://github.com/googleapis/java-pubsub/commit/93368a3e9aec90e42a944d76e79559f3f35ac792)) +* Update dependency com.google.cloud:google-cloud-storage to v2.62.0 ([#2643](https://github.com/googleapis/java-pubsub/issues/2643)) ([6a4f059](https://github.com/googleapis/java-pubsub/commit/6a4f0595610e06ba1fa58fe916c7f5a1f09245ca)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.33.4 ([#2656](https://github.com/googleapis/java-pubsub/issues/2656)) ([0973b81](https://github.com/googleapis/java-pubsub/commit/0973b81b82493e7a7df1764e4f29435abe545d50)) +* Update dependency org.assertj:assertj-core to v3.27.7 [security] ([#2670](https://github.com/googleapis/java-pubsub/issues/2670)) ([32d75fd](https://github.com/googleapis/java-pubsub/commit/32d75fd9096bb56286c98636d5a8fa6a23508f60)) + +## [1.146.0](https://github.com/googleapis/java-pubsub/compare/v1.145.0...v1.146.0) (2026-01-26) + + +### Features + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.66.0 ([a7edd5b](https://github.com/googleapis/java-pubsub/commit/a7edd5b705557bcf72ca47dc8219677ba8595f8c)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.56.0 ([#2664](https://github.com/googleapis/java-pubsub/issues/2664)) ([6d44cf3](https://github.com/googleapis/java-pubsub/commit/6d44cf3b94e6fe8603e3d8bb9357643f0315fa4e)) +* Update googleapis/sdk-platform-java action to v2.66.0 ([#2665](https://github.com/googleapis/java-pubsub/issues/2665)) ([1f95f3a](https://github.com/googleapis/java-pubsub/commit/1f95f3ac56ef371b7eee05aa2d294e0e4ca6ad84)) + +## [1.145.0](https://github.com/googleapis/java-pubsub/compare/v1.144.1...v1.145.0) (2026-01-15) + + +### Features + +* Add AIInference MessageTransform type ([fe73614](https://github.com/googleapis/java-pubsub/commit/fe73614cdb6c2aca445c46e917c325cbfee3adfd)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.65.1 ([fe73614](https://github.com/googleapis/java-pubsub/commit/fe73614cdb6c2aca445c46e917c325cbfee3adfd)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.55.1 ([#2658](https://github.com/googleapis/java-pubsub/issues/2658)) ([1a11309](https://github.com/googleapis/java-pubsub/commit/1a1130914420b45d628553218a3fa4d477216143)) +* Update googleapis/sdk-platform-java action to v2.65.1 ([#2657](https://github.com/googleapis/java-pubsub/issues/2657)) ([72dd566](https://github.com/googleapis/java-pubsub/commit/72dd5668ab2e71a24bed66c55173ab9ff5093ced)) + + +### Documentation + +* Add tags documentation links to Pub/Sub resource tags fields ([fe73614](https://github.com/googleapis/java-pubsub/commit/fe73614cdb6c2aca445c46e917c325cbfee3adfd)) + +## [1.144.1](https://github.com/googleapis/java-pubsub/compare/v1.144.0...v1.144.1) (2025-12-22) + + +### Bug Fixes + +* Lower the Subscriber protocol version to disable the streaming pull keepalive feature ([#2652](https://github.com/googleapis/java-pubsub/issues/2652)) ([ca99c2a](https://github.com/googleapis/java-pubsub/commit/ca99c2a2cea8201ea6f71e7383bd6123ec32ebdc)) + +## [1.144.0](https://github.com/googleapis/java-pubsub/compare/v1.143.1...v1.144.0) (2025-12-11) + + +### Features + +* Add keepalive feature to tear down streams in their absence ([#2605](https://github.com/googleapis/java-pubsub/issues/2605)) ([99aca4f](https://github.com/googleapis/java-pubsub/commit/99aca4f3fd1792b02da78320bed39e53dc8af23c)) +* Make v1 the default protocolVersion ([#2623](https://github.com/googleapis/java-pubsub/issues/2623)) ([12f014d](https://github.com/googleapis/java-pubsub/commit/12f014d9030b2472e508fa75a71f43e671a64583)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.64.2 ([b4b7f83](https://github.com/googleapis/java-pubsub/commit/b4b7f839b2be1ce003667018a10d9c460e4b63b1)) + + +### Dependencies + +* Update actions/checkout action to v5 ([#2613](https://github.com/googleapis/java-pubsub/issues/2613)) ([a69ffdd](https://github.com/googleapis/java-pubsub/commit/a69ffdd9ecb5dae557a847ae7ec5c1a06431bef7)) +* Update actions/checkout action to v6 ([#2619](https://github.com/googleapis/java-pubsub/issues/2619)) ([6cd2bb6](https://github.com/googleapis/java-pubsub/commit/6cd2bb6e9c927dd192833efc7c3549dfa9c84f57)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.56.0 ([#2617](https://github.com/googleapis/java-pubsub/issues/2617)) ([13d5e3d](https://github.com/googleapis/java-pubsub/commit/13d5e3d8e4069a0e94db3cf825eb821d06cc9345)) +* Update dependency com.google.cloud:google-cloud-core to v2.62.1 ([#2608](https://github.com/googleapis/java-pubsub/issues/2608)) ([fee0500](https://github.com/googleapis/java-pubsub/commit/fee0500bf6a0e309ca5f162810e22a2ca4c5b7eb)) +* Update dependency com.google.cloud:google-cloud-core to v2.62.2 ([#2632](https://github.com/googleapis/java-pubsub/issues/2632)) ([2d567d1](https://github.com/googleapis/java-pubsub/commit/2d567d16f7f546586156e2e2ee17c433fbec5fc2)) +* Update dependency com.google.cloud:google-cloud-storage to v2.60.0 ([#2610](https://github.com/googleapis/java-pubsub/issues/2610)) ([1cae247](https://github.com/googleapis/java-pubsub/commit/1cae247322fff1b6588a4b523e601e41a4284c64)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.54.2 ([#2633](https://github.com/googleapis/java-pubsub/issues/2633)) ([5081aac](https://github.com/googleapis/java-pubsub/commit/5081aac1fc26fcaca004c730982d0e56ed36e32f)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.33.1 ([#2612](https://github.com/googleapis/java-pubsub/issues/2612)) ([e92debc](https://github.com/googleapis/java-pubsub/commit/e92debccf9e87971c2d9fee34baffb4b534f24a3)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.33.2 ([#2625](https://github.com/googleapis/java-pubsub/issues/2625)) ([900783f](https://github.com/googleapis/java-pubsub/commit/900783ff8b135b42088c37b48cdc1a7ee44d4e08)) + + +### Documentation + +* Add the IDENTIFIER field behavior annotation to fields of Cloud Pub/Sub methods that represent a specific identity and need to be sourced with additional care ([b4b7f83](https://github.com/googleapis/java-pubsub/commit/b4b7f839b2be1ce003667018a10d9c460e4b63b1)) + +## [1.143.1](https://github.com/googleapis/java-pubsub/compare/v1.143.0...v1.143.1) (2025-11-13) + + +### Bug Fixes + +* Deflake WaiterTest ([#2600](https://github.com/googleapis/java-pubsub/issues/2600)) ([298c8db](https://github.com/googleapis/java-pubsub/commit/298c8db04616341da040935636b1a04ce5f022a0)) +* **deps:** Update the Java code generator (gapic-generator-java) to 2.64.1 ([b210251](https://github.com/googleapis/java-pubsub/commit/b2102516bf833c2704c85cb348b67bb7cbfdb3a6)) + + +### Dependencies + +* Remove OpenTelemetry semconv dependency ([#2611](https://github.com/googleapis/java-pubsub/issues/2611)) ([240fc37](https://github.com/googleapis/java-pubsub/commit/240fc3784db3860eb2668946fbf861beed2647d7)) +* Update actions/checkout action to v5 ([#2592](https://github.com/googleapis/java-pubsub/issues/2592)) ([6ca466d](https://github.com/googleapis/java-pubsub/commit/6ca466d382ddde9780ae1c8627092d731e314f90)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.55.3 ([#2602](https://github.com/googleapis/java-pubsub/issues/2602)) ([d14106c](https://github.com/googleapis/java-pubsub/commit/d14106cc278c98d3f954f959e2dd3764ebd20fc2)) +* Update dependency com.google.cloud:google-cloud-core to v2.61.0 ([#2588](https://github.com/googleapis/java-pubsub/issues/2588)) ([244cf75](https://github.com/googleapis/java-pubsub/commit/244cf758bf46f8431a17b1d8e76d1d90c494fc76)) +* Update dependency com.google.cloud:google-cloud-storage to v2.59.0 ([#2603](https://github.com/googleapis/java-pubsub/issues/2603)) ([d9d05bf](https://github.com/googleapis/java-pubsub/commit/d9d05bfa18580cdacdfa9378d30b56ce0ae0d4d2)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.54.1 ([#2609](https://github.com/googleapis/java-pubsub/issues/2609)) ([c99373f](https://github.com/googleapis/java-pubsub/commit/c99373f2d25c6b9f1bcb6aace3c6625375310a16)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.33.0 ([#2587](https://github.com/googleapis/java-pubsub/issues/2587)) ([33724ce](https://github.com/googleapis/java-pubsub/commit/33724cef79e3f7e798c5ef222ee7dff3565555f8)) + +## [1.143.0](https://github.com/googleapis/java-pubsub/compare/v1.142.0...v1.143.0) (2025-10-20) + + +### Features + +* Annotate some resource fields with their corresponding API types ([ab60afa](https://github.com/googleapis/java-pubsub/commit/ab60afa012bd3fc81977ba24c416205ce9280943)) +* Implement SubscriberShutdownSettings ([#2569](https://github.com/googleapis/java-pubsub/issues/2569)) ([8195f6f](https://github.com/googleapis/java-pubsub/commit/8195f6fd3bbd33a178535994a94a79822ae2d4d6)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.63.0 ([ab60afa](https://github.com/googleapis/java-pubsub/commit/ab60afa012bd3fc81977ba24c416205ce9280943)) +* Update .OwlBot-hermetic.yaml to preserve SubscriberShutdownSettings files ([#2583](https://github.com/googleapis/java-pubsub/issues/2583)) ([f3cf5e7](https://github.com/googleapis/java-pubsub/commit/f3cf5e725c12173ade0275fd0526885309dc553a)) + + +### Dependencies + +* Update actions/checkout action to v5 ([#2576](https://github.com/googleapis/java-pubsub/issues/2576)) ([1375f6d](https://github.com/googleapis/java-pubsub/commit/1375f6d9a71c78d973a71f1df449640a95bc0bc7)) +* Update actions/checkout action to v5 ([#2584](https://github.com/googleapis/java-pubsub/issues/2584)) ([25059ce](https://github.com/googleapis/java-pubsub/commit/25059ce001e3273fcec9d1c40e3b09c89ddf487e)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.55.2 ([#2582](https://github.com/googleapis/java-pubsub/issues/2582)) ([d0f9673](https://github.com/googleapis/java-pubsub/commit/d0f96737a74453c3db54ee59e98d4b6636cd55d4)) +* Update dependency com.google.cloud:google-cloud-storage to v2.58.1 ([#2580](https://github.com/googleapis/java-pubsub/issues/2580)) ([d156cdb](https://github.com/googleapis/java-pubsub/commit/d156cdb27a8d68b6fa8c97f558df7088e6634320)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.53.0 ([#2589](https://github.com/googleapis/java-pubsub/issues/2589)) ([ce7cb09](https://github.com/googleapis/java-pubsub/commit/ce7cb09ac5e86953815e2ead9ae9202e9b034ba6)) + +## [1.142.0](https://github.com/googleapis/java-pubsub/compare/v1.141.5...v1.142.0) (2025-10-07) + + +### Features + +* Support the protocol version in StreamingPullRequest ([af40810](https://github.com/googleapis/java-pubsub/commit/af40810ea0668ce4e8c4d69bdbb4b281073976d0)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.62.3 ([af40810](https://github.com/googleapis/java-pubsub/commit/af40810ea0668ce4e8c4d69bdbb4b281073976d0)) + + +### Dependencies + +* Update actions/checkout action to v5 ([#2562](https://github.com/googleapis/java-pubsub/issues/2562)) ([b7fa499](https://github.com/googleapis/java-pubsub/commit/b7fa49968e85dfeba8a84ea29f8ddf9d33ef22c5)) +* Update actions/checkout action to v5 ([#2573](https://github.com/googleapis/java-pubsub/issues/2573)) ([4153dba](https://github.com/googleapis/java-pubsub/commit/4153dbacb386b130780c8d1e5596e3502af8e32b)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.55.1 ([#2566](https://github.com/googleapis/java-pubsub/issues/2566)) ([66c9ec4](https://github.com/googleapis/java-pubsub/commit/66c9ec4a26b76ca384dce71a8ab6bce8cd34b8a3)) +* Update dependency com.google.cloud:google-cloud-core to v2.60.2 ([#2557](https://github.com/googleapis/java-pubsub/issues/2557)) ([460bcd9](https://github.com/googleapis/java-pubsub/commit/460bcd9158e7058f710f43200b7b7737eb47839c)) +* Update dependency com.google.cloud:google-cloud-core to v2.60.3 ([#2571](https://github.com/googleapis/java-pubsub/issues/2571)) ([ac2c85a](https://github.com/googleapis/java-pubsub/commit/ac2c85ad62525aee236af54f6b5c9b1eacf4d22a)) +* Update dependency com.google.cloud:google-cloud-storage to v2.58.0 ([#2561](https://github.com/googleapis/java-pubsub/issues/2561)) ([0189388](https://github.com/googleapis/java-pubsub/commit/0189388edb4d618d65f33718922ca1b11f71cb15)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.3 ([#2572](https://github.com/googleapis/java-pubsub/issues/2572)) ([0785ee4](https://github.com/googleapis/java-pubsub/commit/0785ee490e858c104c420046e0098d81154ae273)) +* Update dependency org.assertj:assertj-core to v3.27.6 ([#2560](https://github.com/googleapis/java-pubsub/issues/2560)) ([c82766a](https://github.com/googleapis/java-pubsub/commit/c82766a9efb2bb4df01fb7fdcb35259db39e05c7)) + +## [1.141.5](https://github.com/googleapis/java-pubsub/compare/v1.141.4...v1.141.5) (2025-09-24) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.62.2 ([c02d304](https://github.com/googleapis/java-pubsub/commit/c02d304f5213410eda5f26fe98c96a5c1d4bf9d8)) + + +### Dependencies + +* Update actions/checkout action to v5 ([#2539](https://github.com/googleapis/java-pubsub/issues/2539)) ([83144e6](https://github.com/googleapis/java-pubsub/commit/83144e6d4110fbe15f4357270a292cfcbcc35dd6)) +* Update actions/github-script action to v8 ([#2542](https://github.com/googleapis/java-pubsub/issues/2542)) ([0e6f0da](https://github.com/googleapis/java-pubsub/commit/0e6f0daccfdca248b3b80ef7dfb0bd7a4baa607c)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.55.0 ([#2553](https://github.com/googleapis/java-pubsub/issues/2553)) ([15b9e66](https://github.com/googleapis/java-pubsub/commit/15b9e66f27cd6e57b808b96f3e15f08b1f0d7727)) +* Update dependency com.google.cloud:google-cloud-core to v2.60.1 ([#2543](https://github.com/googleapis/java-pubsub/issues/2543)) ([fbb45ce](https://github.com/googleapis/java-pubsub/commit/fbb45cee9e3740f8ac94b5fbaa65b97b8db09b1e)) +* Update dependency com.google.cloud:google-cloud-storage to v2.57.0 ([#2547](https://github.com/googleapis/java-pubsub/issues/2547)) ([133f8c7](https://github.com/googleapis/java-pubsub/commit/133f8c7995880c2d1e75b69d61c50254d4f9fede)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.2 ([#2558](https://github.com/googleapis/java-pubsub/issues/2558)) ([0623ac5](https://github.com/googleapis/java-pubsub/commit/0623ac54f735b076ccee165fc59a4a088309766a)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.32.1 ([#2551](https://github.com/googleapis/java-pubsub/issues/2551)) ([49722cb](https://github.com/googleapis/java-pubsub/commit/49722cb65e3b7cad01cf4389e1cf716a6ac1eb03)) +* Update googleapis/sdk-platform-java action to v2.62.2 ([#2559](https://github.com/googleapis/java-pubsub/issues/2559)) ([3f1d901](https://github.com/googleapis/java-pubsub/commit/3f1d90186899efe035179363408979a372e85a56)) + +## [1.141.4](https://github.com/googleapis/java-pubsub/compare/v1.141.3...v1.141.4) (2025-09-11) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.62.1 ([ac08d5f](https://github.com/googleapis/java-pubsub/commit/ac08d5f6ead8071ab0e068e32fd5ae0ae2731c34)) + + +### Dependencies + +* Update actions/checkout action to v5 ([#2531](https://github.com/googleapis/java-pubsub/issues/2531)) ([f687f11](https://github.com/googleapis/java-pubsub/commit/f687f117fc435ee8b1f15b8802ecc989f1e2747e)) +* Update actions/setup-java action to v5 ([#2535](https://github.com/googleapis/java-pubsub/issues/2535)) ([2ed87d2](https://github.com/googleapis/java-pubsub/commit/2ed87d2b7e28af99cfda00b4b69fb5cb2f448584)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.54.2 ([#2538](https://github.com/googleapis/java-pubsub/issues/2538)) ([10a8283](https://github.com/googleapis/java-pubsub/commit/10a8283292e58b0c73b9c57ff36ddd71b8b83467)) +* Update dependency com.google.cloud:google-cloud-storage to v2.56.0 ([#2536](https://github.com/googleapis/java-pubsub/issues/2536)) ([80d9ca1](https://github.com/googleapis/java-pubsub/commit/80d9ca10d3a2656852422858f032bb6629102cfb)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.1 ([#2544](https://github.com/googleapis/java-pubsub/issues/2544)) ([9fe7550](https://github.com/googleapis/java-pubsub/commit/9fe75506eedf42f31b95ddf2699cf332334caf0d)) +* Update googleapis/sdk-platform-java action to v2.62.1 ([#2545](https://github.com/googleapis/java-pubsub/issues/2545)) ([17f28ef](https://github.com/googleapis/java-pubsub/commit/17f28ef853a21303346a305e4d8e9b63a916edc7)) + +## [1.141.3](https://github.com/googleapis/java-pubsub/compare/v1.141.2...v1.141.3) (2025-08-19) + + +### Bug Fixes + +* Use the system executor instead of a separate thread pool for EOD ack/modack callbacks ([#2526](https://github.com/googleapis/java-pubsub/issues/2526)) ([ffeb017](https://github.com/googleapis/java-pubsub/commit/ffeb017a58ca486688105738f180d70df33a74de)) + + +### Dependencies + +* Update actions/checkout action to v5 ([#2520](https://github.com/googleapis/java-pubsub/issues/2520)) ([409398a](https://github.com/googleapis/java-pubsub/commit/409398a40f71866d5a84b4542d582777ee240a08)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.54.1 ([#2523](https://github.com/googleapis/java-pubsub/issues/2523)) ([0678a74](https://github.com/googleapis/java-pubsub/commit/0678a74dc22f73cd8ec8c4893c1a8dd60449b128)) +* Update dependency com.google.cloud:google-cloud-core to v2.60.0 ([#2527](https://github.com/googleapis/java-pubsub/issues/2527)) ([0166e21](https://github.com/googleapis/java-pubsub/commit/0166e21012f0bc2ccb2e832d6f27e60ad3382456)) +* Update dependency com.google.cloud:google-cloud-storage to v2.55.0 ([#2517](https://github.com/googleapis/java-pubsub/issues/2517)) ([b67acf1](https://github.com/googleapis/java-pubsub/commit/b67acf1294249be308568f49f287897ae55ced08)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.0 ([#2528](https://github.com/googleapis/java-pubsub/issues/2528)) ([e424d11](https://github.com/googleapis/java-pubsub/commit/e424d11ffe0fbe242c59dec44ac1af2f9bd80173)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.32.0 ([#2524](https://github.com/googleapis/java-pubsub/issues/2524)) ([44ff087](https://github.com/googleapis/java-pubsub/commit/44ff0873171f8fe2e7cd79b4550f8ec94ea2c99a)) +* Update dependency org.assertj:assertj-core to v3.27.4 ([#2518](https://github.com/googleapis/java-pubsub/issues/2518)) ([67695bc](https://github.com/googleapis/java-pubsub/commit/67695bc50eafc475866eb6c300b3359083ecfe00)) + +## [1.141.2](https://github.com/googleapis/java-pubsub/compare/v1.141.1...v1.141.2) (2025-08-05) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.61.0 ([42eb599](https://github.com/googleapis/java-pubsub/commit/42eb5992557457a5ae4512334267113266c220ac)) +* Use a separate cached thread pool for handling ack and modack response callback for EOD-enabled subscriptions ([#2505](https://github.com/googleapis/java-pubsub/issues/2505)) ([224c269](https://github.com/googleapis/java-pubsub/commit/224c269e3bd0ae4cfc4b24ac85495911b8e2b90c)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.54.0 ([#2506](https://github.com/googleapis/java-pubsub/issues/2506)) ([6bf8e62](https://github.com/googleapis/java-pubsub/commit/6bf8e62b1144568292e832dc8031a70a2c5b9ad7)) +* Update dependency com.google.cloud:google-cloud-core to v2.59.0 ([#2507](https://github.com/googleapis/java-pubsub/issues/2507)) ([070cf07](https://github.com/googleapis/java-pubsub/commit/070cf07b1d529c34d4f633b37ce1d35d14768325)) +* Update dependency com.google.cloud:google-cloud-storage to v2.54.0 ([#2510](https://github.com/googleapis/java-pubsub/issues/2510)) ([0fd589e](https://github.com/googleapis/java-pubsub/commit/0fd589e2ee80730b442f569b770fe16208feb4ba)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.51.0 ([#2508](https://github.com/googleapis/java-pubsub/issues/2508)) ([a7be2a7](https://github.com/googleapis/java-pubsub/commit/a7be2a74327499b1acb2fe159e6f7465d6c8f798)) +* Update googleapis/sdk-platform-java action to v2.61.0 ([#2509](https://github.com/googleapis/java-pubsub/issues/2509)) ([32df6b6](https://github.com/googleapis/java-pubsub/commit/32df6b694f9aee2cf7132c2d817f9736d69060f3)) + +## [1.141.1](https://github.com/googleapis/java-pubsub/compare/v1.141.0...v1.141.1) (2025-07-28) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.60.2 ([7afae21](https://github.com/googleapis/java-pubsub/commit/7afae21e5e3df16742646363ca199ec14c42bc21)) +* Remove element_count_limit and request_byte_limit from pubsub_gapic.yaml ([7afae21](https://github.com/googleapis/java-pubsub/commit/7afae21e5e3df16742646363ca199ec14c42bc21)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.53.0 ([#2489](https://github.com/googleapis/java-pubsub/issues/2489)) ([5a454b9](https://github.com/googleapis/java-pubsub/commit/5a454b9c36419dcfaf79edb1ec1d066b20836f87)) +* Update dependency com.google.cloud:google-cloud-core to v2.58.2 ([#2493](https://github.com/googleapis/java-pubsub/issues/2493)) ([9a1c17e](https://github.com/googleapis/java-pubsub/commit/9a1c17e50e5fc9a807532d289a7f6e8b5d412f59)) +* Update dependency com.google.cloud:google-cloud-storage to v2.53.3 ([#2486](https://github.com/googleapis/java-pubsub/issues/2486)) ([9416cc9](https://github.com/googleapis/java-pubsub/commit/9416cc99f826b80412b0e5eba0068a35b82390c6)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.50.2 ([#2494](https://github.com/googleapis/java-pubsub/issues/2494)) ([9f73ef0](https://github.com/googleapis/java-pubsub/commit/9f73ef0dcaabb4a536741336eb6cfc6601b75f65)) +* Update dependency org.xerial.snappy:snappy-java to v1.1.10.8 ([#2492](https://github.com/googleapis/java-pubsub/issues/2492)) ([a55e214](https://github.com/googleapis/java-pubsub/commit/a55e214ffad8371eb82a1d49b8b1eadcacf15392)) + +## [1.141.0](https://github.com/googleapis/java-pubsub/compare/v1.140.2...v1.141.0) (2025-07-11) + + +### Features + +* Add MessageTransformationFailureReason to IngestionFailureEvent ([8271399](https://github.com/googleapis/java-pubsub/commit/8271399cc6348f69ba034b676cce2aa7592122a4)) +* Next release from main branch is 1.141.0 ([#2481](https://github.com/googleapis/java-pubsub/issues/2481)) ([bd9f385](https://github.com/googleapis/java-pubsub/commit/bd9f3850efa77ce759b4f281aecd9645666cb0f7)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.60.1 ([c9ef2cd](https://github.com/googleapis/java-pubsub/commit/c9ef2cda2c6ad20d5e57fe3ccf69f845f7ef36b7)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.52.0 ([#2467](https://github.com/googleapis/java-pubsub/issues/2467)) ([fe08a6f](https://github.com/googleapis/java-pubsub/commit/fe08a6f1f6ee18e97c752f82786016999f6ab12c)) +* Update dependency com.google.cloud:google-cloud-core to v2.58.1 ([#2476](https://github.com/googleapis/java-pubsub/issues/2476)) ([96a2354](https://github.com/googleapis/java-pubsub/commit/96a23544fce609c7b19a00638a767926c304d3f8)) +* Update dependency com.google.cloud:google-cloud-storage to v2.53.2 ([#2469](https://github.com/googleapis/java-pubsub/issues/2469)) ([fa51a01](https://github.com/googleapis/java-pubsub/commit/fa51a01ed39393b7cad25fb39a1c87099def830a)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.50.1 ([#2477](https://github.com/googleapis/java-pubsub/issues/2477)) ([e1657cb](https://github.com/googleapis/java-pubsub/commit/e1657cbeae5f2c3c9680ef6b5ff2b1ea5549f4ba)) +* Update googleapis/sdk-platform-java action to v2.60.0 ([#2471](https://github.com/googleapis/java-pubsub/issues/2471)) ([2b0e8e0](https://github.com/googleapis/java-pubsub/commit/2b0e8e0b58432f0975c15d0d01f185dc81de6caf)) +* Update googleapis/sdk-platform-java action to v2.60.1 ([#2475](https://github.com/googleapis/java-pubsub/issues/2475)) ([e7c0b5d](https://github.com/googleapis/java-pubsub/commit/e7c0b5d44f0ad53adfac6ec26572baad54d04dee)) + +## [1.140.2](https://github.com/googleapis/java-pubsub/compare/v1.140.1...v1.140.2) (2025-06-25) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.51.0 ([#2457](https://github.com/googleapis/java-pubsub/issues/2457)) ([d74215a](https://github.com/googleapis/java-pubsub/commit/d74215a6f1e641ba75997e2e43bef348fb9c4a3c)) +* Update dependency com.google.cloud:google-cloud-core to v2.58.0 ([#2443](https://github.com/googleapis/java-pubsub/issues/2443)) ([d4599d9](https://github.com/googleapis/java-pubsub/commit/d4599d93b780b6ef20ad44582aeb8c1cd35f99d4)) +* Update dependency com.google.cloud:google-cloud-storage to v2.53.1 ([#2452](https://github.com/googleapis/java-pubsub/issues/2452)) ([b4af237](https://github.com/googleapis/java-pubsub/commit/b4af2370bb875ee8d0047f67a72e8c6d62547a12)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.50.0 ([#2461](https://github.com/googleapis/java-pubsub/issues/2461)) ([715916a](https://github.com/googleapis/java-pubsub/commit/715916aeedbe696b9c4b922e4fb2bbf76f8b201a)) +* Update dependency com.google.cloud.opentelemetry:exporter-trace to v0.36.0 ([#2440](https://github.com/googleapis/java-pubsub/issues/2440)) ([50a3eb9](https://github.com/googleapis/java-pubsub/commit/50a3eb9276b4711b8161a021d055238abc0e20de)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.31.1 ([#2442](https://github.com/googleapis/java-pubsub/issues/2442)) ([a0be1bb](https://github.com/googleapis/java-pubsub/commit/a0be1bbe601575f05fb00f6d616b51de8f23238d)) +* Update dependency org.easymock:easymock to v5.6.0 ([#2069](https://github.com/googleapis/java-pubsub/issues/2069)) ([5f144a4](https://github.com/googleapis/java-pubsub/commit/5f144a461c6749ec7e2cf900399f386094451244)) +* Update googleapis/sdk-platform-java action to v2.60.0 ([#2462](https://github.com/googleapis/java-pubsub/issues/2462)) ([ee8e5c7](https://github.com/googleapis/java-pubsub/commit/ee8e5c7166f2ac4eb706241e42f4ce84afcc2668)) +* Update googleapis/sdk-platform-java action to v2.60.0 ([#2464](https://github.com/googleapis/java-pubsub/issues/2464)) ([7a0af37](https://github.com/googleapis/java-pubsub/commit/7a0af37c01e747d8f40145b7b4438eaadab9e01a)) + +## [1.140.1](https://github.com/googleapis/java-pubsub/compare/v1.140.0...v1.140.1) (2025-06-05) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.59.0 ([0eece50](https://github.com/googleapis/java-pubsub/commit/0eece5012fbaf887a5c062beba433dbb30edbf43)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.49.0 ([#2448](https://github.com/googleapis/java-pubsub/issues/2448)) ([d89a14d](https://github.com/googleapis/java-pubsub/commit/d89a14d6569fc914d877cc24d66c42684a812eba)) + +## [1.140.0](https://github.com/googleapis/java-pubsub/compare/v1.139.4...v1.140.0) (2025-06-03) + + +### Features + +* Add SchemaViolationReason to IngestionFailureEvent ([21cc376](https://github.com/googleapis/java-pubsub/commit/21cc3764aaa6fc05eb4a5078a72dae30694fba91)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.50.1 ([#2435](https://github.com/googleapis/java-pubsub/issues/2435)) ([b37c557](https://github.com/googleapis/java-pubsub/commit/b37c5573e1d0d7eada4ce4ec6a052521ea11cff1)) +* Update dependency com.google.cloud:google-cloud-storage to v2.52.3 ([#2436](https://github.com/googleapis/java-pubsub/issues/2436)) ([4f309d1](https://github.com/googleapis/java-pubsub/commit/4f309d151d4bd584a33a0bb8882d0614a1b9d533)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.49.0 ([#2444](https://github.com/googleapis/java-pubsub/issues/2444)) ([a59135c](https://github.com/googleapis/java-pubsub/commit/a59135c6859d0aa5c247a6a1f60872c959123cc7)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.49.0 ([#2446](https://github.com/googleapis/java-pubsub/issues/2446)) ([6434be1](https://github.com/googleapis/java-pubsub/commit/6434be16560fdc8797b7c930b06df38c0972c96c)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.31.0 ([#2430](https://github.com/googleapis/java-pubsub/issues/2430)) ([232fac1](https://github.com/googleapis/java-pubsub/commit/232fac1c47e0d3680dcc8d56b69d65ed0d379dde)) +* Update googleapis/sdk-platform-java action to v2.59.0 ([#2445](https://github.com/googleapis/java-pubsub/issues/2445)) ([12d4cfb](https://github.com/googleapis/java-pubsub/commit/12d4cfb7d67dbb163b3a545ea2ebae450e88283d)) + + +### Documentation + +* **sample:** Update the subscribe with error listener and subscribe with exactly-once samples ([#2437](https://github.com/googleapis/java-pubsub/issues/2437)) ([17c142b](https://github.com/googleapis/java-pubsub/commit/17c142b20efb79f9c71fc6306cb3ee4e15c5e06f)) + +## [1.139.4](https://github.com/googleapis/java-pubsub/compare/v1.139.3...v1.139.4) (2025-05-15) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.57.0 ([017eb0f](https://github.com/googleapis/java-pubsub/commit/017eb0f78423fde3edd42a07677df49512085633)) +* **deps:** Update the Java code generator (gapic-generator-java) to 2.58.0 ([3713edb](https://github.com/googleapis/java-pubsub/commit/3713edb9420f792b7c7ad4e430ca05b5942656ff)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.50.0 ([#2422](https://github.com/googleapis/java-pubsub/issues/2422)) ([993b2d0](https://github.com/googleapis/java-pubsub/commit/993b2d06ce6b45bb72faa9d6959cddc14a9cf60e)) +* Update dependency com.google.cloud:google-cloud-core to v2.55.0 ([#2413](https://github.com/googleapis/java-pubsub/issues/2413)) ([3e181e7](https://github.com/googleapis/java-pubsub/commit/3e181e7c4469eadcf6f148ee0a30aae1cfa825f3)) +* Update dependency com.google.cloud:google-cloud-core to v2.56.0 ([#2427](https://github.com/googleapis/java-pubsub/issues/2427)) ([b2a3e35](https://github.com/googleapis/java-pubsub/commit/b2a3e35ced2d1715c37207f98740889635326dc1)) +* Update dependency com.google.cloud:google-cloud-storage to v2.52.2 ([#2421](https://github.com/googleapis/java-pubsub/issues/2421)) ([1224ee5](https://github.com/googleapis/java-pubsub/commit/1224ee51da27e447560076b0d51ba90515566bd9)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.47.0 ([#2418](https://github.com/googleapis/java-pubsub/issues/2418)) ([5f87661](https://github.com/googleapis/java-pubsub/commit/5f876612eb4a54faec3af2c9043aec0adf51e2ec)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.48.0 ([#2428](https://github.com/googleapis/java-pubsub/issues/2428)) ([cfa91fa](https://github.com/googleapis/java-pubsub/commit/cfa91fa0e85f3f1e517627da3e5befcd46f0803a)) +* Update dependency com.google.cloud.opentelemetry:exporter-trace to v0.34.0 ([#2376](https://github.com/googleapis/java-pubsub/issues/2376)) ([06768cd](https://github.com/googleapis/java-pubsub/commit/06768cd1ac86ae7ae7b91b020cc174b4423e1b9a)) + + +### Documentation + +* **sample:** Add samples for topic and subscription SMTs ([#2388](https://github.com/googleapis/java-pubsub/issues/2388)) ([f35de28](https://github.com/googleapis/java-pubsub/commit/f35de28396fda595e6ea68c1755a4253d6b097d6)) + +## [1.139.3](https://github.com/googleapis/java-pubsub/compare/v1.139.2...v1.139.3) (2025-05-06) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.47.0 ([#2414](https://github.com/googleapis/java-pubsub/issues/2414)) ([d78823f](https://github.com/googleapis/java-pubsub/commit/d78823ffc93307c14f44e992cf13e926880fbe94)) +* Update googleapis/sdk-platform-java action to v2.57.0 ([#2415](https://github.com/googleapis/java-pubsub/issues/2415)) ([1ddf9b8](https://github.com/googleapis/java-pubsub/commit/1ddf9b81e432aeb9af9e6b8bb2d2e9786159faba)) + +## [1.139.2](https://github.com/googleapis/java-pubsub/compare/v1.139.1...v1.139.2) (2025-05-05) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.56.3 ([2b928a8](https://github.com/googleapis/java-pubsub/commit/2b928a8a946ebf84470bd2e2bb064b52c4f11ea2)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.49.2 ([#2399](https://github.com/googleapis/java-pubsub/issues/2399)) ([ff48708](https://github.com/googleapis/java-pubsub/commit/ff4870815864a6216a1ce4b606fcec3df7f58fd4)) +* Update dependency com.google.cloud:google-cloud-core to v2.54.3 ([#2393](https://github.com/googleapis/java-pubsub/issues/2393)) ([0ffa26a](https://github.com/googleapis/java-pubsub/commit/0ffa26ac3abceabcfba5d57cdb36f27f5a164ce3)) +* Update dependency com.google.cloud:google-cloud-storage to v2.52.1 ([#2396](https://github.com/googleapis/java-pubsub/issues/2396)) ([283a6e1](https://github.com/googleapis/java-pubsub/commit/283a6e14f61764c210ed23f4ada23ad21bbdb306)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.46.3 ([#2406](https://github.com/googleapis/java-pubsub/issues/2406)) ([8963ed0](https://github.com/googleapis/java-pubsub/commit/8963ed0acbe8bf3a110a05ced27979f102cd3035)) + +## [1.139.1](https://github.com/googleapis/java-pubsub/compare/v1.139.0...v1.139.1) (2025-04-25) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.46.2 ([#2394](https://github.com/googleapis/java-pubsub/issues/2394)) ([17f7fd7](https://github.com/googleapis/java-pubsub/commit/17f7fd77553a7ccd55029edb74829f1fe86a680c)) + +## [1.139.0](https://github.com/googleapis/java-pubsub/compare/v1.138.0...v1.139.0) (2025-04-25) + + +### Features + +* Generate renamed go pubsub admin clients ([4472d7b](https://github.com/googleapis/java-pubsub/commit/4472d7baff4894a7c5cf0efc7eadd83ec8801d7a)) + + +### Bug Fixes + +* Add retries for ack and modack operations that don't return with a metadata map ([#2385](https://github.com/googleapis/java-pubsub/issues/2385)) ([00070b7](https://github.com/googleapis/java-pubsub/commit/00070b74e54fcb62b91a4d72a88d3b20b2425a94)) +* **deps:** Update the Java code generator (gapic-generator-java) to 2.56.2 ([4472d7b](https://github.com/googleapis/java-pubsub/commit/4472d7baff4894a7c5cf0efc7eadd83ec8801d7a)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.49.0 ([#2380](https://github.com/googleapis/java-pubsub/issues/2380)) ([405e485](https://github.com/googleapis/java-pubsub/commit/405e485bbe503357a0616ec72de8fea00cb91c9c)) +* Update dependency com.google.cloud:google-cloud-core to v2.53.1 ([#2365](https://github.com/googleapis/java-pubsub/issues/2365)) ([748058f](https://github.com/googleapis/java-pubsub/commit/748058fc018e3a36dedd576404037bf8c016c794)) +* Update dependency com.google.cloud:google-cloud-storage to v2.50.0 ([#2372](https://github.com/googleapis/java-pubsub/issues/2372)) ([b81164a](https://github.com/googleapis/java-pubsub/commit/b81164aa5682c8046ebfa44e1e47579e4c3fcd28)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.30.1 ([#2364](https://github.com/googleapis/java-pubsub/issues/2364)) ([05eb9c0](https://github.com/googleapis/java-pubsub/commit/05eb9c0ce5179ff9e8656544258adc02a59336e5)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.30.2 ([#2383](https://github.com/googleapis/java-pubsub/issues/2383)) ([4119cc0](https://github.com/googleapis/java-pubsub/commit/4119cc03895873f94ddef10850753fb59384a8fc)) + + +### Documentation + +* Update documentation for JavaScriptUDF to indicate that the `message_id` metadata field is optional instead of required ([f904786](https://github.com/googleapis/java-pubsub/commit/f904786f87e80cdc09bba947cd53e42dffb7132e)) + +## [1.138.0](https://github.com/googleapis/java-pubsub/compare/v1.137.1...v1.138.0) (2025-03-14) + + +### Features + +* Deprecate `enabled` field for message transforms and add `disabled` field ([76b2a3d](https://github.com/googleapis/java-pubsub/commit/76b2a3dc1f001dfeb3f8974a4cc4de843b7383bc)) +* Next release from main branch is 1.138.0 ([#2361](https://github.com/googleapis/java-pubsub/issues/2361)) ([b6ba56c](https://github.com/googleapis/java-pubsub/commit/b6ba56c04619660d2660a660eaacbda7de9f8608)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.55.1 ([76b2a3d](https://github.com/googleapis/java-pubsub/commit/76b2a3dc1f001dfeb3f8974a4cc4de843b7383bc)) +* Prevent excessive string parsing when publishing and receiving messages to improve performance ([#2317](https://github.com/googleapis/java-pubsub/issues/2317)) ([07b1350](https://github.com/googleapis/java-pubsub/commit/07b135001b4726c9bafafe90c80d369f25f04956)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.48.1 ([#2356](https://github.com/googleapis/java-pubsub/issues/2356)) ([7d3d2e4](https://github.com/googleapis/java-pubsub/commit/7d3d2e4690539ebbe7ab521c2c345b06cba766ea)) +* Update dependency com.google.cloud:google-cloud-storage to v2.49.0 ([#2358](https://github.com/googleapis/java-pubsub/issues/2358)) ([81d3435](https://github.com/googleapis/java-pubsub/commit/81d34352d332ee9c4935e7908b6b9a2383d3a8ba)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.45.1 ([#2366](https://github.com/googleapis/java-pubsub/issues/2366)) ([15899d1](https://github.com/googleapis/java-pubsub/commit/15899d127131747c51c71c94d66ff581f70278f3)) +* Update googleapis/sdk-platform-java action to v2.55.1 ([#2367](https://github.com/googleapis/java-pubsub/issues/2367)) ([de6f84a](https://github.com/googleapis/java-pubsub/commit/de6f84a43a27e954c0dc635158c43c5db4d07dfa)) + +## [1.137.1](https://github.com/googleapis/java-pubsub/compare/v1.137.0...v1.137.1) (2025-02-26) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.54.0 ([ccf670f](https://github.com/googleapis/java-pubsub/commit/ccf670f9dc755770d40b9d1bf2c870c0452aa39e)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.48.0 ([#2343](https://github.com/googleapis/java-pubsub/issues/2343)) ([3bbd7e1](https://github.com/googleapis/java-pubsub/commit/3bbd7e1e812a7a00cfff36a0c1d8a5212d4e134a)) +* Update dependency com.google.cloud:google-cloud-core to v2.52.0 ([#2348](https://github.com/googleapis/java-pubsub/issues/2348)) ([f0977b4](https://github.com/googleapis/java-pubsub/commit/f0977b40479823ce5b7e90f864261f11115610ca)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.44.0 ([#2349](https://github.com/googleapis/java-pubsub/issues/2349)) ([90ed10b](https://github.com/googleapis/java-pubsub/commit/90ed10b474f7a59286365d8a6ad676d9a4f4113b)) +* Update googleapis/sdk-platform-java action to v2.54.0 ([#2347](https://github.com/googleapis/java-pubsub/issues/2347)) ([ac8db2d](https://github.com/googleapis/java-pubsub/commit/ac8db2dda6cd5f0bdf689052bb37cb2eaab08c46)) + +## [1.137.0](https://github.com/googleapis/java-pubsub/compare/v1.136.1...v1.137.0) (2025-02-12) + + +### Features + +* Add support for message transforms to Topic and Subscription ([3889a05](https://github.com/googleapis/java-pubsub/commit/3889a05a5c5d7479d3cc6b6dc0b0c425d41efd5d)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.53.0 ([b952e58](https://github.com/googleapis/java-pubsub/commit/b952e5826748bc680936a79b14d75f5873e6db06)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.47.0 ([#2331](https://github.com/googleapis/java-pubsub/issues/2331)) ([216feef](https://github.com/googleapis/java-pubsub/commit/216feef976595cd03e282f8d8effa2ac8430c419)) +* Update dependency com.google.cloud:google-cloud-core to v2.51.0 ([#2338](https://github.com/googleapis/java-pubsub/issues/2338)) ([ac2403e](https://github.com/googleapis/java-pubsub/commit/ac2403ecd21aad0d44c5b06fce2853f9a433adbd)) +* Update dependency com.google.cloud:google-cloud-storage to v2.48.1 ([#2332](https://github.com/googleapis/java-pubsub/issues/2332)) ([23fd7a8](https://github.com/googleapis/java-pubsub/commit/23fd7a8f4ab2438b72f3a6da5613f5deb0ac307e)) +* Update dependency com.google.cloud:google-cloud-storage to v2.48.2 ([#2341](https://github.com/googleapis/java-pubsub/issues/2341)) ([eeb99a9](https://github.com/googleapis/java-pubsub/commit/eeb99a997fa2e7154dcc228b964ff47867738122)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.43.0 ([#2336](https://github.com/googleapis/java-pubsub/issues/2336)) ([996f4eb](https://github.com/googleapis/java-pubsub/commit/996f4ebdfa6b5cb38dbe37d4be981ca7d941bc0d)) + + +### Documentation + +* A comment for field `code` in message `.google.pubsub.v1.JavaScriptUDF` is changed ([3889a05](https://github.com/googleapis/java-pubsub/commit/3889a05a5c5d7479d3cc6b6dc0b0c425d41efd5d)) + +## [1.136.1](https://github.com/googleapis/java-pubsub/compare/v1.136.0...v1.136.1) (2025-01-28) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.52.0 ([0d8c8bf](https://github.com/googleapis/java-pubsub/commit/0d8c8bffc85804d5a64ec0d35893ad9e0062807e)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.46.0 ([#2309](https://github.com/googleapis/java-pubsub/issues/2309)) ([97bd44e](https://github.com/googleapis/java-pubsub/commit/97bd44e04c440320e45c2b4336677d8d266a39a2)) +* Update dependency com.google.cloud:google-cloud-core to v2.49.1 ([#2300](https://github.com/googleapis/java-pubsub/issues/2300)) ([cf2822b](https://github.com/googleapis/java-pubsub/commit/cf2822b7363e13e4730753cbb5ca3510c77f5f55)) +* Update dependency com.google.cloud:google-cloud-core to v2.50.0 ([#2321](https://github.com/googleapis/java-pubsub/issues/2321)) ([5c40bcd](https://github.com/googleapis/java-pubsub/commit/5c40bcd4d401d919b990e6a7d3151660ead76eb0)) +* Update dependency com.google.cloud:google-cloud-storage to v2.47.0 ([#2303](https://github.com/googleapis/java-pubsub/issues/2303)) ([707f842](https://github.com/googleapis/java-pubsub/commit/707f84271559dfe96fa11edffb307df145ceea47)) +* Update dependency com.google.cloud:google-cloud-storage to v2.48.0 ([#2322](https://github.com/googleapis/java-pubsub/issues/2322)) ([93b9419](https://github.com/googleapis/java-pubsub/commit/93b9419d210cedeab03f408dab4c74c9fcf18b59)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.42.0 ([#2324](https://github.com/googleapis/java-pubsub/issues/2324)) ([84e8562](https://github.com/googleapis/java-pubsub/commit/84e856250867b2441cceed2315c312bd661c353c)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.29.3 ([#2302](https://github.com/googleapis/java-pubsub/issues/2302)) ([9e90e2c](https://github.com/googleapis/java-pubsub/commit/9e90e2ca26b2aea48563859358dde84640eb40d0)) +* Update dependency org.assertj:assertj-core to v3.27.3 ([#2313](https://github.com/googleapis/java-pubsub/issues/2313)) ([5e80b57](https://github.com/googleapis/java-pubsub/commit/5e80b57d2ffd58e6a0bb9f5e0e78bb46d6fe2530)) +* Update googleapis/sdk-platform-java action to v2.52.0 ([#2320](https://github.com/googleapis/java-pubsub/issues/2320)) ([01dd3de](https://github.com/googleapis/java-pubsub/commit/01dd3deaef392aa51c60d28c1f3cbb81bff2a5cb)) + + +### Documentation + +* Add samples and tests for ingestion from Kafka sources ([#2315](https://github.com/googleapis/java-pubsub/issues/2315)) ([eea603b](https://github.com/googleapis/java-pubsub/commit/eea603ba3f05be85d58a69cd5c3469e2088a7446)) + +## [1.136.0](https://github.com/googleapis/java-pubsub/compare/v1.135.0...v1.136.0) (2025-01-10) + + +### Features + +* Add Kafka-based sources to IngestionDataSourceSettings proto and IngestionFailureEvent proto ([2947169](https://github.com/googleapis/java-pubsub/commit/2947169c009fa553202bc1e44276cf5a7954cd96)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.51.1 ([9c166f7](https://github.com/googleapis/java-pubsub/commit/9c166f76db78b0c6b2e0218460d5c0336102717a)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.45.0 ([#2292](https://github.com/googleapis/java-pubsub/issues/2292)) ([79a8982](https://github.com/googleapis/java-pubsub/commit/79a89823c6cbcc9a718f44856040b1525863cab6)) +* Update dependency com.google.cloud:google-cloud-storage to v2.46.0 ([#2291](https://github.com/googleapis/java-pubsub/issues/2291)) ([7b60884](https://github.com/googleapis/java-pubsub/commit/7b60884cc4e17df616155f7530a056c4c5e3af29)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.41.1 ([#2301](https://github.com/googleapis/java-pubsub/issues/2301)) ([53c1a8a](https://github.com/googleapis/java-pubsub/commit/53c1a8abdd3114e0f432b3b6618133fb93e44636)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.29.2 ([#2294](https://github.com/googleapis/java-pubsub/issues/2294)) ([48d4ac1](https://github.com/googleapis/java-pubsub/commit/48d4ac1ab2f0b9f9005292977c288f55322dd16a)) +* Update dependency org.assertj:assertj-core to v3.27.2 ([#2296](https://github.com/googleapis/java-pubsub/issues/2296)) ([e5b68a5](https://github.com/googleapis/java-pubsub/commit/e5b68a563aa6ebb2bd69665624fc7fc6aef50b64)) +* Update googleapis/sdk-platform-java action to v2.51.1 ([#2298](https://github.com/googleapis/java-pubsub/issues/2298)) ([16e0144](https://github.com/googleapis/java-pubsub/commit/16e0144d83c149b60e7b8fca6c4e61546d93462f)) + +## [1.135.0](https://github.com/googleapis/java-pubsub/compare/v1.134.2...v1.135.0) (2024-12-12) + + +### Features + +* Introduce `java.time` variables and methods ([#2271](https://github.com/googleapis/java-pubsub/issues/2271)) ([7edfd9c](https://github.com/googleapis/java-pubsub/commit/7edfd9c315405c7703509fb9b7bc4f0d2686d870)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.51.0 ([0b0d52c](https://github.com/googleapis/java-pubsub/commit/0b0d52c8fca179a913a8b04d76b44748f1886f45)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.44.0 ([#2270](https://github.com/googleapis/java-pubsub/issues/2270)) ([a5f70a9](https://github.com/googleapis/java-pubsub/commit/a5f70a9c2397a2c8f4642729922b742a3df01ed6)) +* Update dependency com.google.cloud:google-cloud-core to v2.48.0 ([#2263](https://github.com/googleapis/java-pubsub/issues/2263)) ([d7e5588](https://github.com/googleapis/java-pubsub/commit/d7e55886b62826f54f0bb12a6bfa4ef67dee6521)) +* Update dependency com.google.cloud:google-cloud-core to v2.49.0 ([#2285](https://github.com/googleapis/java-pubsub/issues/2285)) ([cd94a19](https://github.com/googleapis/java-pubsub/commit/cd94a1987271eea4d7744286a7daeb071bb9456a)) +* Update dependency com.google.cloud:google-cloud-storage to v2.45.0 ([#2268](https://github.com/googleapis/java-pubsub/issues/2268)) ([80a09e6](https://github.com/googleapis/java-pubsub/commit/80a09e69111229080c413eff8426bd0b3d50458d)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.41.0 ([#2286](https://github.com/googleapis/java-pubsub/issues/2286)) ([0c0a1b9](https://github.com/googleapis/java-pubsub/commit/0c0a1b9231953e5c9878e0dfcf5a55d01794f6c4)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.29.0 ([#2276](https://github.com/googleapis/java-pubsub/issues/2276)) ([54ef88d](https://github.com/googleapis/java-pubsub/commit/54ef88d7f822d8130717e3be9bcf7fe9901d6cb0)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.29.1 ([#2279](https://github.com/googleapis/java-pubsub/issues/2279)) ([de3c9e1](https://github.com/googleapis/java-pubsub/commit/de3c9e1c7f2fe6413d0ae7a18955f16611df95c6)) +* Update googleapis/sdk-platform-java action to v2.51.0 ([#2284](https://github.com/googleapis/java-pubsub/issues/2284)) ([0be820e](https://github.com/googleapis/java-pubsub/commit/0be820e2044253bf484d88d703ce2dfade7aa137)) + + +### Documentation + +* Fix repository URL in samples README ([#2280](https://github.com/googleapis/java-pubsub/issues/2280)) ([8aeff1a](https://github.com/googleapis/java-pubsub/commit/8aeff1a375f3aa989d2c4bde0ed3dd2f329601fc)) + +## [1.134.2](https://github.com/googleapis/java-pubsub/compare/v1.134.1...v1.134.2) (2024-11-18) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.49.0 ([77546e0](https://github.com/googleapis/java-pubsub/commit/77546e0548e72e331523fb4f30edd1577b5fe6ea)) +* **deps:** Update the Java code generator (gapic-generator-java) to 2.50.0 ([3f21af3](https://github.com/googleapis/java-pubsub/commit/3f21af3e3fbc6ef49ecbe80712350d8712133c59)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.43.3 ([#2256](https://github.com/googleapis/java-pubsub/issues/2256)) ([f7fbc6c](https://github.com/googleapis/java-pubsub/commit/f7fbc6c7e4f7d8a8b31d4778d2cd8c55efcb9be1)) +* Update dependency com.google.cloud:google-cloud-core to v2.47.0 ([#2249](https://github.com/googleapis/java-pubsub/issues/2249)) ([3df5729](https://github.com/googleapis/java-pubsub/commit/3df572918523738e8f2f28299efa811aa23e297b)) +* Update dependency com.google.cloud:google-cloud-storage to v2.44.1 ([#2240](https://github.com/googleapis/java-pubsub/issues/2240)) ([f8dae4d](https://github.com/googleapis/java-pubsub/commit/f8dae4d68c1835930d4e39522a354cdfcc4cdd84)) +* Update googleapis/sdk-platform-java action to v2.50.0 ([#2261](https://github.com/googleapis/java-pubsub/issues/2261)) ([d0aab7d](https://github.com/googleapis/java-pubsub/commit/d0aab7d157c628ff5b8787b8c75dfaedc7a7305f)) +* Update sdk platform java dependencies ([#2262](https://github.com/googleapis/java-pubsub/issues/2262)) ([b689fe2](https://github.com/googleapis/java-pubsub/commit/b689fe262b3a4c90264669ec87408bfeb6dc7659)) + +## [1.134.1](https://github.com/googleapis/java-pubsub/compare/v1.134.0...v1.134.1) (2024-10-26) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.39.0 ([#2251](https://github.com/googleapis/java-pubsub/issues/2251)) ([083cc7c](https://github.com/googleapis/java-pubsub/commit/083cc7c930fa2728d2322c1343b0fc025f9e255d)) +* Update googleapis/sdk-platform-java action to v2.49.0 ([#2250](https://github.com/googleapis/java-pubsub/issues/2250)) ([af0f194](https://github.com/googleapis/java-pubsub/commit/af0f194369d4a9f16dd14378aa90280adc194d98)) + +## [1.134.0](https://github.com/googleapis/java-pubsub/compare/v1.133.1...v1.134.0) (2024-10-23) + + +### Features + +* Add IngestionFailureEvent to the external proto ([6c67798](https://github.com/googleapis/java-pubsub/commit/6c67798c6b7442d77eb30fbba874344f32a926b4)) +* Track batch size using serialized size of PublishRequest ([#2113](https://github.com/googleapis/java-pubsub/issues/2113)) ([be78e64](https://github.com/googleapis/java-pubsub/commit/be78e64f9fdfc9ddf0790189311fac673754e219)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.43.1 ([#2202](https://github.com/googleapis/java-pubsub/issues/2202)) ([acaf5f2](https://github.com/googleapis/java-pubsub/commit/acaf5f2e3686a939d4b972c73a4d039142f753df)) +* Update dependency com.google.cloud:google-cloud-core to v2.46.0 ([#2238](https://github.com/googleapis/java-pubsub/issues/2238)) ([dc06d54](https://github.com/googleapis/java-pubsub/commit/dc06d5456ab6fe8d94b7b845ca9159391949517f)) +* Update dependency com.google.cloud:google-cloud-storage to v2.43.2 ([#2226](https://github.com/googleapis/java-pubsub/issues/2226)) ([eb87c04](https://github.com/googleapis/java-pubsub/commit/eb87c04619f7bdaf59ce2b562a96b8c25d3c8196)) +* Update dependency com.google.cloud.opentelemetry:exporter-trace to v0.33.0 ([#2225](https://github.com/googleapis/java-pubsub/issues/2225)) ([cc1b072](https://github.com/googleapis/java-pubsub/commit/cc1b0726009524ddee3c2ce7f1446608dd3bc752)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.28.3 ([#2237](https://github.com/googleapis/java-pubsub/issues/2237)) ([75abe83](https://github.com/googleapis/java-pubsub/commit/75abe83a9b14c2e5cc3f136ff97b5340bfa904db)) +* Update dependency org.apache.avro:avro to v1.11.4 [security] ([#2223](https://github.com/googleapis/java-pubsub/issues/2223)) ([31f276b](https://github.com/googleapis/java-pubsub/commit/31f276b10a96c53ecbd828972a9e3457c0c7c700)) +* Update sdk platform java dependencies ([#2239](https://github.com/googleapis/java-pubsub/issues/2239)) ([8f4f855](https://github.com/googleapis/java-pubsub/commit/8f4f8556414aaef731a7226dcbffe59d91819775)) + + +### Documentation + +* Add OpenTelemetry samples ([#2208](https://github.com/googleapis/java-pubsub/issues/2208)) ([c447fe5](https://github.com/googleapis/java-pubsub/commit/c447fe500ba48ba4fde27d97f10ef7664d09363b)) + +## [1.133.1](https://github.com/googleapis/java-pubsub/compare/v1.133.0...v1.133.1) (2024-10-07) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.47.0 ([ccd23af](https://github.com/googleapis/java-pubsub/commit/ccd23afd99e7cb5a28747b06d0a97d1cb8163391)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.45.0 ([#2213](https://github.com/googleapis/java-pubsub/issues/2213)) ([5ee969b](https://github.com/googleapis/java-pubsub/commit/5ee969bb9ed873073895881062ec72f419bbc837)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.37.0 ([#2214](https://github.com/googleapis/java-pubsub/issues/2214)) ([d938709](https://github.com/googleapis/java-pubsub/commit/d93870934f610cffb705837ed8391eb276a18c05)) +* Update googleapis/sdk-platform-java action to v2.47.0 ([#2212](https://github.com/googleapis/java-pubsub/issues/2212)) ([6a9723d](https://github.com/googleapis/java-pubsub/commit/6a9723d2872c82bbb525119cac7471d1a2f3b7cd)) + + +### Documentation + +* Add ingestion from GCS sample ([#2211](https://github.com/googleapis/java-pubsub/issues/2211)) ([ddb7391](https://github.com/googleapis/java-pubsub/commit/ddb739113b38d4e2f4617a105cd0ab071f21d4de)) +* Update emulator sample to create a topic and publish to it ([#2039](https://github.com/googleapis/java-pubsub/issues/2039)) ([21d5cfc](https://github.com/googleapis/java-pubsub/commit/21d5cfc3b9484ffc2c1a0084b8bc2f6f76b6bf62)) + +## [1.133.0](https://github.com/googleapis/java-pubsub/compare/v1.132.4...v1.133.0) (2024-10-01) + + +### Features + +* Add OpenTelemetry tracing to the Publisher and Subscriber ([#2086](https://github.com/googleapis/java-pubsub/issues/2086)) ([db522b6](https://github.com/googleapis/java-pubsub/commit/db522b60f1bbec9cc1bfa0c37477044fd2f807c7)) + + +### Dependencies + +* Update dependency com.google.cloud.opentelemetry:exporter-trace to v0.32.0 ([#2205](https://github.com/googleapis/java-pubsub/issues/2205)) ([76f17e4](https://github.com/googleapis/java-pubsub/commit/76f17e4149bf369f2be12fe9d316a23a7f49f137)) +* Update dependency org.assertj:assertj-core to v3.26.3 ([#2204](https://github.com/googleapis/java-pubsub/issues/2204)) ([71c2e76](https://github.com/googleapis/java-pubsub/commit/71c2e762e94895c465c4e737ed8bf7bc583a9c14)) + +## [1.132.4](https://github.com/googleapis/java-pubsub/compare/v1.132.3...v1.132.4) (2024-09-30) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-storage to v2.43.1 ([#2194](https://github.com/googleapis/java-pubsub/issues/2194)) ([979e420](https://github.com/googleapis/java-pubsub/commit/979e420377327cf3843ac23151d8b44a7e5188c5)) +* Update dependency ubuntu to v24 ([#2193](https://github.com/googleapis/java-pubsub/issues/2193)) ([f295b01](https://github.com/googleapis/java-pubsub/commit/f295b01cb93fe26612c79c3d2ba0bb68f0404d7e)) + +## [1.132.3](https://github.com/googleapis/java-pubsub/compare/v1.132.2...v1.132.3) (2024-09-26) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.42.3 ([#2173](https://github.com/googleapis/java-pubsub/issues/2173)) ([294d039](https://github.com/googleapis/java-pubsub/commit/294d03974ab236c2ee5d0e420e8913eb6fc65fc9)) +* Update dependency com.google.cloud:google-cloud-core to v2.44.0 ([#2184](https://github.com/googleapis/java-pubsub/issues/2184)) ([faecb3b](https://github.com/googleapis/java-pubsub/commit/faecb3b90cb259ae376b8481ec30511ce19279bf)) +* Update dependency com.google.cloud:google-cloud-core to v2.44.1 ([#2190](https://github.com/googleapis/java-pubsub/issues/2190)) ([9ea45dc](https://github.com/googleapis/java-pubsub/commit/9ea45dc13f11076890cfff35e7acf2eafc2af70a)) +* Update dependency com.google.cloud:google-cloud-storage to v2.43.0 ([#2174](https://github.com/googleapis/java-pubsub/issues/2174)) ([ae800d7](https://github.com/googleapis/java-pubsub/commit/ae800d7b3ffd19302b416f03fad8b20e93afce8f)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.36.0 ([#2185](https://github.com/googleapis/java-pubsub/issues/2185)) ([5ca2c7c](https://github.com/googleapis/java-pubsub/commit/5ca2c7c52497514af30e4522f0ae245d0f8d73ce)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.36.1 ([#2191](https://github.com/googleapis/java-pubsub/issues/2191)) ([555216e](https://github.com/googleapis/java-pubsub/commit/555216ee5bf9cfbba6664f133fc7cde1101f5f0b)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.28.2 ([#2179](https://github.com/googleapis/java-pubsub/issues/2179)) ([c9bbd2c](https://github.com/googleapis/java-pubsub/commit/c9bbd2cf3525e3ebdf9ce3af7fe50a16a87c9837)) + +## [1.132.2](https://github.com/googleapis/java-pubsub/compare/v1.132.1...v1.132.2) (2024-09-11) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.42.1 ([#2152](https://github.com/googleapis/java-pubsub/issues/2152)) ([1457489](https://github.com/googleapis/java-pubsub/commit/1457489cb51c12bc7ad8ab8ddcf2252a2f513a79)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.42.2 ([#2157](https://github.com/googleapis/java-pubsub/issues/2157)) ([d671347](https://github.com/googleapis/java-pubsub/commit/d671347004a68c53cdf3fdfb9d1a7ed992ee162f)) +* Update dependency com.google.cloud:google-cloud-core to v2.43.0 ([#2161](https://github.com/googleapis/java-pubsub/issues/2161)) ([05a37b7](https://github.com/googleapis/java-pubsub/commit/05a37b786686c24f87eec5e9919c16b2b67465be)) +* Update dependency com.google.cloud:google-cloud-storage to v2.42.0 ([#2145](https://github.com/googleapis/java-pubsub/issues/2145)) ([77c3e78](https://github.com/googleapis/java-pubsub/commit/77c3e78d34e894c05653371027cd2b1d12cea9d0)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.35.0 ([#2162](https://github.com/googleapis/java-pubsub/issues/2162)) ([27eaffd](https://github.com/googleapis/java-pubsub/commit/27eaffd5fa55789b456eaeba98f6800343f3685e)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.27.4 ([#2153](https://github.com/googleapis/java-pubsub/issues/2153)) ([32c78b3](https://github.com/googleapis/java-pubsub/commit/32c78b31e7a904fb6b6a2b55f81e7e3ab7525add)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.28.0 ([#2155](https://github.com/googleapis/java-pubsub/issues/2155)) ([5f61fe1](https://github.com/googleapis/java-pubsub/commit/5f61fe13f6fea1d30ab0e85be0221e70056369f6)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.28.1 ([#2167](https://github.com/googleapis/java-pubsub/issues/2167)) ([bb8ea71](https://github.com/googleapis/java-pubsub/commit/bb8ea717ed0234fdbb582f2915a016fd37657448)) +* Update dependency org.xerial.snappy:snappy-java to v1.1.10.7 ([#2165](https://github.com/googleapis/java-pubsub/issues/2165)) ([e7fb60e](https://github.com/googleapis/java-pubsub/commit/e7fb60ecccb8bb9fbc6147210491a52ee0f5a817)) + +## [1.132.1](https://github.com/googleapis/java-pubsub/compare/v1.132.0...v1.132.1) (2024-08-20) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.42.0 ([#2140](https://github.com/googleapis/java-pubsub/issues/2140)) ([80dca35](https://github.com/googleapis/java-pubsub/commit/80dca35cebb1061f3d2a852ff9929519e69283cc)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.34.0 ([#2141](https://github.com/googleapis/java-pubsub/issues/2141)) ([273fbf3](https://github.com/googleapis/java-pubsub/commit/273fbf3f752444a397b0e743c5c6de1a539291ea)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.27.3 ([#2127](https://github.com/googleapis/java-pubsub/issues/2127)) ([8523b4f](https://github.com/googleapis/java-pubsub/commit/8523b4f67f45ac219671c0d588bac7e9dc450dcb)) +* Update dependency org.xerial.snappy:snappy-java to v1.1.10.6 ([#2135](https://github.com/googleapis/java-pubsub/issues/2135)) ([102ff84](https://github.com/googleapis/java-pubsub/commit/102ff844594687b3bbaca1ff92e650fe9e8d3f1e)) + +## [1.132.0](https://github.com/googleapis/java-pubsub/compare/v1.131.0...v1.132.0) (2024-08-01) + + +### Features + +* Enable hermetic library generation ([#2048](https://github.com/googleapis/java-pubsub/issues/2048)) ([283a5e8](https://github.com/googleapis/java-pubsub/commit/283a5e89837071678f8dd94b8b8adfad91a6766c)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.41.0 ([#2093](https://github.com/googleapis/java-pubsub/issues/2093)) ([217b8a3](https://github.com/googleapis/java-pubsub/commit/217b8a3f5419f80402d349b8873d7302eeb35e3f)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.42.0 ([#2124](https://github.com/googleapis/java-pubsub/issues/2124)) ([24ebe24](https://github.com/googleapis/java-pubsub/commit/24ebe2402fe6278348d87b5a4259c365a819877f)) +* Update dependency com.google.cloud:google-cloud-core to v2.41.0 ([#2120](https://github.com/googleapis/java-pubsub/issues/2120)) ([1f6428a](https://github.com/googleapis/java-pubsub/commit/1f6428a8b79369a239664b9ea7cd38e024db9724)) +* Update dependency com.google.cloud:google-cloud-storage to v2.40.1 ([#2095](https://github.com/googleapis/java-pubsub/issues/2095)) ([0d64d6c](https://github.com/googleapis/java-pubsub/commit/0d64d6cf7799a176297ceaa1475b7cb29a64bebc)) +* Update dependency com.google.cloud:google-cloud-storage to v2.41.0 ([#2129](https://github.com/googleapis/java-pubsub/issues/2129)) ([2348d20](https://github.com/googleapis/java-pubsub/commit/2348d2022bc400b7f187d3db7f43aff94d8884a8)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.33.0 ([#2121](https://github.com/googleapis/java-pubsub/issues/2121)) ([7fbea6d](https://github.com/googleapis/java-pubsub/commit/7fbea6d0c922dd3485f19eafccc42869efd0e5ed)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.27.2 ([#2091](https://github.com/googleapis/java-pubsub/issues/2091)) ([9859f11](https://github.com/googleapis/java-pubsub/commit/9859f1181a12bc683eaf4a6345bf2528a5463c59)) +* Update dependency org.junit.vintage:junit-vintage-engine to v5.10.3 ([#2096](https://github.com/googleapis/java-pubsub/issues/2096)) ([42f12ed](https://github.com/googleapis/java-pubsub/commit/42f12ed3270e66beae316deb729b445c94dcb1a8)) + + +### Documentation + +* **samples:** Optimistic subscribe sample ([#2063](https://github.com/googleapis/java-pubsub/issues/2063)) ([53a4844](https://github.com/googleapis/java-pubsub/commit/53a4844f09eace777142b8cdcd06bc07cef0b432)) + +## [1.131.0](https://github.com/googleapis/java-pubsub/compare/v1.130.1...v1.131.0) (2024-06-25) + + +### Features + +* Add use_topic_schema for Cloud Storage Subscriptions ([#2082](https://github.com/googleapis/java-pubsub/issues/2082)) ([11d67d4](https://github.com/googleapis/java-pubsub/commit/11d67d44152ccca008dda071683d9932c59af41d)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.40.0 ([#2087](https://github.com/googleapis/java-pubsub/issues/2087)) ([26b01c9](https://github.com/googleapis/java-pubsub/commit/26b01c921f2700947a1653702be0234cf84cccef)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.32.0 ([#2088](https://github.com/googleapis/java-pubsub/issues/2088)) ([aebc3ed](https://github.com/googleapis/java-pubsub/commit/aebc3ed779e0847077742dedc7c2c0a9d8a1ab10)) + +## [1.130.1](https://github.com/googleapis/java-pubsub/compare/v1.130.0...v1.130.1) (2024-06-13) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.40.3 ([#2071](https://github.com/googleapis/java-pubsub/issues/2071)) ([0844bfb](https://github.com/googleapis/java-pubsub/commit/0844bfb0a500ae0b4a0f63fcb45ffffeaf609e3d)) +* Update dependency com.google.cloud:google-cloud-storage to v2.40.0 ([#2066](https://github.com/googleapis/java-pubsub/issues/2066)) ([dfcaeb5](https://github.com/googleapis/java-pubsub/commit/dfcaeb5b59466d86ac5b5bf74655ce359e7d5713)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.27.1 ([#2065](https://github.com/googleapis/java-pubsub/issues/2065)) ([6baf69a](https://github.com/googleapis/java-pubsub/commit/6baf69a99adb75fba49c2289bca3ffd08720f8f4)) + +## [1.130.0](https://github.com/googleapis/java-pubsub/compare/v1.129.7...v1.130.0) (2024-06-03) + + +### Features + +* [java] allow passing libraries_bom_version from env ([#1967](https://github.com/googleapis/java-pubsub/issues/1967)) ([#2033](https://github.com/googleapis/java-pubsub/issues/2033)) ([825c5f8](https://github.com/googleapis/java-pubsub/commit/825c5f83e0fd2fd6b1f4856b9c555d71110a03e1)) +* Add service_account_email for export subscriptions ([#2054](https://github.com/googleapis/java-pubsub/issues/2054)) ([670db3e](https://github.com/googleapis/java-pubsub/commit/670db3e1b665e6f5aec3cd7bf3639e9242f20151)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.39.0 ([#2057](https://github.com/googleapis/java-pubsub/issues/2057)) ([43446d2](https://github.com/googleapis/java-pubsub/commit/43446d22ad2140f1b18fd1dde5dab03a901580bc)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.31.0 ([#2058](https://github.com/googleapis/java-pubsub/issues/2058)) ([a998ef5](https://github.com/googleapis/java-pubsub/commit/a998ef5359942486ea47bfd50f154314ae37be33)) + +## [1.129.7](https://github.com/googleapis/java-pubsub/compare/v1.129.6...v1.129.7) (2024-05-29) + + +### Dependencies + +* Change scope of grpc-inprocess dependency from runtime to test ([#2038](https://github.com/googleapis/java-pubsub/issues/2038)) ([1ab45c9](https://github.com/googleapis/java-pubsub/commit/1ab45c9eaee35d4bfeb332244c74f1253b77c166)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.40.2 ([#2046](https://github.com/googleapis/java-pubsub/issues/2046)) ([f81c5e1](https://github.com/googleapis/java-pubsub/commit/f81c5e1b977e6da19aac6a40c1389ddcc4643e3c)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.27.0 ([#2044](https://github.com/googleapis/java-pubsub/issues/2044)) ([37e94ce](https://github.com/googleapis/java-pubsub/commit/37e94ce13a2998b5e3f69e9ad3d4ab68af108d64)) + +## [1.129.6](https://github.com/googleapis/java-pubsub/compare/v1.129.5...v1.129.6) (2024-05-23) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-storage to v2.39.0 ([#2040](https://github.com/googleapis/java-pubsub/issues/2040)) ([eb6bd9c](https://github.com/googleapis/java-pubsub/commit/eb6bd9c559073429d8338b9d8fa83e0e3f61b8e9)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.10.2 ([#2035](https://github.com/googleapis/java-pubsub/issues/2035)) ([40fdd7a](https://github.com/googleapis/java-pubsub/commit/40fdd7a71aa07d6c64ac6f96d7c6642af3563280)) + +## [1.129.5](https://github.com/googleapis/java-pubsub/compare/v1.129.4...v1.129.5) (2024-05-16) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.38.1 ([#2027](https://github.com/googleapis/java-pubsub/issues/2027)) ([535edf6](https://github.com/googleapis/java-pubsub/commit/535edf6496700bc5c5fb0b5cfa1cac6be5d62875)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.30.1 ([#2028](https://github.com/googleapis/java-pubsub/issues/2028)) ([aedcffd](https://github.com/googleapis/java-pubsub/commit/aedcffdaedbaa30627c96f96bfa5430bd4666cf0)) + +## [1.129.4](https://github.com/googleapis/java-pubsub/compare/v1.129.3...v1.129.4) (2024-05-10) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.40.0 ([#2016](https://github.com/googleapis/java-pubsub/issues/2016)) ([beee523](https://github.com/googleapis/java-pubsub/commit/beee523ffc501a33b99a4ee82ccdb04b83391403)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.40.1 ([#2021](https://github.com/googleapis/java-pubsub/issues/2021)) ([0873594](https://github.com/googleapis/java-pubsub/commit/0873594c000f470c6193ebe8b4d091701670ef06)) +* Update dependency com.google.cloud:google-cloud-storage to v2.38.0 ([#2019](https://github.com/googleapis/java-pubsub/issues/2019)) ([ba3dffc](https://github.com/googleapis/java-pubsub/commit/ba3dffc3ac8cf173362307c24bc46e815c64db40)) + +## [1.129.3](https://github.com/googleapis/java-pubsub/compare/v1.129.2...v1.129.3) (2024-05-06) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.38.0 ([#2011](https://github.com/googleapis/java-pubsub/issues/2011)) ([4a547d0](https://github.com/googleapis/java-pubsub/commit/4a547d08d02f3abaf23bfb8e5ed65e40c131bb94)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.30.0 ([#2012](https://github.com/googleapis/java-pubsub/issues/2012)) ([811d0e6](https://github.com/googleapis/java-pubsub/commit/811d0e609b5eb6eaf9c921828255407d9db68293)) + +## [1.129.2](https://github.com/googleapis/java-pubsub/compare/v1.129.1...v1.129.2) (2024-04-30) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.39.1 ([#2006](https://github.com/googleapis/java-pubsub/issues/2006)) ([a7f4afb](https://github.com/googleapis/java-pubsub/commit/a7f4afbc870536a7964594bc1d5b9a2eb5076cce)) + +## [1.129.1](https://github.com/googleapis/java-pubsub/compare/v1.129.0...v1.129.1) (2024-04-25) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.39.0 ([#2000](https://github.com/googleapis/java-pubsub/issues/2000)) ([09ee49a](https://github.com/googleapis/java-pubsub/commit/09ee49a8304089f4388cfbde58127d46fe07a5a1)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.39.0 ([#2002](https://github.com/googleapis/java-pubsub/issues/2002)) ([88517fe](https://github.com/googleapis/java-pubsub/commit/88517fe69a7a9577aa79b693957bf56a56d0980c)) +* Update dependency com.google.cloud:google-cloud-core to v2.37.0 ([#1997](https://github.com/googleapis/java-pubsub/issues/1997)) ([b4573ae](https://github.com/googleapis/java-pubsub/commit/b4573ae6c93ca47bc802616ae3715fc10163bf2e)) +* Update dependency com.google.cloud:google-cloud-storage to v2.37.0 ([#1999](https://github.com/googleapis/java-pubsub/issues/1999)) ([cff6d6a](https://github.com/googleapis/java-pubsub/commit/cff6d6a5fc297eb5254a409d495bda458dfebcd6)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.29.0 ([#1998](https://github.com/googleapis/java-pubsub/issues/1998)) ([bb80924](https://github.com/googleapis/java-pubsub/commit/bb80924e55bc97db82650d4ae2bdebf406c68f98)) + +## [1.129.0](https://github.com/googleapis/java-pubsub/compare/v1.128.1...v1.129.0) (2024-04-17) + + +### Features + +* Add `libraries_bom_version` in metadata ([#1956](https://github.com/googleapis/java-pubsub/issues/1956)) ([#1990](https://github.com/googleapis/java-pubsub/issues/1990)) ([18cfa73](https://github.com/googleapis/java-pubsub/commit/18cfa73208bdf9b6a1a597bac740056abfcb03ef)) + + +### Dependencies + +* Update actions/setup-java action to v4 ([#1978](https://github.com/googleapis/java-pubsub/issues/1978)) ([64a0df3](https://github.com/googleapis/java-pubsub/commit/64a0df337c91f965e4d8960801e10f90f78c46cd)) + +## [1.128.1](https://github.com/googleapis/java-pubsub/compare/v1.128.0...v1.128.1) (2024-04-10) + + +### Dependencies + +* Update actions/checkout action to v4 ([#1975](https://github.com/googleapis/java-pubsub/issues/1975)) ([618abdd](https://github.com/googleapis/java-pubsub/commit/618abdd44dd9670a5d6a1ca3c923e3d0621c6248)) +* Update actions/github-script action to v7 ([#1976](https://github.com/googleapis/java-pubsub/issues/1976)) ([c836172](https://github.com/googleapis/java-pubsub/commit/c8361722544ec4170b94651e77b02634938c7883)) + +## [1.128.0](https://github.com/googleapis/java-pubsub/compare/v1.127.3...v1.128.0) (2024-04-03) + + +### Features + +* Add custom datetime format for Cloud Storage subscriptions ([#1970](https://github.com/googleapis/java-pubsub/issues/1970)) ([7113f06](https://github.com/googleapis/java-pubsub/commit/7113f065973bb8b56ab811e0589ffb7975873679)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.38.2 ([#1965](https://github.com/googleapis/java-pubsub/issues/1965)) ([ec3b386](https://github.com/googleapis/java-pubsub/commit/ec3b38665ddc6336f975d597d27c4aa25732c474)) +* Update dependency com.google.cloud:google-cloud-storage to v2.36.1 ([#1968](https://github.com/googleapis/java-pubsub/issues/1968)) ([524109c](https://github.com/googleapis/java-pubsub/commit/524109c1afc5118c79fd97769e194a1325322107)) +* Update dependency com.google.protobuf:protobuf-java-util to v4.26.1 ([#1972](https://github.com/googleapis/java-pubsub/issues/1972)) ([53c1120](https://github.com/googleapis/java-pubsub/commit/53c112033dc721cf91aceddfc1eeb3c6daddb45e)) + + +### Documentation + +* Add Kinesis ingestion samples ([#1947](https://github.com/googleapis/java-pubsub/issues/1947)) ([5b5c14b](https://github.com/googleapis/java-pubsub/commit/5b5c14ba31636c037c2b8d6a166bd48670e23688)) + +## [1.127.3](https://github.com/googleapis/java-pubsub/compare/v1.127.2...v1.127.3) (2024-03-20) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.36.0 ([#1955](https://github.com/googleapis/java-pubsub/issues/1955)) ([d25d14a](https://github.com/googleapis/java-pubsub/commit/d25d14ad4694c5a914f9d07018cb0f6b9af4f9aa)) +* Update dependency com.google.cloud:google-cloud-core to v2.36.1 ([#1962](https://github.com/googleapis/java-pubsub/issues/1962)) ([96c1c97](https://github.com/googleapis/java-pubsub/commit/96c1c971fa4dced85cb2ed4e9db3e3fb47eb82c6)) +* Update dependency com.google.cloud:google-cloud-storage to v2.36.0 ([#1957](https://github.com/googleapis/java-pubsub/issues/1957)) ([0d8c182](https://github.com/googleapis/java-pubsub/commit/0d8c182653ea1ffd429465e91075760c1501eb34)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.28.0 ([#1956](https://github.com/googleapis/java-pubsub/issues/1956)) ([183df2c](https://github.com/googleapis/java-pubsub/commit/183df2caeed8e0df53ef9668232e4949ec4719a9)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.28.1 ([#1960](https://github.com/googleapis/java-pubsub/issues/1960)) ([faa45a4](https://github.com/googleapis/java-pubsub/commit/faa45a4efeaee5b45f9a4cc89dc2917f56a66797)) +* Update dependency com.google.protobuf:protobuf-java-util to v4 ([#1951](https://github.com/googleapis/java-pubsub/issues/1951)) ([243ec9a](https://github.com/googleapis/java-pubsub/commit/243ec9ab47212bbe701b16882c92a9b3d5d4aeaa)) + +## [1.127.2](https://github.com/googleapis/java-pubsub/compare/v1.127.1...v1.127.2) (2024-03-10) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.37.0 ([#1938](https://github.com/googleapis/java-pubsub/issues/1938)) ([1435c4e](https://github.com/googleapis/java-pubsub/commit/1435c4e4d25d789fadbfc2c54c2f90b138693b40)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.38.1 ([#1944](https://github.com/googleapis/java-pubsub/issues/1944)) ([76317e1](https://github.com/googleapis/java-pubsub/commit/76317e1fe60467b4bbe9b4867d0a29e983ce687f)) +* Update dependency com.google.cloud:google-cloud-storage to v2.35.0 ([#1942](https://github.com/googleapis/java-pubsub/issues/1942)) ([989f7ba](https://github.com/googleapis/java-pubsub/commit/989f7bac5bada7ac5d6e68c742af0290cb757e4b)) +* Update dependency com.google.cloud:google-cloud-storage to v2.35.0 ([#1946](https://github.com/googleapis/java-pubsub/issues/1946)) ([b94989d](https://github.com/googleapis/java-pubsub/commit/b94989df6c5ae6f62e648016cef2e008a3b9ed05)) + +## [1.127.1](https://github.com/googleapis/java-pubsub/compare/v1.127.0...v1.127.1) (2024-03-04) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.38.0 ([#1931](https://github.com/googleapis/java-pubsub/issues/1931)) ([357c901](https://github.com/googleapis/java-pubsub/commit/357c901029a8bc5fb9800a7fae6f3d93080c0a0d)) +* Update dependency com.google.cloud:google-cloud-core to v2.35.0 ([#1936](https://github.com/googleapis/java-pubsub/issues/1936)) ([785e6d1](https://github.com/googleapis/java-pubsub/commit/785e6d1e4f2234d2c49183fc06d3f73de537171b)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.27.0 ([#1937](https://github.com/googleapis/java-pubsub/issues/1937)) ([75e7e5e](https://github.com/googleapis/java-pubsub/commit/75e7e5e9eede53e87a6bc8ccda957990ea9b0673)) + +## [1.127.0](https://github.com/googleapis/java-pubsub/compare/v1.126.6...v1.127.0) (2024-02-28) + + +### Features + +* Add an API method for reordering firewall policies ([#1868](https://github.com/googleapis/java-pubsub/issues/1868)) ([2039f7e](https://github.com/googleapis/java-pubsub/commit/2039f7e9bee9db1991fae1118e4a6b8ad88ea30c)) +* Add universe domain support for Java ([#1904](https://github.com/googleapis/java-pubsub/issues/1904)) ([1e316d3](https://github.com/googleapis/java-pubsub/commit/1e316d33d2b7c87f6b76580cd9f905fe90a664c7)) +* Next release from main branch is 1.126.0 ([#1933](https://github.com/googleapis/java-pubsub/issues/1933)) ([255d8bc](https://github.com/googleapis/java-pubsub/commit/255d8bca3509e9a9dc2d82c95fabb32590423565)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.37.2 ([#1918](https://github.com/googleapis/java-pubsub/issues/1918)) ([b8846f9](https://github.com/googleapis/java-pubsub/commit/b8846f9dbf71854af1379c40669e017dd4e005d1)) +* Update dependency com.google.cloud:google-cloud-storage to v2.34.0 ([#1917](https://github.com/googleapis/java-pubsub/issues/1917)) ([4a7d6b9](https://github.com/googleapis/java-pubsub/commit/4a7d6b971f0d16d867c56679d1e7bfbba4e4a67a)) +* Update dependency com.google.protobuf:protobuf-java-util to v3.25.3 ([#1919](https://github.com/googleapis/java-pubsub/issues/1919)) ([4bf13bb](https://github.com/googleapis/java-pubsub/commit/4bf13bb5f346a53ecf8e1e73e5f3b6d1c99ddf93)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.10.1 ([#1923](https://github.com/googleapis/java-pubsub/issues/1923)) ([cd704bd](https://github.com/googleapis/java-pubsub/commit/cd704bd57b2596d82f2f791476a109a771995b4d)) + +## [1.126.6](https://github.com/googleapis/java-pubsub/compare/v1.126.5...v1.126.6) (2024-02-14) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.33.0 ([#1912](https://github.com/googleapis/java-pubsub/issues/1912)) ([9691c6f](https://github.com/googleapis/java-pubsub/commit/9691c6fabd82eb07fcb5135019be8d6fb260ce6f)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.25.0 ([#1913](https://github.com/googleapis/java-pubsub/issues/1913)) ([9636c55](https://github.com/googleapis/java-pubsub/commit/9636c5526e5cf4507bed69349321b686ddf7ab27)) + +## [1.126.5](https://github.com/googleapis/java-pubsub/compare/v1.126.4...v1.126.5) (2024-02-12) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.37.1 ([#1898](https://github.com/googleapis/java-pubsub/issues/1898)) ([fc0dc96](https://github.com/googleapis/java-pubsub/commit/fc0dc962bcb7467fe4008263a80d1ed1e29167a0)) +* Update dependency com.google.cloud:google-cloud-storage to v2.33.0 ([#1900](https://github.com/googleapis/java-pubsub/issues/1900)) ([0efceb4](https://github.com/googleapis/java-pubsub/commit/0efceb4f4068c70565676dc2ddcf629ec4f0489f)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.10.0 ([#1887](https://github.com/googleapis/java-pubsub/issues/1887)) ([2bfa5cc](https://github.com/googleapis/java-pubsub/commit/2bfa5cc894e5a14b1d890bdcad348eeb14520f95)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.10.0 ([#1888](https://github.com/googleapis/java-pubsub/issues/1888)) ([5017789](https://github.com/googleapis/java-pubsub/commit/5017789c996246ece0c5428c68c9c6681b760bca)) +* Update dependency org.junit.vintage:junit-vintage-engine to v5.10.2 ([#1891](https://github.com/googleapis/java-pubsub/issues/1891)) ([231ba51](https://github.com/googleapis/java-pubsub/commit/231ba51c8bd2e6a8f3e0171626d35761bd07ae19)) + +## [1.126.4](https://github.com/googleapis/java-pubsub/compare/v1.126.3...v1.126.4) (2024-02-09) + + +### Bug Fixes + +* Message ordering fix for [#1889](https://github.com/googleapis/java-pubsub/issues/1889) ([#1903](https://github.com/googleapis/java-pubsub/issues/1903)) ([22a87c6](https://github.com/googleapis/java-pubsub/commit/22a87c67f07b55266e277f83f5ceb17d9f32f67e)) + +## [1.126.3](https://github.com/googleapis/java-pubsub/compare/v1.126.2...v1.126.3) (2024-02-08) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.32.0 ([#1885](https://github.com/googleapis/java-pubsub/issues/1885)) ([a2063cf](https://github.com/googleapis/java-pubsub/commit/a2063cf8f1f792f5ad1994bff00f367b399c0ff2)) + +## [1.126.2](https://github.com/googleapis/java-pubsub/compare/v1.126.1...v1.126.2) (2024-01-26) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.32.0 ([#1875](https://github.com/googleapis/java-pubsub/issues/1875)) ([0aac3e4](https://github.com/googleapis/java-pubsub/commit/0aac3e4c9c5671ce8f3b98056cc3710cd5ca9d07)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.37.0 ([#1878](https://github.com/googleapis/java-pubsub/issues/1878)) ([16dee8b](https://github.com/googleapis/java-pubsub/commit/16dee8bce115f59d8518ca1ae0e39dd87d81f802)) + +## [1.126.1](https://github.com/googleapis/java-pubsub/compare/v1.126.0...v1.126.1) (2024-01-25) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.36.0 ([#1840](https://github.com/googleapis/java-pubsub/issues/1840)) ([8c5117d](https://github.com/googleapis/java-pubsub/commit/8c5117d02511acd5469d863ea483f6e765e29292)) +* Update dependency com.google.cloud:google-cloud-core to v2.30.0 ([#1853](https://github.com/googleapis/java-pubsub/issues/1853)) ([db36def](https://github.com/googleapis/java-pubsub/commit/db36deff6a4187cb98ddd68259efd6034762060e)) +* Update dependency com.google.cloud:google-cloud-core to v2.31.0 ([#1872](https://github.com/googleapis/java-pubsub/issues/1872)) ([06db9a0](https://github.com/googleapis/java-pubsub/commit/06db9a05a80b2d7f38aefff2d5e0b33e3fa1a2c9)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.22.0 ([#1865](https://github.com/googleapis/java-pubsub/issues/1865)) ([f4c6f51](https://github.com/googleapis/java-pubsub/commit/f4c6f5112e8285264a497b3a141c31f77fea6ee2)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.23.0 ([#1873](https://github.com/googleapis/java-pubsub/issues/1873)) ([0d445f1](https://github.com/googleapis/java-pubsub/commit/0d445f173574433aed2770d9cc949672221b839e)) +* Update dependency com.google.cloud:google-cloud-storage to v2.32.0 ([#1857](https://github.com/googleapis/java-pubsub/issues/1857)) ([d673e55](https://github.com/googleapis/java-pubsub/commit/d673e55e69f60f5a6f6bae10e2f62d7fd0dfa89f)) +* Update dependency com.google.cloud:google-cloud-storage to v2.32.1 ([#1874](https://github.com/googleapis/java-pubsub/issues/1874)) ([adae8a4](https://github.com/googleapis/java-pubsub/commit/adae8a4aadb08532076fd02710d0e41336ec096c)) +* Update dependency com.google.protobuf:protobuf-java-util to v3.25.2 ([#1858](https://github.com/googleapis/java-pubsub/issues/1858)) ([8fa6354](https://github.com/googleapis/java-pubsub/commit/8fa635427927e1859332896b8373abccd5881949)) + +## [1.126.0](https://github.com/googleapis/java-pubsub/compare/v1.125.13...v1.126.0) (2024-01-13) + + +### Features + +* Add `use_table_schema` field to BigQueryConfig ([#1838](https://github.com/googleapis/java-pubsub/issues/1838)) ([8653f4f](https://github.com/googleapis/java-pubsub/commit/8653f4f3dbd61466b8ea05b342c5f66c9e536cf1)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.31.0 ([#1855](https://github.com/googleapis/java-pubsub/issues/1855)) ([7e733d2](https://github.com/googleapis/java-pubsub/commit/7e733d20093e0cd492758dd1ff3efc3a72eb1e0c)) +* Swap writer and reader schema to correct places in sample ([#1849](https://github.com/googleapis/java-pubsub/issues/1849)) ([1c79ad7](https://github.com/googleapis/java-pubsub/commit/1c79ad7336f51ffd4e177be5c2f2a7de902b47b8)) +* Temporarily remove publisher tests causing timeouts ([#1860](https://github.com/googleapis/java-pubsub/issues/1860)) ([a8fa24d](https://github.com/googleapis/java-pubsub/commit/a8fa24d7185d5345e746f8e2563afffe08f3bd6e)) +* Use message ordering enabled property that comes with streaming pull responses ([#1851](https://github.com/googleapis/java-pubsub/issues/1851)) ([d816138](https://github.com/googleapis/java-pubsub/commit/d8161380e232fd4be408e6298827423907a027fb)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.21.0 ([#1854](https://github.com/googleapis/java-pubsub/issues/1854)) ([b36825b](https://github.com/googleapis/java-pubsub/commit/b36825bf476f8bf83a7ca594932e03d06bc05f07)) +* Update dependency com.google.cloud:google-cloud-storage to v2.30.1 ([#1841](https://github.com/googleapis/java-pubsub/issues/1841)) ([d6f1352](https://github.com/googleapis/java-pubsub/commit/d6f1352ec3debe106ba238343c0c05b9278dc964)) + +## [1.125.13](https://github.com/googleapis/java-pubsub/compare/v1.125.12...v1.125.13) (2023-11-30) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.28.0 ([#1830](https://github.com/googleapis/java-pubsub/issues/1830)) ([8990b7c](https://github.com/googleapis/java-pubsub/commit/8990b7ca7cfbb08cd117f59bbf18c67dd1e7fb18)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.20.0 ([#1831](https://github.com/googleapis/java-pubsub/issues/1831)) ([d188af8](https://github.com/googleapis/java-pubsub/commit/d188af8815927b409f72c968cbd6a8685976d08b)) +* Update dependency com.google.protobuf:protobuf-java-util to v3.25.1 ([#1816](https://github.com/googleapis/java-pubsub/issues/1816)) ([e4f2b26](https://github.com/googleapis/java-pubsub/commit/e4f2b2605b17024f983a8ccf50ed19d169c15d90)) + +## [1.125.12](https://github.com/googleapis/java-pubsub/compare/v1.125.11...v1.125.12) (2023-11-21) + + +### Bug Fixes + +* Concurrent modification of processing receievd messages ([#1807](https://github.com/googleapis/java-pubsub/issues/1807)) ([d162126](https://github.com/googleapis/java-pubsub/commit/d16212627b0d9b6616e0a9b20af2c430e2f6b36f)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.34.2 ([#1821](https://github.com/googleapis/java-pubsub/issues/1821)) ([c21ba1a](https://github.com/googleapis/java-pubsub/commit/c21ba1a51acf3411e7f9793f579a103ee1d36f38)) +* Update dependency com.google.cloud:google-cloud-storage to v2.29.1 ([#1817](https://github.com/googleapis/java-pubsub/issues/1817)) ([e179b94](https://github.com/googleapis/java-pubsub/commit/e179b94b7034fbb6c10775b0fe469ab129c0d6c8)) +* Update dependency org.junit.vintage:junit-vintage-engine to v5.10.1 ([#1819](https://github.com/googleapis/java-pubsub/issues/1819)) ([af84aa3](https://github.com/googleapis/java-pubsub/commit/af84aa3f5434d3e8ff2122b72cae0fc1c7323742)) + +## [1.125.11](https://github.com/googleapis/java-pubsub/compare/v1.125.10...v1.125.11) (2023-11-01) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.27.0 ([#1810](https://github.com/googleapis/java-pubsub/issues/1810)) ([edd89f3](https://github.com/googleapis/java-pubsub/commit/edd89f36061cd1518f81eb7b33e42cf5c35c659d)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.19.0 ([#1811](https://github.com/googleapis/java-pubsub/issues/1811)) ([d671bcb](https://github.com/googleapis/java-pubsub/commit/d671bcb9b0e6c425eb33bdafea9c20b543020363)) + +## [1.125.10](https://github.com/googleapis/java-pubsub/compare/v1.125.9...v1.125.10) (2023-10-31) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-storage to v2.29.0 ([#1800](https://github.com/googleapis/java-pubsub/issues/1800)) ([8c43cc2](https://github.com/googleapis/java-pubsub/commit/8c43cc2443f333c646c27cee4ee70434167213ba)) + + +### Documentation + +* Adding a GCS subscription example ([#1762](https://github.com/googleapis/java-pubsub/issues/1762)) ([3ce824c](https://github.com/googleapis/java-pubsub/commit/3ce824c78c7eaf37fc3bc0ed2a4b3b1d952ed9bc)) +* Renaming the CreateUnwrappedPushSubscription File ([#1794](https://github.com/googleapis/java-pubsub/issues/1794)) ([3264290](https://github.com/googleapis/java-pubsub/commit/326429092ac73d184b5e887ce5107220f96199b7)) + +## [1.125.9](https://github.com/googleapis/java-pubsub/compare/v1.125.8...v1.125.9) (2023-10-27) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.34.0 ([#1795](https://github.com/googleapis/java-pubsub/issues/1795)) ([670daf1](https://github.com/googleapis/java-pubsub/commit/670daf1c74242dfa54e9747924d094cbcaac4d37)) + +## [1.125.8](https://github.com/googleapis/java-pubsub/compare/v1.125.7...v1.125.8) (2023-10-23) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.26.0 ([#1780](https://github.com/googleapis/java-pubsub/issues/1780)) ([2d38175](https://github.com/googleapis/java-pubsub/commit/2d381751b51cb69b6ab248ee56fe9ce5bf7f5cd5)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.18.0 ([#1781](https://github.com/googleapis/java-pubsub/issues/1781)) ([5b6cb15](https://github.com/googleapis/java-pubsub/commit/5b6cb15ce9f459061875329ba1fc6d4b84909666)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.28 ([#1782](https://github.com/googleapis/java-pubsub/issues/1782)) ([c9be478](https://github.com/googleapis/java-pubsub/commit/c9be478c3558928fc603c81fc07c4d8ba6d853b4)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.28 ([#1783](https://github.com/googleapis/java-pubsub/issues/1783)) ([5e39b79](https://github.com/googleapis/java-pubsub/commit/5e39b799d5d7b41325f9564a6044c0f0b4b05fdc)) + + +### Documentation + +* Modified some descriptions ([#1773](https://github.com/googleapis/java-pubsub/issues/1773)) ([17bd055](https://github.com/googleapis/java-pubsub/commit/17bd05512ba71083eb898a3ff8c5dc53c9bbb08d)) + +## [1.125.7](https://github.com/googleapis/java-pubsub/compare/v1.125.6...v1.125.7) (2023-10-17) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.33.2 ([#1770](https://github.com/googleapis/java-pubsub/issues/1770)) ([db73af7](https://github.com/googleapis/java-pubsub/commit/db73af7bca53faae2e135ec9a1899e36ac19025c)) + +## [1.125.6](https://github.com/googleapis/java-pubsub/compare/v1.125.5...v1.125.6) (2023-10-10) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.33.1 ([#1756](https://github.com/googleapis/java-pubsub/issues/1756)) ([239f474](https://github.com/googleapis/java-pubsub/commit/239f474fefd2313a6842c63c4202d835008647e3)) +* Update dependency com.google.cloud:google-cloud-core to v2.25.0 ([#1764](https://github.com/googleapis/java-pubsub/issues/1764)) ([72404ea](https://github.com/googleapis/java-pubsub/commit/72404eabcc3695b8072091587515562d852a6108)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.17.0 ([#1765](https://github.com/googleapis/java-pubsub/issues/1765)) ([a447292](https://github.com/googleapis/java-pubsub/commit/a447292d07ae1d9b03866dbdd9549c1b10564b28)) +* Update dependency com.google.protobuf:protobuf-java-util to v3.24.4 ([#1760](https://github.com/googleapis/java-pubsub/issues/1760)) ([10a64c6](https://github.com/googleapis/java-pubsub/commit/10a64c6b872a14decf3a799ebd985395358dc32c)) + +## [1.125.5](https://github.com/googleapis/java-pubsub/compare/v1.125.4...v1.125.5) (2023-09-28) + + +### Dependencies + +* Update gapic-generator-java to 2.26.0 ([935849c](https://github.com/googleapis/java-pubsub/commit/935849cedbb70a0821be56828dd0abeccbccc21c)) + +## [1.125.4](https://github.com/googleapis/java-pubsub/compare/v1.125.3...v1.125.4) (2023-09-28) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.33.0 ([#1750](https://github.com/googleapis/java-pubsub/issues/1750)) ([bcbfcd0](https://github.com/googleapis/java-pubsub/commit/bcbfcd0dd65c2ca0f20d3579109728737f1292bc)) + +## [1.125.3](https://github.com/googleapis/java-pubsub/compare/v1.125.2...v1.125.3) (2023-09-27) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.24.1 ([#1737](https://github.com/googleapis/java-pubsub/issues/1737)) ([48a4432](https://github.com/googleapis/java-pubsub/commit/48a44321ad34edd8c297ccc57445ec36916171cb)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.16.1 ([#1738](https://github.com/googleapis/java-pubsub/issues/1738)) ([e2cf7c1](https://github.com/googleapis/java-pubsub/commit/e2cf7c110b72dff695a46a972687a595216934e6)) +* Update dependency org.apache.avro:avro to v1.11.3 ([#1740](https://github.com/googleapis/java-pubsub/issues/1740)) ([971b35f](https://github.com/googleapis/java-pubsub/commit/971b35f5d26263ef3c1d83b6282680ac1608c032)) +* Update dependency org.xerial.snappy:snappy-java to v1.1.10.4 [security] ([#1742](https://github.com/googleapis/java-pubsub/issues/1742)) ([70ba500](https://github.com/googleapis/java-pubsub/commit/70ba500cc014cb9d0e1799997aa0682239b97cde)) +* Update dependency org.xerial.snappy:snappy-java to v1.1.10.5 ([#1746](https://github.com/googleapis/java-pubsub/issues/1746)) ([a4b1994](https://github.com/googleapis/java-pubsub/commit/a4b199414cad5cb061330832b2bf2a8bbe76bcbd)) + +## [1.125.2](https://github.com/googleapis/java-pubsub/compare/v1.125.1...v1.125.2) (2023-09-18) + + +### Dependencies + +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.27 ([#1730](https://github.com/googleapis/java-pubsub/issues/1730)) ([687a855](https://github.com/googleapis/java-pubsub/commit/687a855580a9c8fe7f0d4a8952cb3ca46ff6f736)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.27 ([#1731](https://github.com/googleapis/java-pubsub/issues/1731)) ([403b7e7](https://github.com/googleapis/java-pubsub/commit/403b7e72c275464a67f6998bb975d95026a8480d)) + +## [1.125.1](https://github.com/googleapis/java-pubsub/compare/v1.125.0...v1.125.1) (2023-09-14) + + +### Dependencies + +* Update actions/checkout action to v4 - abandoned ([#1719](https://github.com/googleapis/java-pubsub/issues/1719)) ([b82f15a](https://github.com/googleapis/java-pubsub/commit/b82f15a099f3366620f5e22764b043911ebd88d1)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.32.0 ([#1725](https://github.com/googleapis/java-pubsub/issues/1725)) ([f40f09a](https://github.com/googleapis/java-pubsub/commit/f40f09a185c035cc03b6be6ec62f880da9f7b377)) + +## [1.125.0](https://github.com/googleapis/java-pubsub/compare/v1.124.2...v1.125.0) (2023-09-12) + + +### Features + +* Receipt modack ([#1540](https://github.com/googleapis/java-pubsub/issues/1540)) ([74d8da9](https://github.com/googleapis/java-pubsub/commit/74d8da97c42b672e3f9f26b9a535d6bac948a402)) + + +### Bug Fixes + +* Make retry policy back off more aggressively for RPCs that retry RESOURCE_EXHAUSTD ([#1704](https://github.com/googleapis/java-pubsub/issues/1704)) ([f61e7e0](https://github.com/googleapis/java-pubsub/commit/f61e7e0e2895a90e30ecf4dcbfa8c70022947d9e)) + + +### Dependencies + +* Update actions/checkout action to v4 ([#1712](https://github.com/googleapis/java-pubsub/issues/1712)) ([404c492](https://github.com/googleapis/java-pubsub/commit/404c492823306c1448c62383b9ea88cf9e43b970)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.31.2 ([#1713](https://github.com/googleapis/java-pubsub/issues/1713)) ([32cb43c](https://github.com/googleapis/java-pubsub/commit/32cb43cce40f7a39602eb7d9b39a88eb229fc4ef)) +* Update dependency com.google.cloud:google-cloud-core to v2.23.0 ([#1717](https://github.com/googleapis/java-pubsub/issues/1717)) ([929f778](https://github.com/googleapis/java-pubsub/commit/929f778e341aefe61206e55de828bf5a86e4efd3)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.15.0 ([#1718](https://github.com/googleapis/java-pubsub/issues/1718)) ([0eeaa19](https://github.com/googleapis/java-pubsub/commit/0eeaa19a640513e80d595ca7c4016e26fc30871b)) +* Update dependency com.google.protobuf:protobuf-java-util to v3.24.3 ([#1698](https://github.com/googleapis/java-pubsub/issues/1698)) ([1157fbf](https://github.com/googleapis/java-pubsub/commit/1157fbff92204eae55bb24ad803f0b8e1336ac10)) +* Update dependency org.easymock:easymock to v5.2.0 ([#1711](https://github.com/googleapis/java-pubsub/issues/1711)) ([313f6dd](https://github.com/googleapis/java-pubsub/commit/313f6dd8b82fbc57df066615e285325969b6d2e4)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.25 ([#1709](https://github.com/googleapis/java-pubsub/issues/1709)) ([1cc8a53](https://github.com/googleapis/java-pubsub/commit/1cc8a53a416acdd5f9cd4fc598f2f5f182a2ad44)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.26 ([#1715](https://github.com/googleapis/java-pubsub/issues/1715)) ([f2cc75f](https://github.com/googleapis/java-pubsub/commit/f2cc75f960521e8be50cf354e00024d66fb8f7fb)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.25 ([#1710](https://github.com/googleapis/java-pubsub/issues/1710)) ([9764c3f](https://github.com/googleapis/java-pubsub/commit/9764c3f740cd726ad09cef82039561bd145fbe0c)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.26 ([#1716](https://github.com/googleapis/java-pubsub/issues/1716)) ([6c9e949](https://github.com/googleapis/java-pubsub/commit/6c9e9493ec7aeaa0711ad2155fa6a549937284df)) + +## [1.124.2](https://github.com/googleapis/java-pubsub/compare/v1.124.1...v1.124.2) (2023-08-15) + + +### Bug Fixes + +* Update Publish retry backoff settings ([#1686](https://github.com/googleapis/java-pubsub/issues/1686)) ([63a74d9](https://github.com/googleapis/java-pubsub/commit/63a74d98fdee56a98819d135a676a67fcc24961a)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.31.1 ([#1697](https://github.com/googleapis/java-pubsub/issues/1697)) ([9e90790](https://github.com/googleapis/java-pubsub/commit/9e907901e0f5f78adfffb3e61974e9f8fd756f96)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.24 ([#1695](https://github.com/googleapis/java-pubsub/issues/1695)) ([ec64036](https://github.com/googleapis/java-pubsub/commit/ec640361a471111001f22667fa7e38123b731025)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.24 ([#1696](https://github.com/googleapis/java-pubsub/issues/1696)) ([cc9ae19](https://github.com/googleapis/java-pubsub/commit/cc9ae19865c0ece3789a8c2fa22afb5fbd306dc9)) + +## [1.124.1](https://github.com/googleapis/java-pubsub/compare/v1.124.0...v1.124.1) (2023-08-03) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.22.0 ([#1687](https://github.com/googleapis/java-pubsub/issues/1687)) ([220f318](https://github.com/googleapis/java-pubsub/commit/220f3181562a848cd786cc0126e8e3ad382787c7)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.14.0 ([#1688](https://github.com/googleapis/java-pubsub/issues/1688)) ([0ded9f1](https://github.com/googleapis/java-pubsub/commit/0ded9f172af637db5d4302b146a24ecdd5b1bde2)) + +## [1.124.0](https://github.com/googleapis/java-pubsub/compare/v1.123.20...v1.124.0) (2023-07-27) + + +### Features + +* Setup 1.123.x lts branch ([#1676](https://github.com/googleapis/java-pubsub/issues/1676)) ([a60b887](https://github.com/googleapis/java-pubsub/commit/a60b88772d69d367f90bbe61bc4e157338193b0f)) + + +### Documentation + +* Clarified where ordering_key will be written if write_metadata is set ([#1675](https://github.com/googleapis/java-pubsub/issues/1675)) ([462746c](https://github.com/googleapis/java-pubsub/commit/462746cfbf9b712118b67349f2f4f4cebf45932a)) + +## [1.123.20](https://github.com/googleapis/java-pubsub/compare/v1.123.19...v1.123.20) (2023-07-25) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.31.0 ([#1671](https://github.com/googleapis/java-pubsub/issues/1671)) ([c51d396](https://github.com/googleapis/java-pubsub/commit/c51d39688464c51ffdb046368b4f8e926360d72e)) + +## [1.123.19](https://github.com/googleapis/java-pubsub/compare/v1.123.18...v1.123.19) (2023-07-25) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.30.1 ([#1656](https://github.com/googleapis/java-pubsub/issues/1656)) ([4fe4bc4](https://github.com/googleapis/java-pubsub/commit/4fe4bc49d82753e3e185f0a2c4694d80e48808f7)) +* Update dependency com.google.cloud:google-cloud-core to v2.21.1 ([#1662](https://github.com/googleapis/java-pubsub/issues/1662)) ([e10292c](https://github.com/googleapis/java-pubsub/commit/e10292c16f24870a91584f716545ff210302a7bc)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.13.1 ([#1663](https://github.com/googleapis/java-pubsub/issues/1663)) ([50f4ff1](https://github.com/googleapis/java-pubsub/commit/50f4ff10140699a02d1ec550b05ff6d1aa39c762)) +* Update dependency org.junit.vintage:junit-vintage-engine to v5.10.0 ([#1666](https://github.com/googleapis/java-pubsub/issues/1666)) ([d8712a3](https://github.com/googleapis/java-pubsub/commit/d8712a31459b8f9497dff7a866c8a8795ca60af9)) +* Update dependency org.xerial.snappy:snappy-java to v1.1.10.3 ([#1665](https://github.com/googleapis/java-pubsub/issues/1665)) ([ad1c515](https://github.com/googleapis/java-pubsub/commit/ad1c5157eadc4bf2d43b7dc332ac4150d732912d)) + +## [1.123.18](https://github.com/googleapis/java-pubsub/compare/v1.123.17...v1.123.18) (2023-07-17) + + +### Documentation + +* Tightened requirements on cloud storage subscription filename suffixes ([#1639](https://github.com/googleapis/java-pubsub/issues/1639)) ([34a182a](https://github.com/googleapis/java-pubsub/commit/34a182a1655c843cd728850b278ba2e9ce9a5680)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.21.0 ([#1650](https://github.com/googleapis/java-pubsub/issues/1650)) ([69879d4](https://github.com/googleapis/java-pubsub/commit/69879d4c9d7a220f9c5a38b144d49e71ad3b94d0)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.13.0 ([#1651](https://github.com/googleapis/java-pubsub/issues/1651)) ([83fdbe2](https://github.com/googleapis/java-pubsub/commit/83fdbe2435d8fa03b5648272a794874ff910fcb6)) +* Update dependency com.google.protobuf:protobuf-java-util to v3.23.4 ([#1649](https://github.com/googleapis/java-pubsub/issues/1649)) ([9f9c5ca](https://github.com/googleapis/java-pubsub/commit/9f9c5ca2abddde274c79cf36bf2aea91b7b8b455)) +* Update dependency org.apache.avro:avro to v1.11.2 ([#1646](https://github.com/googleapis/java-pubsub/issues/1646)) ([5859fe4](https://github.com/googleapis/java-pubsub/commit/5859fe4c6540fa577942f38e117798d3c3cdc498)) +* Update dependency org.xerial.snappy:snappy-java to v1.1.10.2 ([#1654](https://github.com/googleapis/java-pubsub/issues/1654)) ([05445f0](https://github.com/googleapis/java-pubsub/commit/05445f0ccf1cd78a604ec267d7a146cdd1770c59)) + +## [1.123.17](https://github.com/googleapis/java-pubsub/compare/v1.123.16...v1.123.17) (2023-06-26) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.29.0 ([#1633](https://github.com/googleapis/java-pubsub/issues/1633)) ([20096e7](https://github.com/googleapis/java-pubsub/commit/20096e7b64f9b62051f51ad28aa49b95f78b3e6b)) + +## [1.123.16](https://github.com/googleapis/java-pubsub/compare/v1.123.15...v1.123.16) (2023-06-26) + + +### Dependencies + +* Update dependency com.google.protobuf:protobuf-java-util to v3.23.3 ([#1634](https://github.com/googleapis/java-pubsub/issues/1634)) ([2481c4b](https://github.com/googleapis/java-pubsub/commit/2481c4b8799bbe78542b4a8dd6c2484be08f30a1)) + +## [1.123.15](https://github.com/googleapis/java-pubsub/compare/v1.123.14...v1.123.15) (2023-06-22) + + +### Bug Fixes + +* Fixing the shutdown logic for streaming subscriber connection ([#1613](https://github.com/googleapis/java-pubsub/issues/1613)) ([09aff9c](https://github.com/googleapis/java-pubsub/commit/09aff9c59bab646c0bae857f3bca9dc8e9eeebd1)) + + +### Documentation + +* Adding pubsub emulator example ([#1602](https://github.com/googleapis/java-pubsub/issues/1602)) ([8ded110](https://github.com/googleapis/java-pubsub/commit/8ded11041c63f1f75f0612c081ba6b476b6b89b8)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.27.0 ([#1599](https://github.com/googleapis/java-pubsub/issues/1599)) ([3b4b7d0](https://github.com/googleapis/java-pubsub/commit/3b4b7d0522d8eb136800dd546acb8880b8b28e9e)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.27.1 ([#1614](https://github.com/googleapis/java-pubsub/issues/1614)) ([a974e08](https://github.com/googleapis/java-pubsub/commit/a974e08b45d49ca275c19a4e94e66b4b831a0fad)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.28.0 ([#1626](https://github.com/googleapis/java-pubsub/issues/1626)) ([a4a02b4](https://github.com/googleapis/java-pubsub/commit/a4a02b4fd0a3827c3e321c56223731f0a828e8c5)) +* Update dependency com.google.cloud:google-cloud-core to v2.20.0 ([#1629](https://github.com/googleapis/java-pubsub/issues/1629)) ([5f88f4f](https://github.com/googleapis/java-pubsub/commit/5f88f4f5f6fd1c8f2c0e7523b6919a6a477d785c)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.12.0 ([#1630](https://github.com/googleapis/java-pubsub/issues/1630)) ([b444a9d](https://github.com/googleapis/java-pubsub/commit/b444a9d825300519681a205a833ae9d816e89cf2)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.23 ([#1623](https://github.com/googleapis/java-pubsub/issues/1623)) ([b5f8e49](https://github.com/googleapis/java-pubsub/commit/b5f8e4961dd473c98641d8b78c958db1e0e8d01e)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.23 ([#1624](https://github.com/googleapis/java-pubsub/issues/1624)) ([68ada24](https://github.com/googleapis/java-pubsub/commit/68ada243897a763e04d4858ad052050e09326371)) +* Update dependency org.xerial.snappy:snappy-java to v1.1.10.1 - abandoned ([#1616](https://github.com/googleapis/java-pubsub/issues/1616)) ([48ec282](https://github.com/googleapis/java-pubsub/commit/48ec282753f8068df135cee55febe5dba97be1b5)) +* Update dependency org.xerial.snappy:snappy-java to v1.1.10.1 [security] ([#1620](https://github.com/googleapis/java-pubsub/issues/1620)) ([a1cb267](https://github.com/googleapis/java-pubsub/commit/a1cb2673f5e6556472a87a0fb2acbc3e0ddfd933)) + +## [1.123.14](https://github.com/googleapis/java-pubsub/compare/v1.123.13...v1.123.14) (2023-06-12) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.19.0 ([#1604](https://github.com/googleapis/java-pubsub/issues/1604)) ([7ac609e](https://github.com/googleapis/java-pubsub/commit/7ac609e44c20db73460fe39919439c3a2b597454)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.11.0 ([#1605](https://github.com/googleapis/java-pubsub/issues/1605)) ([077ac04](https://github.com/googleapis/java-pubsub/commit/077ac04214be23f6693734c157925a5607ada869)) + +## [1.123.13](https://github.com/googleapis/java-pubsub/compare/v1.123.12...v1.123.13) (2023-05-30) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.26.0 ([#1582](https://github.com/googleapis/java-pubsub/issues/1582)) ([a7c09b7](https://github.com/googleapis/java-pubsub/commit/a7c09b763845fc78e5382f79365467d4bdb8a24d)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.26.1 ([#1585](https://github.com/googleapis/java-pubsub/issues/1585)) ([e2c37bf](https://github.com/googleapis/java-pubsub/commit/e2c37bfcee74a6f95cc3c15cf1f9d3d1602b77ff)) +* Update dependency com.google.cloud:google-cloud-core to v2.18.1 ([#1591](https://github.com/googleapis/java-pubsub/issues/1591)) ([1637f0d](https://github.com/googleapis/java-pubsub/commit/1637f0db2a89b20d28a6812b6abb4f36bfd46f80)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.10.0 ([#1592](https://github.com/googleapis/java-pubsub/issues/1592)) ([a6be7b7](https://github.com/googleapis/java-pubsub/commit/a6be7b7870ba776fd9b39a0b16d45ba51fcc8ad6)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.10.1 ([#1594](https://github.com/googleapis/java-pubsub/issues/1594)) ([52263ce](https://github.com/googleapis/java-pubsub/commit/52263ce63d4cbda649121e465f4bdc78bbfa8e44)) +* Update dependency org.xerial.snappy:snappy-java to v1.1.10.0 ([#1590](https://github.com/googleapis/java-pubsub/issues/1590)) ([338f31f](https://github.com/googleapis/java-pubsub/commit/338f31f96deb09fe93e1306986a7887d285a9d06)) + +## [1.123.12](https://github.com/googleapis/java-pubsub/compare/v1.123.11...v1.123.12) (2023-05-12) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.25.0 ([#1566](https://github.com/googleapis/java-pubsub/issues/1566)) ([7e63280](https://github.com/googleapis/java-pubsub/commit/7e632806b83b5c849ea50fdf3085b2db7bdbeff3)) +* Update dependency com.google.cloud:google-cloud-core to v2.17.0 ([#1574](https://github.com/googleapis/java-pubsub/issues/1574)) ([9c80f14](https://github.com/googleapis/java-pubsub/commit/9c80f1493a5149a76b55d9f1d178684e1b5dde80)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.9.0 ([#1576](https://github.com/googleapis/java-pubsub/issues/1576)) ([03a027f](https://github.com/googleapis/java-pubsub/commit/03a027fb2619444511d25ef7100c7ac850c1dca1)) +* Update dependency org.easymock:easymock to v5.1.0 ([#1448](https://github.com/googleapis/java-pubsub/issues/1448)) ([5ad86fe](https://github.com/googleapis/java-pubsub/commit/5ad86fe783a2fcdfe6102a9916c65b1c4139b3da)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.22 ([#1570](https://github.com/googleapis/java-pubsub/issues/1570)) ([bbe9a8b](https://github.com/googleapis/java-pubsub/commit/bbe9a8b6594a0e6b777ceb3b97e8d625446e34e4)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.22 ([#1571](https://github.com/googleapis/java-pubsub/issues/1571)) ([e7b62d3](https://github.com/googleapis/java-pubsub/commit/e7b62d35aa3c73f55a474d406da094ded02d07f1)) +* Update dependency org.xerial.snappy:snappy-java to v1.1.9.0 - abandoned ([#1471](https://github.com/googleapis/java-pubsub/issues/1471)) ([1620e00](https://github.com/googleapis/java-pubsub/commit/1620e00cf1632699fa37a78059dfb86e707dbccc)) +* Update dependency org.xerial.snappy:snappy-java to v1.1.9.1 ([#1572](https://github.com/googleapis/java-pubsub/issues/1572)) ([1ec2fec](https://github.com/googleapis/java-pubsub/commit/1ec2feca66ab8b29edf8f9dd0d4b8df8261e709a)) + +## [1.123.11](https://github.com/googleapis/java-pubsub/compare/v1.123.10...v1.123.11) (2023-04-27) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.15.0 ([#1558](https://github.com/googleapis/java-pubsub/issues/1558)) ([acf0a4f](https://github.com/googleapis/java-pubsub/commit/acf0a4f1b893b5be19167e87b958e722e53b2aee)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.8.0 ([#1561](https://github.com/googleapis/java-pubsub/issues/1561)) ([13bfd09](https://github.com/googleapis/java-pubsub/commit/13bfd09a9ba81e725a61f2b36c5d38fabcd8df56)) +* Update dependency org.junit.vintage:junit-vintage-engine to v5.9.3 ([#1563](https://github.com/googleapis/java-pubsub/issues/1563)) ([c2329d2](https://github.com/googleapis/java-pubsub/commit/c2329d289d3447e72904d20e9c89065b59d7e6de)) + +## [1.123.10](https://github.com/googleapis/java-pubsub/compare/v1.123.9...v1.123.10) (2023-04-17) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.24.5 ([#1555](https://github.com/googleapis/java-pubsub/issues/1555)) ([7d81b06](https://github.com/googleapis/java-pubsub/commit/7d81b063465f23b1779c2137bc1706dafdaea042)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.7.0 ([#1551](https://github.com/googleapis/java-pubsub/issues/1551)) ([bccf566](https://github.com/googleapis/java-pubsub/commit/bccf566c6072aa34ebad451880835625217f9fe4)) + +## [1.123.9](https://github.com/googleapis/java-pubsub/compare/v1.123.8...v1.123.9) (2023-04-13) + + +### Dependencies + +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.21 ([#1547](https://github.com/googleapis/java-pubsub/issues/1547)) ([e78f210](https://github.com/googleapis/java-pubsub/commit/e78f210c9b72b0b9fb561ef8f41eb1aa2d8be4d7)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.21 ([#1548](https://github.com/googleapis/java-pubsub/issues/1548)) ([42957f8](https://github.com/googleapis/java-pubsub/commit/42957f8c93a07c7db5e3f007644b9508ef9dfe73)) + +## [1.123.8](https://github.com/googleapis/java-pubsub/compare/v1.123.7...v1.123.8) (2023-04-04) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.6.0 ([#1541](https://github.com/googleapis/java-pubsub/issues/1541)) ([828db7c](https://github.com/googleapis/java-pubsub/commit/828db7cfde91284db019b85552d64ca92e8ebe07)) + +## [1.123.7](https://github.com/googleapis/java-pubsub/compare/v1.123.6...v1.123.7) (2023-03-21) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.5.0 ([#1532](https://github.com/googleapis/java-pubsub/issues/1532)) ([d63fba7](https://github.com/googleapis/java-pubsub/commit/d63fba73d5ea445144f625f7b67622351694c818)) + +## [1.123.6](https://github.com/googleapis/java-pubsub/compare/v1.123.5...v1.123.6) (2023-03-14) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.23.2 ([#1512](https://github.com/googleapis/java-pubsub/issues/1512)) ([60e889e](https://github.com/googleapis/java-pubsub/commit/60e889e587511cc948af440be7733dc4af531dd1)) + +## [1.123.5](https://github.com/googleapis/java-pubsub/compare/v1.123.4...v1.123.5) (2023-03-03) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.12.0 ([#1509](https://github.com/googleapis/java-pubsub/issues/1509)) ([6f70d8a](https://github.com/googleapis/java-pubsub/commit/6f70d8a96577ac93647f4d13adc6b31889efeddf)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.4.0 ([#1510](https://github.com/googleapis/java-pubsub/issues/1510)) ([0d0ece7](https://github.com/googleapis/java-pubsub/commit/0d0ece70f1527932abb04d9719de68a1367c5881)) + +## [1.123.4](https://github.com/googleapis/java-pubsub/compare/v1.123.3...v1.123.4) (2023-02-22) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.23.0 ([#1496](https://github.com/googleapis/java-pubsub/issues/1496)) ([713d727](https://github.com/googleapis/java-pubsub/commit/713d727db447f02e3c6cc7dfbb656fcebba54121)) + +## [1.123.3](https://github.com/googleapis/java-pubsub/compare/v1.123.2...v1.123.3) (2023-02-22) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.21.0 ([#1470](https://github.com/googleapis/java-pubsub/issues/1470)) ([105c293](https://github.com/googleapis/java-pubsub/commit/105c2933d3f71389e2629e4871767199fe53f7f4)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.22.0 ([#1489](https://github.com/googleapis/java-pubsub/issues/1489)) ([665436c](https://github.com/googleapis/java-pubsub/commit/665436cb9a0900fd62a6197e73baecf13de21597)) +* Update dependency com.google.cloud:google-cloud-core to v2.10.0 ([#1464](https://github.com/googleapis/java-pubsub/issues/1464)) ([8cab4e2](https://github.com/googleapis/java-pubsub/commit/8cab4e2f0b8455a30aa71a7915a836730ee7f059)) +* Update dependency com.google.cloud:google-cloud-core to v2.11.0 ([#1490](https://github.com/googleapis/java-pubsub/issues/1490)) ([c42474a](https://github.com/googleapis/java-pubsub/commit/c42474a8c1a98e7533edef47acf9c7210b99a56e)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.3.0 ([#1491](https://github.com/googleapis/java-pubsub/issues/1491)) ([e5e3227](https://github.com/googleapis/java-pubsub/commit/e5e32273a515cf9ce22ffffb58a8f7a252556526)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.20 ([#1484](https://github.com/googleapis/java-pubsub/issues/1484)) ([8206d12](https://github.com/googleapis/java-pubsub/commit/8206d129d819617a3dd8ebdab531d3fc7b7289f1)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.20 ([#1485](https://github.com/googleapis/java-pubsub/issues/1485)) ([d0e9b2a](https://github.com/googleapis/java-pubsub/commit/d0e9b2a8197f91029ae26fdec7e88f7ca38dab79)) + +## [1.123.2](https://github.com/googleapis/java-pubsub/compare/v1.123.1...v1.123.2) (2023-02-06) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.2.0 ([#1474](https://github.com/googleapis/java-pubsub/issues/1474)) ([5fccae4](https://github.com/googleapis/java-pubsub/commit/5fccae49f912a24c14d144fdcc9617d5a5ae110a)) + +## [1.123.1](https://github.com/googleapis/java-pubsub/compare/v1.123.0...v1.123.1) (2023-01-20) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.20.2 ([#1441](https://github.com/googleapis/java-pubsub/issues/1441)) ([a675556](https://github.com/googleapis/java-pubsub/commit/a67555664a070eb03b6f8bb7115e32e2b9d9a11a)) +* Update dependency com.google.cloud:google-cloud-core to v2.9.2 ([#1449](https://github.com/googleapis/java-pubsub/issues/1449)) ([e68c9e0](https://github.com/googleapis/java-pubsub/commit/e68c9e0e0808c441e04049154fb0c44f42fed562)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.1.2 ([#1463](https://github.com/googleapis/java-pubsub/issues/1463)) ([e9e6649](https://github.com/googleapis/java-pubsub/commit/e9e664951b027979969e983c7e525aff6e4ddc68)) +* Update dependency com.google.protobuf:protobuf-java-util to v3.21.12 ([#1437](https://github.com/googleapis/java-pubsub/issues/1437)) ([88f7a99](https://github.com/googleapis/java-pubsub/commit/88f7a991c43e6358ccc3ad248473400a2a0e50e8)) +* Update dependency org.junit.vintage:junit-vintage-engine to v5.9.2 ([#1451](https://github.com/googleapis/java-pubsub/issues/1451)) ([054572a](https://github.com/googleapis/java-pubsub/commit/054572a86ecc2cedcdbcf3eae8c9fb07caed504a)) + +## [1.123.0](https://github.com/googleapis/java-pubsub/compare/v1.122.2...v1.123.0) (2023-01-10) + + +### Features + +* Add schema evolution methods and fields ([#1384](https://github.com/googleapis/java-pubsub/issues/1384)) ([746a6e0](https://github.com/googleapis/java-pubsub/commit/746a6e040eb94d73bfbaece051d08c60c9885326)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.1.1 ([#1450](https://github.com/googleapis/java-pubsub/issues/1450)) ([2dcbcad](https://github.com/googleapis/java-pubsub/commit/2dcbcadfa56282733ab7998ec9cf360f0a71eaca)) + +## [1.122.2](https://github.com/googleapis/java-pubsub/compare/v1.122.1...v1.122.2) (2022-12-15) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.9.0 ([#1435](https://github.com/googleapis/java-pubsub/issues/1435)) ([786c493](https://github.com/googleapis/java-pubsub/commit/786c49303bc196e548b00ef0cf39d766e8fd71a8)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.1.0 ([#1436](https://github.com/googleapis/java-pubsub/issues/1436)) ([a40337b](https://github.com/googleapis/java-pubsub/commit/a40337b493454d20a12f70b7817de7b0f2584b84)) + +## [1.122.1](https://github.com/googleapis/java-pubsub/compare/v1.122.0...v1.122.1) (2022-12-02) + + +### Dependencies + +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.19 ([#1428](https://github.com/googleapis/java-pubsub/issues/1428)) ([bfa9c3d](https://github.com/googleapis/java-pubsub/commit/bfa9c3d5f8f7b0d3103fe5d398ed3f753e1bedca)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.19 ([#1429](https://github.com/googleapis/java-pubsub/issues/1429)) ([d3c44e7](https://github.com/googleapis/java-pubsub/commit/d3c44e77532068e53d7d64dd182295ab6b9644bd)) + +## [1.122.0](https://github.com/googleapis/java-pubsub/compare/v1.121.1...v1.122.0) (2022-12-01) + + +### Features + +* Next release from main branch is 1.122.0 ([#1409](https://github.com/googleapis/java-pubsub/issues/1409)) ([dad2c82](https://github.com/googleapis/java-pubsub/commit/dad2c82cc22ed40def105514a4bc8446375dc70e)) + + +### Dependencies + +* Update dependency com.google.protobuf:protobuf-java-util to v3.21.10 ([#1425](https://github.com/googleapis/java-pubsub/issues/1425)) ([39c22cb](https://github.com/googleapis/java-pubsub/commit/39c22cb99dadd1dea874e0a57cf2c9fb0dd67328)) + +## [1.121.1](https://github.com/googleapis/java-pubsub/compare/v1.121.0...v1.121.1) (2022-11-21) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.18.0 ([#1375](https://github.com/googleapis/java-pubsub/issues/1375)) ([b6ada4e](https://github.com/googleapis/java-pubsub/commit/b6ada4e06397d785b6747bd989fe6cd9d6e76801)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.19.1 ([#1416](https://github.com/googleapis/java-pubsub/issues/1416)) ([e140a49](https://github.com/googleapis/java-pubsub/commit/e140a4975a5bff4c73254784409f4f3dda27db09)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.18 ([#1413](https://github.com/googleapis/java-pubsub/issues/1413)) ([b3fb828](https://github.com/googleapis/java-pubsub/commit/b3fb828480f491e4275adf0b6367aeb51ac0569e)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.18 ([#1414](https://github.com/googleapis/java-pubsub/issues/1414)) ([74d2dc3](https://github.com/googleapis/java-pubsub/commit/74d2dc3329f6d4e33c977fa1e73df1aca278b9b3)) + +## [1.121.0](https://github.com/googleapis/java-pubsub/compare/v1.120.25...v1.121.0) (2022-11-16) + + +### Features + +* Next release from main branch is 1.121.0 ([#1406](https://github.com/googleapis/java-pubsub/issues/1406)) ([1b25b0e](https://github.com/googleapis/java-pubsub/commit/1b25b0e01a7b1068dbebaa5d6516419c11e31b96)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.8.28 ([#1399](https://github.com/googleapis/java-pubsub/issues/1399)) ([ec1cae8](https://github.com/googleapis/java-pubsub/commit/ec1cae87596921078478ed96a22b9ca5b138f729)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.6 ([#1395](https://github.com/googleapis/java-pubsub/issues/1395)) ([a3c32ea](https://github.com/googleapis/java-pubsub/commit/a3c32eadb8e6d4ce730f2f2d1f8960ccd6269ecb)) + +## [1.120.25](https://github.com/googleapis/java-pubsub/compare/v1.120.24...v1.120.25) (2022-11-09) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.8.27 ([#1391](https://github.com/googleapis/java-pubsub/issues/1391)) ([dd9f1c3](https://github.com/googleapis/java-pubsub/commit/dd9f1c366c9aa5f78dccc01a4dc3e2ee42290be3)) +* Update dependency com.google.protobuf:protobuf-java-util to v3.21.9 ([#1370](https://github.com/googleapis/java-pubsub/issues/1370)) ([8b753a4](https://github.com/googleapis/java-pubsub/commit/8b753a452a3f778402b61565d38a9a2ce90f084a)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.17 ([#1389](https://github.com/googleapis/java-pubsub/issues/1389)) ([6def6bb](https://github.com/googleapis/java-pubsub/commit/6def6bbff8c31af6a008fee89654a13b0db1550f)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.17 ([#1388](https://github.com/googleapis/java-pubsub/issues/1388)) ([0924923](https://github.com/googleapis/java-pubsub/commit/0924923039e30716d66ad8ca519fbdae88946807)) + +## [1.120.24](https://github.com/googleapis/java-pubsub/compare/v1.120.23...v1.120.24) (2022-10-28) + + +### Bug Fixes + +* Adding an explicit check to prevent empty publishes ([#1376](https://github.com/googleapis/java-pubsub/issues/1376)) ([689d7da](https://github.com/googleapis/java-pubsub/commit/689d7da1fee7c7def401ba114feef3607cd12cf5)) + +## [1.120.23](https://github.com/googleapis/java-pubsub/compare/v1.120.22...v1.120.23) (2022-10-27) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.8.22 ([#1361](https://github.com/googleapis/java-pubsub/issues/1361)) ([0355868](https://github.com/googleapis/java-pubsub/commit/03558680b9fb6493c2c3f1f4b65d8a35668b440f)) +* Update dependency com.google.cloud:google-cloud-core to v2.8.24 ([#1368](https://github.com/googleapis/java-pubsub/issues/1368)) ([9776aad](https://github.com/googleapis/java-pubsub/commit/9776aad7391544b1e0bd2fbe8576180206943bef)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.5 ([#1362](https://github.com/googleapis/java-pubsub/issues/1362)) ([d32c591](https://github.com/googleapis/java-pubsub/commit/d32c591af87b66d8ca9df599ad18183aae31bf15)) +* Update dependency com.google.protobuf:protobuf-java-util to v3.21.8 ([#1356](https://github.com/googleapis/java-pubsub/issues/1356)) ([dc1e0ca](https://github.com/googleapis/java-pubsub/commit/dc1e0ca44c3668d7c9e780d50261dd81ce1d4ee9)) +* Update dependency org.easymock:easymock to v5.0.1 ([#1365](https://github.com/googleapis/java-pubsub/issues/1365)) ([2a807a5](https://github.com/googleapis/java-pubsub/commit/2a807a5b319ed3821da7dac84e4cb4923d07fed7)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.16 ([#1358](https://github.com/googleapis/java-pubsub/issues/1358)) ([226e105](https://github.com/googleapis/java-pubsub/commit/226e1050b0b643cea46bad7cf77d2a9e8857fb02)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.16 ([#1359](https://github.com/googleapis/java-pubsub/issues/1359)) ([3f10227](https://github.com/googleapis/java-pubsub/commit/3f10227cfd7d9029e92e7575771544c7e4b4dd67)) + +## [1.120.22](https://github.com/googleapis/java-pubsub/compare/v1.120.21...v1.120.22) (2022-10-18) + + +### Dependencies + +* Update dependency org.easymock:easymock to v5 ([#1350](https://github.com/googleapis/java-pubsub/issues/1350)) ([1e88543](https://github.com/googleapis/java-pubsub/commit/1e88543393ac16a79288c80d3561f7e5c50f11af)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.15 ([#1351](https://github.com/googleapis/java-pubsub/issues/1351)) ([2af7579](https://github.com/googleapis/java-pubsub/commit/2af757971fd54855936ad95e0cd3f6ab13d50edc)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.15 ([#1352](https://github.com/googleapis/java-pubsub/issues/1352)) ([379e39b](https://github.com/googleapis/java-pubsub/commit/379e39bdb6ed3cd50c5f034fb5ecd40905b43bda)) + +## [1.120.21](https://github.com/googleapis/java-pubsub/compare/v1.120.20...v1.120.21) (2022-10-14) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.17.0 ([#1334](https://github.com/googleapis/java-pubsub/issues/1334)) ([d2edb44](https://github.com/googleapis/java-pubsub/commit/d2edb4457a5a5fdee006b34b1de265b7e73a26e1)) +* Update dependency com.google.cloud:google-cloud-bigquery to v2.17.1 ([#1340](https://github.com/googleapis/java-pubsub/issues/1340)) ([2b9c2e8](https://github.com/googleapis/java-pubsub/commit/2b9c2e8af4f83dd8d51272a0539c7ade05041a68)) +* Update dependency com.google.cloud:google-cloud-core to v2.8.21 ([#1341](https://github.com/googleapis/java-pubsub/issues/1341)) ([d219a56](https://github.com/googleapis/java-pubsub/commit/d219a56de3c5a3e5455c3ca063bf0e363a4c476a)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.14 ([#1296](https://github.com/googleapis/java-pubsub/issues/1296)) ([00f61aa](https://github.com/googleapis/java-pubsub/commit/00f61aab905300986945bb67a8737779c3f72da6)) + +## [1.120.20](https://github.com/googleapis/java-pubsub/compare/v1.120.19...v1.120.20) (2022-10-05) + + +### Bug Fixes + +* update protobuf to v3.21.7 ([7c3ea60](https://github.com/googleapis/java-pubsub/commit/7c3ea6016e4288beab722a0c53c5ea132794e2bd)) + +## [1.120.19](https://github.com/googleapis/java-pubsub/compare/v1.120.18...v1.120.19) (2022-10-03) + + +### Dependencies + +* Update dependency cachetools to v5 ([#1324](https://github.com/googleapis/java-pubsub/issues/1324)) ([72b6d5f](https://github.com/googleapis/java-pubsub/commit/72b6d5f7ce6b464c1f1653699178e989c7eb6a75)) +* Update dependency certifi to v2022.9.24 ([#1303](https://github.com/googleapis/java-pubsub/issues/1303)) ([dc05237](https://github.com/googleapis/java-pubsub/commit/dc052371a1a83a194cb0098f93a8e8dd57d8e5d4)) +* Update dependency charset-normalizer to v2.1.1 ([#1308](https://github.com/googleapis/java-pubsub/issues/1308)) ([fedf2e1](https://github.com/googleapis/java-pubsub/commit/fedf2e1f98bf77de6d6cac18e745819e8250df57)) +* Update dependency click to v8.1.3 ([#1309](https://github.com/googleapis/java-pubsub/issues/1309)) ([0ddcb5b](https://github.com/googleapis/java-pubsub/commit/0ddcb5b324ecc4e3a8cc98bc2ef0d210061a79d5)) +* Update dependency com.google.cloud:google-cloud-core to v2.8.15 ([#1299](https://github.com/googleapis/java-pubsub/issues/1299)) ([11f220c](https://github.com/googleapis/java-pubsub/commit/11f220ca32bf82c87746837e12ae878ee9578704)) +* Update dependency com.google.cloud:google-cloud-core to v2.8.16 ([#1301](https://github.com/googleapis/java-pubsub/issues/1301)) ([186c794](https://github.com/googleapis/java-pubsub/commit/186c79497057847aa577b47d169e3535274b0a2d)) +* Update dependency com.google.cloud:google-cloud-core to v2.8.17 ([#1326](https://github.com/googleapis/java-pubsub/issues/1326)) ([361a2f2](https://github.com/googleapis/java-pubsub/commit/361a2f2ae44098d280c1244479954638d4321a69)) +* Update dependency com.google.cloud:google-cloud-core to v2.8.18 ([#1328](https://github.com/googleapis/java-pubsub/issues/1328)) ([ae23532](https://github.com/googleapis/java-pubsub/commit/ae23532092c80e3b4abe8e1b51f2ef67bb991428)) +* Update dependency com.google.cloud:google-cloud-core to v2.8.20 ([#1329](https://github.com/googleapis/java-pubsub/issues/1329)) ([c37b88e](https://github.com/googleapis/java-pubsub/commit/c37b88e209dd1d58035385676d7c1dfca0da2c4e)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.4 ([#1330](https://github.com/googleapis/java-pubsub/issues/1330)) ([0f6cc6c](https://github.com/googleapis/java-pubsub/commit/0f6cc6c01e6afeb717487e7435575d243bd0203d)) +* Update dependency com.google.protobuf:protobuf-java-util to v3.21.7 ([#1327](https://github.com/googleapis/java-pubsub/issues/1327)) ([6355eb0](https://github.com/googleapis/java-pubsub/commit/6355eb0ed1fa94a36fbb0169e4b6dc7faed165ff)) +* Update dependency gcp-releasetool to v1.8.8 ([#1304](https://github.com/googleapis/java-pubsub/issues/1304)) ([1c7c6eb](https://github.com/googleapis/java-pubsub/commit/1c7c6eb10a184919d36f7738f4594cd7aff9f87b)) +* Update dependency google-api-core to v2.10.1 ([#1310](https://github.com/googleapis/java-pubsub/issues/1310)) ([14725f2](https://github.com/googleapis/java-pubsub/commit/14725f248082c4397b0058d25984a61a9bf2c5c9)) +* Update dependency google-auth to v2.11.1 ([#1305](https://github.com/googleapis/java-pubsub/issues/1305)) ([a6954d1](https://github.com/googleapis/java-pubsub/commit/a6954d1cf17cb0247e5e153001ec983fb957b410)) +* Update dependency google-auth to v2.12.0 ([#1313](https://github.com/googleapis/java-pubsub/issues/1313)) ([ffcebe4](https://github.com/googleapis/java-pubsub/commit/ffcebe43542d4ab3b2cea1c2dcb5e6b345c4905b)) +* Update dependency google-cloud-core to v2.3.2 ([#1306](https://github.com/googleapis/java-pubsub/issues/1306)) ([fbb4460](https://github.com/googleapis/java-pubsub/commit/fbb44605794a350889ae300f697b76ed9ff41af2)) +* Update dependency importlib-metadata to v4.12.0 ([#1314](https://github.com/googleapis/java-pubsub/issues/1314)) ([e319df0](https://github.com/googleapis/java-pubsub/commit/e319df0bce76b1d8ba25b410225377d624070926)) +* Update dependency jeepney to v0.8.0 ([#1315](https://github.com/googleapis/java-pubsub/issues/1315)) ([5ed336e](https://github.com/googleapis/java-pubsub/commit/5ed336ef0b29fa89a1a508fbc2d3870b5ecff6d3)) +* Update dependency jinja2 to v3.1.2 ([#1316](https://github.com/googleapis/java-pubsub/issues/1316)) ([14ecdc6](https://github.com/googleapis/java-pubsub/commit/14ecdc6f3492e404957f1b16744a4928198d9e92)) +* Update dependency keyring to v23.9.3 ([#1317](https://github.com/googleapis/java-pubsub/issues/1317)) ([3e783d4](https://github.com/googleapis/java-pubsub/commit/3e783d47e8face65ef33b5bc7ca0bf7f0e35ca02)) +* Update dependency markupsafe to v2.1.1 ([#1318](https://github.com/googleapis/java-pubsub/issues/1318)) ([ecd9c76](https://github.com/googleapis/java-pubsub/commit/ecd9c76e2a9cce5c7f9dd6e9a8b84f748f69666a)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.14 ([#1297](https://github.com/googleapis/java-pubsub/issues/1297)) ([7e7ce60](https://github.com/googleapis/java-pubsub/commit/7e7ce60533386afdcd1b313603c468125ad0cb7d)) +* Update dependency protobuf to v3.20.2 ([#1319](https://github.com/googleapis/java-pubsub/issues/1319)) ([f5123fa](https://github.com/googleapis/java-pubsub/commit/f5123fa69ec7ac191d13c86823d105332853d944)) +* Update dependency pyjwt to v2.5.0 ([#1320](https://github.com/googleapis/java-pubsub/issues/1320)) ([a568462](https://github.com/googleapis/java-pubsub/commit/a568462b971908eb3424c9bbb5f49a6543c80fd3)) +* Update dependency requests to v2.28.1 ([#1321](https://github.com/googleapis/java-pubsub/issues/1321)) ([41b105a](https://github.com/googleapis/java-pubsub/commit/41b105a798aa9bcf2ce7ccde34efe119e76d963b)) +* Update dependency typing-extensions to v4.3.0 ([#1322](https://github.com/googleapis/java-pubsub/issues/1322)) ([288cd7e](https://github.com/googleapis/java-pubsub/commit/288cd7eaf90e219c735a89822e3858085e8423fd)) +* Update dependency zipp to v3.8.1 ([#1323](https://github.com/googleapis/java-pubsub/issues/1323)) ([e78a284](https://github.com/googleapis/java-pubsub/commit/e78a284cf07b9bac56087bbbb9f940ee976a3b4a)) + +## [1.120.18](https://github.com/googleapis/java-pubsub/compare/v1.120.17...v1.120.18) (2022-09-21) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-core to v2.8.13 ([#1288](https://github.com/googleapis/java-pubsub/issues/1288)) ([708a1df](https://github.com/googleapis/java-pubsub/commit/708a1df692b64d86915133ac4ae87e45f4d669d8)) +* Update dependency com.google.cloud:google-cloud-core to v2.8.14 ([#1291](https://github.com/googleapis/java-pubsub/issues/1291)) ([1c479de](https://github.com/googleapis/java-pubsub/commit/1c479de525a28fc323697d9a4e92f6ee3215a18f)) +* Update dependency org.junit.vintage:junit-vintage-engine to v5.9.1 ([#1289](https://github.com/googleapis/java-pubsub/issues/1289)) ([216ba7d](https://github.com/googleapis/java-pubsub/commit/216ba7db4f0fab29c4bf9fc785387b23f64beb5e)) + +## [1.120.17](https://github.com/googleapis/java-pubsub/compare/v1.120.16...v1.120.17) (2022-09-20) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.16.1 ([#1281](https://github.com/googleapis/java-pubsub/issues/1281)) ([aca8ee9](https://github.com/googleapis/java-pubsub/commit/aca8ee98dc74ecc53045f7b84326d85406163338)) +* Update dependency com.google.cloud:google-cloud-core to v2.8.12 ([#1278](https://github.com/googleapis/java-pubsub/issues/1278)) ([4ae1156](https://github.com/googleapis/java-pubsub/commit/4ae115666ba195dca90171a7e1ff81bb6cfcf123)) +* Update dependency com.google.protobuf:protobuf-java-util to v3.21.6 ([#1277](https://github.com/googleapis/java-pubsub/issues/1277)) ([a5aa281](https://github.com/googleapis/java-pubsub/commit/a5aa281787b7a92516ebcc7654d419d9cbd5abc3)) + +## [1.120.16](https://github.com/googleapis/java-pubsub/compare/v1.120.15...v1.120.16) (2022-09-15) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.3 ([#1279](https://github.com/googleapis/java-pubsub/issues/1279)) ([654ea40](https://github.com/googleapis/java-pubsub/commit/654ea400f5df0b2544f4b668e1f5ee72f3ea54d2)) + +## [1.120.15](https://github.com/googleapis/java-pubsub/compare/v1.120.14...v1.120.15) (2022-09-13) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.16.0 ([#1271](https://github.com/googleapis/java-pubsub/issues/1271)) ([439215a](https://github.com/googleapis/java-pubsub/commit/439215aaee1572859d323139c7a86e086a331486)) + +## [1.120.14](https://github.com/googleapis/java-pubsub/compare/v1.120.13...v1.120.14) (2022-09-10) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-bigquery to v2.15.0 ([#1259](https://github.com/googleapis/java-pubsub/issues/1259)) ([257cb8f](https://github.com/googleapis/java-pubsub/commit/257cb8f1b38a885dc4c8fb473a79fee1f01a2b57)) +* Update dependency com.google.cloud:google-cloud-core to v2.8.10 ([#1258](https://github.com/googleapis/java-pubsub/issues/1258)) ([37e0034](https://github.com/googleapis/java-pubsub/commit/37e0034660855fc327d3843f8aa78bcda03fe158)) +* Update dependency com.google.cloud:google-cloud-core to v2.8.11 ([#1264](https://github.com/googleapis/java-pubsub/issues/1264)) ([a19bc7a](https://github.com/googleapis/java-pubsub/commit/a19bc7a6bd54a9223575c23df1cac7b2583eb61a)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.2 ([#1265](https://github.com/googleapis/java-pubsub/issues/1265)) ([52da9da](https://github.com/googleapis/java-pubsub/commit/52da9dae19399e03af8d20c0c29aa600b7e31ed3)) + +## [1.120.13](https://github.com/googleapis/java-pubsub/compare/v1.120.12...v1.120.13) (2022-08-24) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-bigquery to v2.14.7 ([#1254](https://github.com/googleapis/java-pubsub/issues/1254)) ([775c993](https://github.com/googleapis/java-pubsub/commit/775c99353d96bcbc0704626999a7af79cf0e557f)) + +## [1.120.12](https://github.com/googleapis/java-pubsub/compare/v1.120.11...v1.120.12) (2022-08-18) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-bigquery to v2.14.4 ([#1242](https://github.com/googleapis/java-pubsub/issues/1242)) ([08cfe80](https://github.com/googleapis/java-pubsub/commit/08cfe805e71831e040f63755acde17ec45c21418)) +* update dependency com.google.cloud:google-cloud-bigquery to v2.14.6 ([#1245](https://github.com/googleapis/java-pubsub/issues/1245)) ([7f933ee](https://github.com/googleapis/java-pubsub/commit/7f933ee35055c608e9f5b72251583060943a79ea)) +* update dependency com.google.cloud:google-cloud-core to v2.8.9 ([#1250](https://github.com/googleapis/java-pubsub/issues/1250)) ([7c8fd41](https://github.com/googleapis/java-pubsub/commit/7c8fd4183523b876983c89d4b7994746b11964c3)) +* update dependency com.google.protobuf:protobuf-java-util to v3.21.5 ([#1243](https://github.com/googleapis/java-pubsub/issues/1243)) ([37eaff8](https://github.com/googleapis/java-pubsub/commit/37eaff859422bb215ace202ffd0adf8a651dadb5)) + +## [1.120.11](https://github.com/googleapis/java-pubsub/compare/v1.120.10...v1.120.11) (2022-08-06) + + +### Bug Fixes + +* fix dependency declaration to properly include runtime scope ([#1238](https://github.com/googleapis/java-pubsub/issues/1238)) ([e9a4ce5](https://github.com/googleapis/java-pubsub/commit/e9a4ce59fdf3773fa41698579984af525a277f38)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-bigquery to v2.14.2 ([#1235](https://github.com/googleapis/java-pubsub/issues/1235)) ([e2af6c3](https://github.com/googleapis/java-pubsub/commit/e2af6c358ef9e7a0d35179bc4a7c793bbc6a0960)) +* update dependency com.google.cloud:google-cloud-bigquery to v2.14.3 ([#1236](https://github.com/googleapis/java-pubsub/issues/1236)) ([399e8d7](https://github.com/googleapis/java-pubsub/commit/399e8d71d5b4aed2fa48e8cba2dce963d25693e3)) + +## [1.120.10](https://github.com/googleapis/java-pubsub/compare/v1.120.9...v1.120.10) (2022-08-04) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.8.8 ([#1231](https://github.com/googleapis/java-pubsub/issues/1231)) ([9d13dd8](https://github.com/googleapis/java-pubsub/commit/9d13dd8bc43e24815884dde421409136958d4b0f)) + +## [1.120.9](https://github.com/googleapis/java-pubsub/compare/v1.120.8...v1.120.9) (2022-08-03) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.8.7 ([#1227](https://github.com/googleapis/java-pubsub/issues/1227)) ([e967b2c](https://github.com/googleapis/java-pubsub/commit/e967b2c393a601c7e9dfba33ec2f19ef6e9757c1)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v3.0.1 ([#1226](https://github.com/googleapis/java-pubsub/issues/1226)) ([8fab566](https://github.com/googleapis/java-pubsub/commit/8fab566e2b0ff726bd9a1dff842b11f5c6c9b00b)) + +## [1.120.8](https://github.com/googleapis/java-pubsub/compare/v1.120.7...v1.120.8) (2022-08-02) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.8.6 ([#1222](https://github.com/googleapis/java-pubsub/issues/1222)) ([55eebf5](https://github.com/googleapis/java-pubsub/commit/55eebf55785a700a67dc3a97b21837acf14d9a64)) + +## [1.120.7](https://github.com/googleapis/java-pubsub/compare/v1.120.6...v1.120.7) (2022-08-01) + + +### Bug Fixes + +* Updated log level from WARNING -> INFO for EOD failures ([#1218](https://github.com/googleapis/java-pubsub/issues/1218)) ([8782533](https://github.com/googleapis/java-pubsub/commit/8782533204fcc312c1063763f5073db83c72382f)) + +## [1.120.6](https://github.com/googleapis/java-pubsub/compare/v1.120.5...v1.120.6) (2022-08-01) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-bigquery to v2.14.1 ([#1215](https://github.com/googleapis/java-pubsub/issues/1215)) ([5667492](https://github.com/googleapis/java-pubsub/commit/56674928f2e671487c8d4c0dad4e45368da47e0e)) +* update dependency com.google.cloud:google-cloud-core to v2.8.5 ([#1213](https://github.com/googleapis/java-pubsub/issues/1213)) ([5db0c2c](https://github.com/googleapis/java-pubsub/commit/5db0c2cafcf27a80ac4e18c623fc22c2af252774)) +* update dependency com.google.protobuf:protobuf-java-util to v3.21.4 ([#1214](https://github.com/googleapis/java-pubsub/issues/1214)) ([bfc53d9](https://github.com/googleapis/java-pubsub/commit/bfc53d9fb616b4ee22e2c39dbaf1eed7354142a7)) +* update dependency org.apache.avro:avro to v1.11.1 ([#1210](https://github.com/googleapis/java-pubsub/issues/1210)) ([fafcded](https://github.com/googleapis/java-pubsub/commit/fafcdede6b4e5ef5098b8b04a53d9e42b59cda3d)) + +## [1.120.5](https://github.com/googleapis/java-pubsub/compare/v1.120.4...v1.120.5) (2022-07-30) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v3 ([#1207](https://github.com/googleapis/java-pubsub/issues/1207)) ([d355509](https://github.com/googleapis/java-pubsub/commit/d355509be963b7d2c357d2c9dd3f97eaa5fd8717)) + +## [1.120.4](https://github.com/googleapis/java-pubsub/compare/v1.120.3...v1.120.4) (2022-07-29) + + +### Bug Fixes + +* updating return types of ack/nack futures to be consistent with publish ([#1204](https://github.com/googleapis/java-pubsub/issues/1204)) ([6e73ab9](https://github.com/googleapis/java-pubsub/commit/6e73ab9618f61ee1915e52abe3b80e356bc3c13f)) + +## [1.120.3](https://github.com/googleapis/java-pubsub/compare/v1.120.2...v1.120.3) (2022-07-27) + + +### Dependencies + +* update dependency org.junit.vintage:junit-vintage-engine to v5.9.0 ([#1201](https://github.com/googleapis/java-pubsub/issues/1201)) ([f18e562](https://github.com/googleapis/java-pubsub/commit/f18e5628f54b0ae6858cd046a11824a1698c50c6)) + +## [1.120.2](https://github.com/googleapis/java-pubsub/compare/v1.120.1...v1.120.2) (2022-07-25) + + +### Bug Fixes + +* enable longpaths support for windows test ([#1485](https://github.com/googleapis/java-pubsub/issues/1485)) ([#1191](https://github.com/googleapis/java-pubsub/issues/1191)) ([c4b8d90](https://github.com/googleapis/java-pubsub/commit/c4b8d90a158a3360d626df8ca6378212e09f5a47)) +* PubSubMessage leak on MessageDispatcher ([#1197](https://github.com/googleapis/java-pubsub/issues/1197)) ([1b8c440](https://github.com/googleapis/java-pubsub/commit/1b8c440fccc51dc2291c43b2972b1f5c08dfd65a)) + + +### Dependencies + +* update dependency org.graalvm.buildtools:junit-platform-native to v0.9.13 ([#1189](https://github.com/googleapis/java-pubsub/issues/1189)) ([0d96f8e](https://github.com/googleapis/java-pubsub/commit/0d96f8e2006c145de039d2f00c5eb1d8830eae3d)) +* update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.13 ([#1190](https://github.com/googleapis/java-pubsub/issues/1190)) ([c604080](https://github.com/googleapis/java-pubsub/commit/c6040802bcf97d063e2b91cdb5fa7fe3c3e3b807)) + +## [1.120.1](https://github.com/googleapis/java-pubsub/compare/v1.120.0...v1.120.1) (2022-07-11) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-bigquery to v2.13.8 ([#1179](https://github.com/googleapis/java-pubsub/issues/1179)) ([5fc8f86](https://github.com/googleapis/java-pubsub/commit/5fc8f86b30cafaba1acde6f1f807b345e3b3b953)) +* update dependency com.google.cloud:google-cloud-core to v2.8.1 ([#1178](https://github.com/googleapis/java-pubsub/issues/1178)) ([0052a6c](https://github.com/googleapis/java-pubsub/commit/0052a6c093030eaefa412cb0a8e35787a9b35c01)) +* update dependency com.google.protobuf:protobuf-java-util to v3.21.2 ([#1176](https://github.com/googleapis/java-pubsub/issues/1176)) ([8ffe189](https://github.com/googleapis/java-pubsub/commit/8ffe189170e58cab1de630c41cab6cd8346f98b0)) + +## [1.120.0](https://github.com/googleapis/java-pubsub/compare/v1.119.1...v1.120.0) (2022-06-30) + + +### Features + +* Enable REST transport for most of Java and Go clients ([#1162](https://github.com/googleapis/java-pubsub/issues/1162)) ([c8ebb13](https://github.com/googleapis/java-pubsub/commit/c8ebb1319b7714c03308d8e7af53912b6b6a0d44)) + + +### Documentation + +* **sample:** clean up README of native image sample ([#1166](https://github.com/googleapis/java-pubsub/issues/1166)) ([890987c](https://github.com/googleapis/java-pubsub/commit/890987c0b285c9c5a5224f676e070ceefb90fe02)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-bigquery to v2.13.5 ([#1172](https://github.com/googleapis/java-pubsub/issues/1172)) ([51f4da0](https://github.com/googleapis/java-pubsub/commit/51f4da048e298e6184e9a6bf931a9f1307534c61)) +* update dependency com.google.cloud:google-cloud-bigquery to v2.13.6 ([#1175](https://github.com/googleapis/java-pubsub/issues/1175)) ([9385452](https://github.com/googleapis/java-pubsub/commit/938545266b6b15f93fe82aa253b55ca4d4fd7e22)) +* update dependency com.google.cloud:google-cloud-core to v2.8.0 ([#1171](https://github.com/googleapis/java-pubsub/issues/1171)) ([4b7888f](https://github.com/googleapis/java-pubsub/commit/4b7888f582752982e2c9e1fd03472f5172fa9910)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.13.0 ([#1173](https://github.com/googleapis/java-pubsub/issues/1173)) ([925be09](https://github.com/googleapis/java-pubsub/commit/925be095bd8a227f4b49d357dcd386b4149a86f9)) +* update dependency org.graalvm.buildtools:junit-platform-native to v0.9.12 ([#1169](https://github.com/googleapis/java-pubsub/issues/1169)) ([e8e93e6](https://github.com/googleapis/java-pubsub/commit/e8e93e6c47e2c0a3546453a3aa23263ff3878a55)) +* update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.12 ([#1170](https://github.com/googleapis/java-pubsub/issues/1170)) ([1327e89](https://github.com/googleapis/java-pubsub/commit/1327e89e2e491afe0b05fb458bbea296a8ae101f)) + +## [1.119.1](https://github.com/googleapis/java-pubsub/compare/v1.119.0...v1.119.1) (2022-06-06) + + +### Dependencies + +* update dependency com.google.protobuf:protobuf-java-util to v3.21.0 ([#1152](https://github.com/googleapis/java-pubsub/issues/1152)) ([d015371](https://github.com/googleapis/java-pubsub/commit/d015371c91e22a1c03494da37a2523110c3437e0)) +* update dependency com.google.protobuf:protobuf-java-util to v3.21.1 ([#1154](https://github.com/googleapis/java-pubsub/issues/1154)) ([61aeecf](https://github.com/googleapis/java-pubsub/commit/61aeecf6c40ad0b9aa93ea48acc8cca0fe4e3764)) + +## [1.119.0](https://github.com/googleapis/java-pubsub/compare/v1.118.0...v1.119.0) (2022-05-23) + + +### Features + +* add BigQuery configuration for subscriptions ([#1133](https://github.com/googleapis/java-pubsub/issues/1133)) ([6f271db](https://github.com/googleapis/java-pubsub/commit/6f271db0feadcd338e2c5a0735e3828df5327772)) +* add build scripts for native image testing in Java 17 ([#1440](https://github.com/googleapis/java-pubsub/issues/1440)) ([#1145](https://github.com/googleapis/java-pubsub/issues/1145)) ([2f89017](https://github.com/googleapis/java-pubsub/commit/2f89017c4a9737d0db1456b0b9903ec07a9392e8)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.7.1 ([#1141](https://github.com/googleapis/java-pubsub/issues/1141)) ([851a119](https://github.com/googleapis/java-pubsub/commit/851a1190725d381232270bd80f6b82929f680f5f)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.11.0 ([#1142](https://github.com/googleapis/java-pubsub/issues/1142)) ([3cf6d82](https://github.com/googleapis/java-pubsub/commit/3cf6d82f85bdb49f8b5a4f9805506e8a2fafc53c)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.12.0 ([#1148](https://github.com/googleapis/java-pubsub/issues/1148)) ([b5b004b](https://github.com/googleapis/java-pubsub/commit/b5b004b69a0d1154f51233e1e47facc1cd13c716)) + +## [1.118.0](https://github.com/googleapis/java-pubsub/compare/v1.117.0...v1.118.0) (2022-05-18) + + +### Features + +* creating java backport ([#1120](https://github.com/googleapis/java-pubsub/issues/1120)) ([d88f417](https://github.com/googleapis/java-pubsub/commit/d88f4175356b0fdeb0697cfb1a7e6cd83ac0b7a5)) +* next release from main branch is 1.118.0 ([#1127](https://github.com/googleapis/java-pubsub/issues/1127)) ([67605a7](https://github.com/googleapis/java-pubsub/commit/67605a7efb36da5b9e123efb8fe69c58d4cfcbfd)) + + +### Bug Fixes + +* Too many leases ([#1135](https://github.com/googleapis/java-pubsub/issues/1135)) ([c9bcec5](https://github.com/googleapis/java-pubsub/commit/c9bcec531bf175684306e50eaf7ef96ee60cba78)) + +## [1.117.0](https://github.com/googleapis/java-pubsub/compare/v1.116.4...v1.117.0) (2022-05-10) + + +### Features + +* Adding grpc compression support for publisher client ([#1000](https://github.com/googleapis/java-pubsub/issues/1000)) ([4ad1a3f](https://github.com/googleapis/java-pubsub/commit/4ad1a3fc6e334b6b4efe2167dbe6976c5b5625a6)) +* AuditConfig for IAM v1 ([a1c9b74](https://github.com/googleapis/java-pubsub/commit/a1c9b7448494f50736b9eb5864d49d38a7936280)) + + +### Bug Fixes + +* added exactly once delivery files to owlbot config ([#1106](https://github.com/googleapis/java-pubsub/issues/1106)) ([bb6f105](https://github.com/googleapis/java-pubsub/commit/bb6f105873f94faf564773d821b8d5d01bac94ca)) +* adding BetaApi annotation on AckReplyConsumerWithResponse for Exactly Once Delivery ([#1097](https://github.com/googleapis/java-pubsub/issues/1097)) ([0e89054](https://github.com/googleapis/java-pubsub/commit/0e890546727657ddb5cb23e58d9c57dd65d978f2)) +* removed beta api annotation for ordering keys ([#1094](https://github.com/googleapis/java-pubsub/issues/1094)) ([3f140fb](https://github.com/googleapis/java-pubsub/commit/3f140fbacf3a157b503b081e7c6964a60ae09466)) + + +### Dependencies + +* error_prone_annotations from the shared deps BOM ([#1102](https://github.com/googleapis/java-pubsub/issues/1102)) ([3bb2bec](https://github.com/googleapis/java-pubsub/commit/3bb2bec6534e97b2ee84ac5271819f3aea568a85)) +* update dependency com.google.protobuf:protobuf-java-util to v3.20.1 ([#1100](https://github.com/googleapis/java-pubsub/issues/1100)) ([063b7aa](https://github.com/googleapis/java-pubsub/commit/063b7aa3e10fc4f74278fc36c73af8ac68dce26d)) + + +### Documentation + +* **sample:** remove unused native-image-support dependency ([#1103](https://github.com/googleapis/java-pubsub/issues/1103)) ([e7d9000](https://github.com/googleapis/java-pubsub/commit/e7d9000cd0c236d5ff222e13ca3bc25911aa9bd9)) + +### [1.116.4](https://github.com/googleapis/java-pubsub/compare/v1.116.3...v1.116.4) (2022-04-19) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.6.1 ([#1084](https://github.com/googleapis/java-pubsub/issues/1084)) ([b1c4d89](https://github.com/googleapis/java-pubsub/commit/b1c4d899e98fc58bdcd6a38b4544497e65ca591d)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.10.0 ([#1085](https://github.com/googleapis/java-pubsub/issues/1085)) ([4826dcb](https://github.com/googleapis/java-pubsub/commit/4826dcb4ce80e165a4c2c7e65a8d6931ebb0abc9)) +* update dependency com.google.cloud:native-image-support to v0.13.1 ([#1086](https://github.com/googleapis/java-pubsub/issues/1086)) ([98c7b2b](https://github.com/googleapis/java-pubsub/commit/98c7b2be08e80744b6bc8e38c327e3874b755df9)) +* update dependency com.google.errorprone:error_prone_annotations to v2.12.1 ([#1080](https://github.com/googleapis/java-pubsub/issues/1080)) ([d13bd94](https://github.com/googleapis/java-pubsub/commit/d13bd94074740b870c90a216715dfe18bbd6c248)) +* update dependency com.google.errorprone:error_prone_annotations to v2.13.0 ([#1083](https://github.com/googleapis/java-pubsub/issues/1083)) ([3b8cbcb](https://github.com/googleapis/java-pubsub/commit/3b8cbcbee1b7451adcdf1305d90960f682889c44)) +* update dependency com.google.errorprone:error_prone_annotations to v2.13.1 ([#1087](https://github.com/googleapis/java-pubsub/issues/1087)) ([34121f0](https://github.com/googleapis/java-pubsub/commit/34121f0d9943735a231d4c1e045df4f7e822268e)) +* update dependency com.google.protobuf:protobuf-java-util to v3.20.0 ([#1078](https://github.com/googleapis/java-pubsub/issues/1078)) ([b064d6c](https://github.com/googleapis/java-pubsub/commit/b064d6ca8b2b1e6e083dc273073b3734d434ef8c)) + +### [1.116.3](https://github.com/googleapis/java-pubsub/compare/v1.116.2...v1.116.3) (2022-03-29) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.5.11 ([#1070](https://github.com/googleapis/java-pubsub/issues/1070)) ([662e2ec](https://github.com/googleapis/java-pubsub/commit/662e2ec8c4130c237bcfc61efe2e42a9912c8df0)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.9.0 ([#1072](https://github.com/googleapis/java-pubsub/issues/1072)) ([56f9e91](https://github.com/googleapis/java-pubsub/commit/56f9e91b3accdf59b077771141fd42d09ebecdf1)) +* update dependency com.google.cloud:native-image-support to v0.12.11 ([#1071](https://github.com/googleapis/java-pubsub/issues/1071)) ([82f4501](https://github.com/googleapis/java-pubsub/commit/82f4501b84ea97b2903f51d8cae2011c1b96abf4)) + +### [1.116.2](https://github.com/googleapis/java-pubsub/compare/v1.116.1...v1.116.2) (2022-03-24) + + +### Dependencies + +* update dependency org.graalvm.buildtools:junit-platform-native to v0.9.11 ([#1064](https://github.com/googleapis/java-pubsub/issues/1064)) ([3ebcc5e](https://github.com/googleapis/java-pubsub/commit/3ebcc5e262bf420fd2ba36f26d8b6350b56f989d)) +* update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.11 ([#1065](https://github.com/googleapis/java-pubsub/issues/1065)) ([d1ce9c6](https://github.com/googleapis/java-pubsub/commit/d1ce9c6cc9fc9c8030c117bff1b0d2d8e317107c)) + +### [1.116.1](https://github.com/googleapis/java-pubsub/compare/v1.116.0...v1.116.1) (2022-03-22) + + +### Bug Fixes + +* added a maximum metadata size when creating the subscriber ([#1061](https://github.com/googleapis/java-pubsub/issues/1061)) ([3a8c83b](https://github.com/googleapis/java-pubsub/commit/3a8c83b973a1dfbae2ca037125574d74034218ce)) +* Removed EnableExactlyOnceDelivery from Builders ([#1052](https://github.com/googleapis/java-pubsub/issues/1052)) ([9add538](https://github.com/googleapis/java-pubsub/commit/9add53894981d862ac1348d0b641e472b3b3aa79)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.5.10 ([#1057](https://github.com/googleapis/java-pubsub/issues/1057)) ([0b7d19f](https://github.com/googleapis/java-pubsub/commit/0b7d19fe39326c36152267e4d2a13a2b51530ac2)) +* update dependency com.google.cloud:google-cloud-core to v2.5.8 ([#1050](https://github.com/googleapis/java-pubsub/issues/1050)) ([c7551d6](https://github.com/googleapis/java-pubsub/commit/c7551d621343eac4476a16579763e3aab7f71ea9)) +* update dependency com.google.cloud:google-cloud-core to v2.5.9 ([#1054](https://github.com/googleapis/java-pubsub/issues/1054)) ([5b3227f](https://github.com/googleapis/java-pubsub/commit/5b3227f4013a5121a3db34702f90be5a9ba41748)) +* update dependency com.google.cloud:native-image-support to v0.12.10 ([#1058](https://github.com/googleapis/java-pubsub/issues/1058)) ([af2b364](https://github.com/googleapis/java-pubsub/commit/af2b3640eb22e8e78f5beea07a73e2b3127cce71)) +* update dependency com.google.cloud:native-image-support to v0.12.7 ([#1042](https://github.com/googleapis/java-pubsub/issues/1042)) ([fd52aa8](https://github.com/googleapis/java-pubsub/commit/fd52aa8ffaa4d7cb8e0ad19bb6993b5616eb81df)) +* update dependency com.google.cloud:native-image-support to v0.12.8 ([#1051](https://github.com/googleapis/java-pubsub/issues/1051)) ([da2d3fa](https://github.com/googleapis/java-pubsub/commit/da2d3fa91fe4f07455fbe0aa3ccac15e456666c7)) +* update dependency com.google.cloud:native-image-support to v0.12.9 ([#1053](https://github.com/googleapis/java-pubsub/issues/1053)) ([6e97d52](https://github.com/googleapis/java-pubsub/commit/6e97d5222994dc567bc24ab3457f3431ed000134)) +* update dependency org.graalvm.buildtools:junit-platform-native to v0.9.10 ([#1043](https://github.com/googleapis/java-pubsub/issues/1043)) ([5884bdf](https://github.com/googleapis/java-pubsub/commit/5884bdfafc5ee621935b620e763ca6c0adf67ff7)) +* update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.10 ([#1044](https://github.com/googleapis/java-pubsub/issues/1044)) ([158e7f8](https://github.com/googleapis/java-pubsub/commit/158e7f884660a312b7168cecfa85cf594071a7be)) + + +### Documentation + +* **sample:** Add sample for Native Image support in Pub/Sub ([#1026](https://github.com/googleapis/java-pubsub/issues/1026)) ([a4fa69b](https://github.com/googleapis/java-pubsub/commit/a4fa69b99f34304f7ee7a56fb3c633f018905f09)) +* **sample:** use Java 8 for native image sample ([#1060](https://github.com/googleapis/java-pubsub/issues/1060)) ([2d5c010](https://github.com/googleapis/java-pubsub/commit/2d5c0109fe797698749d2c198cbb5a8a1a9d11dc)) + +## [1.116.0](https://github.com/googleapis/java-pubsub/compare/v1.115.5...v1.116.0) (2022-03-04) + + +### Features + +* exactly once support v3 ([#1022](https://github.com/googleapis/java-pubsub/issues/1022)) ([02ed621](https://github.com/googleapis/java-pubsub/commit/02ed621f5ca6c96e1bb63cd9a5ed137896313c4f)) + + +### Bug Fixes + +* removing misspelled field, add correctly spelled field ([#1011](https://github.com/googleapis/java-pubsub/issues/1011)) ([2e8b681](https://github.com/googleapis/java-pubsub/commit/2e8b68111c1d50a5322ad1fdc5d3b93561090e98)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.5.4 ([#1017](https://github.com/googleapis/java-pubsub/issues/1017)) ([55c53e3](https://github.com/googleapis/java-pubsub/commit/55c53e34448a0fda7c4ea1fb087bd2dc2dc8e163)) +* update dependency com.google.cloud:google-cloud-core to v2.5.6 ([#1038](https://github.com/googleapis/java-pubsub/issues/1038)) ([c319f59](https://github.com/googleapis/java-pubsub/commit/c319f59f26973dbb0b88f9ccd6c60b3e480392a8)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.8.0 ([#1035](https://github.com/googleapis/java-pubsub/issues/1035)) ([10dba36](https://github.com/googleapis/java-pubsub/commit/10dba36088a54860061d5435ac51ef7101eec891)) + +### [1.115.5](https://github.com/googleapis/java-pubsub/compare/v1.115.4...v1.115.5) (2022-02-11) + + +### Dependencies + +* update actions/github-script action to v6 ([#1010](https://github.com/googleapis/java-pubsub/issues/1010)) ([04ee4c9](https://github.com/googleapis/java-pubsub/commit/04ee4c98bd2c09bbb58bc73c501386c2e7fc927d)) +* update dependency com.google.cloud:google-cloud-core to v2.5.3 ([#1008](https://github.com/googleapis/java-pubsub/issues/1008)) ([0eacfb0](https://github.com/googleapis/java-pubsub/commit/0eacfb0b54f82cf05aa3d100a59d11c5fe0c40ae)) + +### [1.115.4](https://github.com/googleapis/java-pubsub/compare/v1.115.3...v1.115.4) (2022-02-10) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.5.1 ([#1004](https://github.com/googleapis/java-pubsub/issues/1004)) ([8f6879b](https://github.com/googleapis/java-pubsub/commit/8f6879b8021bf8e6b351249a0352fd0537110fcd)) + +### [1.115.3](https://github.com/googleapis/java-pubsub/compare/v1.115.2...v1.115.3) (2022-02-08) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.5.0 ([#995](https://github.com/googleapis/java-pubsub/issues/995)) ([3b3b90a](https://github.com/googleapis/java-pubsub/commit/3b3b90ad1cf520fa8cdfea180002745789ebfce9)) + +### [1.115.2](https://github.com/googleapis/java-pubsub/compare/v1.115.1...v1.115.2) (2022-02-03) + + +### Dependencies + +* **java:** update actions/github-script action to v5 ([#1339](https://github.com/googleapis/java-pubsub/issues/1339)) ([#984](https://github.com/googleapis/java-pubsub/issues/984)) ([9a1cc0e](https://github.com/googleapis/java-pubsub/commit/9a1cc0eaf344e2f9cded1c331b0e71543f20ef65)) +* update dependency com.google.cloud:google-cloud-core to v2.4.0 ([#986](https://github.com/googleapis/java-pubsub/issues/986)) ([8cdf7a0](https://github.com/googleapis/java-pubsub/commit/8cdf7a0b1dffa1c01e9c739d79af552e6b42796e)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.7.0 ([#988](https://github.com/googleapis/java-pubsub/issues/988)) ([8993760](https://github.com/googleapis/java-pubsub/commit/89937606134be8e0eb8b7669c6243f1f3b8a9aad)) +* update dependency com.google.errorprone:error_prone_annotations to v2.11.0 ([#983](https://github.com/googleapis/java-pubsub/issues/983)) ([abcbb32](https://github.com/googleapis/java-pubsub/commit/abcbb32e442948ff4637df8b657a7f8a0abd3062)) +* update dependency com.google.protobuf:protobuf-java-util to v3.19.3 ([#973](https://github.com/googleapis/java-pubsub/issues/973)) ([13a9f96](https://github.com/googleapis/java-pubsub/commit/13a9f9645661324cc26b23b9eca5d833bf9d089f)) +* update dependency com.google.protobuf:protobuf-java-util to v3.19.4 ([#987](https://github.com/googleapis/java-pubsub/issues/987)) ([ff71dc7](https://github.com/googleapis/java-pubsub/commit/ff71dc73c9950973512920073a0f0491527a0678)) + +### [1.115.1](https://www.github.com/googleapis/java-pubsub/compare/v1.115.0...v1.115.1) (2022-01-07) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.3.4 ([#955](https://www.github.com/googleapis/java-pubsub/issues/955)) ([b39ecd5](https://www.github.com/googleapis/java-pubsub/commit/b39ecd5db18c99461206b287eb403199eea7a654)) +* update dependency com.google.cloud:google-cloud-core to v2.3.5 ([#959](https://www.github.com/googleapis/java-pubsub/issues/959)) ([5efec45](https://www.github.com/googleapis/java-pubsub/commit/5efec45e1761b642bcef309a45de4342e0f553f7)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.6.0 ([#957](https://www.github.com/googleapis/java-pubsub/issues/957)) ([b562ce8](https://www.github.com/googleapis/java-pubsub/commit/b562ce8550d227d99352df17c5c01221153f94fd)) +* update dependency com.google.protobuf:protobuf-java-util to v3.19.2 ([#954](https://www.github.com/googleapis/java-pubsub/issues/954)) ([a1ac149](https://www.github.com/googleapis/java-pubsub/commit/a1ac1491f0c682da6d84e69477823d2446a9c475)) + +## [1.115.0](https://www.github.com/googleapis/java-pubsub/compare/v1.114.7...v1.115.0) (2021-12-05) + + +### Features + +* creating java backport ([#895](https://www.github.com/googleapis/java-pubsub/issues/895)) ([51b01e2](https://www.github.com/googleapis/java-pubsub/commit/51b01e254a4be87a8a779fbc5da697c70920d82f)) + + +### Bug Fixes + +* **java:** java 17 dependency arguments ([#1266](https://www.github.com/googleapis/java-pubsub/issues/1266)) ([#888](https://www.github.com/googleapis/java-pubsub/issues/888)) ([ed3ae2f](https://www.github.com/googleapis/java-pubsub/commit/ed3ae2fb0a0c72073f6bae5dc4111424740fd883)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.3.0 ([#913](https://www.github.com/googleapis/java-pubsub/issues/913)) ([adfd456](https://www.github.com/googleapis/java-pubsub/commit/adfd4562a8041d71af65cd98cf1d17b881e35dd3)) +* update dependency com.google.cloud:google-cloud-core to v2.3.1 ([#927](https://www.github.com/googleapis/java-pubsub/issues/927)) ([9fcc996](https://www.github.com/googleapis/java-pubsub/commit/9fcc9965284f6a57dc79f31eb96a2e430cef72e4)) +* update dependency com.google.cloud:google-cloud-core to v2.3.2 ([#941](https://www.github.com/googleapis/java-pubsub/issues/941)) ([41f881b](https://www.github.com/googleapis/java-pubsub/commit/41f881b2d075f9ee730f5eaf24885146d9fadccf)) +* update dependency com.google.cloud:google-cloud-core to v2.3.3 ([#943](https://www.github.com/googleapis/java-pubsub/issues/943)) ([df3a5fe](https://www.github.com/googleapis/java-pubsub/commit/df3a5fecd4d87ae79cba312109242146b84f9e55)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.5.0 ([#919](https://www.github.com/googleapis/java-pubsub/issues/919)) ([4adf335](https://www.github.com/googleapis/java-pubsub/commit/4adf335b78ce6b13af22c3c3a64c4ea1a24f05cd)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.5.1 ([#942](https://www.github.com/googleapis/java-pubsub/issues/942)) ([44cdcf5](https://www.github.com/googleapis/java-pubsub/commit/44cdcf5d3f1815654b9b255c1096e290a7db9030)) +* update dependency com.google.errorprone:error_prone_annotations to v2.10.0 ([#901](https://www.github.com/googleapis/java-pubsub/issues/901)) ([8733144](https://www.github.com/googleapis/java-pubsub/commit/8733144854aaebfec0cd5f03ab14d820c6d22c0e)) +* update dependency com.google.protobuf:protobuf-java-util to v3.19.1 ([#885](https://www.github.com/googleapis/java-pubsub/issues/885)) ([d0a02a9](https://www.github.com/googleapis/java-pubsub/commit/d0a02a9f320b254a3e4ef60bfff47a6bb3a2427f)) +* update dependency org.apache.avro:avro to v1.11.0 ([#894](https://www.github.com/googleapis/java-pubsub/issues/894)) ([b7ba1a8](https://www.github.com/googleapis/java-pubsub/commit/b7ba1a871c4c26f50d87b41c2627b6e6aef63b3c)) +* update gson to 2.8.9 ([ec97e93](https://www.github.com/googleapis/java-pubsub/commit/ec97e93ae53666d5c5cad71821f12cefa4fbaf2e)) + +### [1.114.7](https://www.github.com/googleapis/java-pubsub/compare/v1.114.6...v1.114.7) (2021-10-19) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.1.8 ([#877](https://www.github.com/googleapis/java-pubsub/issues/877)) ([c76329b](https://www.github.com/googleapis/java-pubsub/commit/c76329b06f2f620662f4fe4ffefa897daea8703b)) +* update dependency com.google.cloud:google-cloud-core to v2.2.0 ([#881](https://www.github.com/googleapis/java-pubsub/issues/881)) ([1eb4a1f](https://www.github.com/googleapis/java-pubsub/commit/1eb4a1f0a7d318b88cd04f4aefd3191f289e8a0f)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.4.0 ([#882](https://www.github.com/googleapis/java-pubsub/issues/882)) ([2c367bb](https://www.github.com/googleapis/java-pubsub/commit/2c367bb22860cbbfa57fca70a436919ac6aa8084)) + +### [1.114.6](https://www.github.com/googleapis/java-pubsub/compare/v1.114.5...v1.114.6) (2021-10-05) + + +### Dependencies + +* update dependency com.google.protobuf:protobuf-java-util to v3.18.1 ([#870](https://www.github.com/googleapis/java-pubsub/issues/870)) ([5188e39](https://www.github.com/googleapis/java-pubsub/commit/5188e39a13b97d9fa943c89d9082f58afa3d9d98)) + +### [1.114.5](https://www.github.com/googleapis/java-pubsub/compare/v1.114.4...v1.114.5) (2021-09-27) + + +### Bug Fixes + +* do not block forever if message size > flow control limits ([#847](https://www.github.com/googleapis/java-pubsub/issues/847)) ([f4ca4b2](https://www.github.com/googleapis/java-pubsub/commit/f4ca4b2d12730d5cef64d6f986b140de2c51147d)) +* reset resource ids before test retries ([#852](https://www.github.com/googleapis/java-pubsub/issues/852)) ([3769e53](https://www.github.com/googleapis/java-pubsub/commit/3769e53225e1c4e32a1a0d5179c2a333258d69a8)) + + +### Documentation + +* **samples:** add readme ([#849](https://www.github.com/googleapis/java-pubsub/issues/849)) ([66135cf](https://www.github.com/googleapis/java-pubsub/commit/66135cf20c4d3c3ffc881b52f0273a14881ac97b)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.1.5 ([#854](https://www.github.com/googleapis/java-pubsub/issues/854)) ([374b8c3](https://www.github.com/googleapis/java-pubsub/commit/374b8c3f25aedd9ebdbb0d8075a201c482dadd40)) +* update dependency com.google.cloud:google-cloud-core to v2.1.6 ([#855](https://www.github.com/googleapis/java-pubsub/issues/855)) ([9fabfc3](https://www.github.com/googleapis/java-pubsub/commit/9fabfc3177ebb08082557803801ade0e12e2e36d)) +* update dependency com.google.cloud:google-cloud-core to v2.1.7 ([#858](https://www.github.com/googleapis/java-pubsub/issues/858)) ([2cd94b5](https://www.github.com/googleapis/java-pubsub/commit/2cd94b57529f683465c8fd969cbf4a435d214b60)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.3.0 ([#856](https://www.github.com/googleapis/java-pubsub/issues/856)) ([ab47c15](https://www.github.com/googleapis/java-pubsub/commit/ab47c15a92978fbc994ed2db02ad1f24ed640fd0)) + +### [1.114.4](https://www.github.com/googleapis/java-pubsub/compare/v1.114.3...v1.114.4) (2021-09-17) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.1.4 ([#835](https://www.github.com/googleapis/java-pubsub/issues/835)) ([2ab94ab](https://www.github.com/googleapis/java-pubsub/commit/2ab94abdc18c010496c50827c1f2eff02dae68e0)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.2.1 ([#836](https://www.github.com/googleapis/java-pubsub/issues/836)) ([39770c9](https://www.github.com/googleapis/java-pubsub/commit/39770c9a6641273e4839b758d67ecbf2abd3a63f)) +* update dependency com.google.protobuf:protobuf-java-util to v3.18.0 ([#841](https://www.github.com/googleapis/java-pubsub/issues/841)) ([f5d515c](https://www.github.com/googleapis/java-pubsub/commit/f5d515c718c39dcfb5bf9375e624c1b1c28eb892)) + +### [1.114.3](https://www.github.com/googleapis/java-pubsub/compare/v1.114.2...v1.114.3) (2021-08-31) + + +### Bug Fixes + +* Set publish timeouts to be consistent with desired values ([#820](https://www.github.com/googleapis/java-pubsub/issues/820)) ([826dc10](https://www.github.com/googleapis/java-pubsub/commit/826dc10f5bb373e88b06d390fc2029960a2cad7c)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.1.2 ([#823](https://www.github.com/googleapis/java-pubsub/issues/823)) ([cc0786f](https://www.github.com/googleapis/java-pubsub/commit/cc0786f0c8e8c88df15563204953ff8870244fd5)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.2.0 ([#824](https://www.github.com/googleapis/java-pubsub/issues/824)) ([32623af](https://www.github.com/googleapis/java-pubsub/commit/32623af172e367b61a5bcb10c0001d5488b1e772)) + +### [1.114.2](https://www.github.com/googleapis/java-pubsub/compare/v1.114.1...v1.114.2) (2021-08-24) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.1.1 ([#813](https://www.github.com/googleapis/java-pubsub/issues/813)) ([e7b0c3c](https://www.github.com/googleapis/java-pubsub/commit/e7b0c3c002e816027c945cac4487394cefd26892)) + +### [1.114.1](https://www.github.com/googleapis/java-pubsub/compare/v1.114.0...v1.114.1) (2021-08-23) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.1.0 ([#806](https://www.github.com/googleapis/java-pubsub/issues/806)) ([744eacd](https://www.github.com/googleapis/java-pubsub/commit/744eacd007c9de224790b75eb5c060acaf6245ec)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.1.0 ([#807](https://www.github.com/googleapis/java-pubsub/issues/807)) ([e88ff93](https://www.github.com/googleapis/java-pubsub/commit/e88ff93b0fc476f27221d9e5e4c81811a26815ac)) + +## [1.114.0](https://www.github.com/googleapis/java-pubsub/compare/v1.113.9...v1.114.0) (2021-08-23) + + +### Features + +* add topic retention support ([#803](https://www.github.com/googleapis/java-pubsub/issues/803)) ([898faf8](https://www.github.com/googleapis/java-pubsub/commit/898faf810276901c4ea878278ec55b80664098f7)) + + +### Dependencies + +* update dependency com.google.errorprone:error_prone_annotations to v2.9.0 ([#797](https://www.github.com/googleapis/java-pubsub/issues/797)) ([70bb91d](https://www.github.com/googleapis/java-pubsub/commit/70bb91d7a5cbb6da82837d7bd42a08b4b4fe648e)) + +### [1.113.9](https://www.github.com/googleapis/java-pubsub/compare/v1.113.8...v1.113.9) (2021-08-11) + + +### Dependencies + +* update dependency com.google.api.grpc:grpc-google-cloud-pubsub-v1 to v1.96.0 ([#786](https://www.github.com/googleapis/java-pubsub/issues/786)) ([57c3c2b](https://www.github.com/googleapis/java-pubsub/commit/57c3c2bfd467fd02a03ec581d9254fe3c9c68f8b)) +* update dependency com.google.api.grpc:proto-google-cloud-pubsub-v1 to v1.96.0 ([#787](https://www.github.com/googleapis/java-pubsub/issues/787)) ([7940378](https://www.github.com/googleapis/java-pubsub/commit/7940378db1394e3c5631ec854fa57b35cfb12094)) +* update dependency com.google.cloud:google-cloud-core to v2.0.5 ([#783](https://www.github.com/googleapis/java-pubsub/issues/783)) ([de3d475](https://www.github.com/googleapis/java-pubsub/commit/de3d47544bfe370330dd6b569927cf77204201bf)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.0.1 ([#788](https://www.github.com/googleapis/java-pubsub/issues/788)) ([5d39f85](https://www.github.com/googleapis/java-pubsub/commit/5d39f850040a2c60c5c87a7669f924121e0b8b0a)) + +### [1.113.8](https://www.github.com/googleapis/java-pubsub/compare/v1.113.7...v1.113.8) (2021-08-11) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.0.4 ([#772](https://www.github.com/googleapis/java-pubsub/issues/772)) ([37cb279](https://www.github.com/googleapis/java-pubsub/commit/37cb2797cfce84e53b56b37de19c9b467eca91c4)) + +### [1.113.7](https://www.github.com/googleapis/java-pubsub/compare/v1.113.6...v1.113.7) (2021-08-11) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2.0.3 ([#768](https://www.github.com/googleapis/java-pubsub/issues/768)) ([2ba610b](https://www.github.com/googleapis/java-pubsub/commit/2ba610bb1134b43c641608364248c794eec5a295)) + +### [1.113.6](https://www.github.com/googleapis/java-pubsub/compare/v1.113.5...v1.113.6) (2021-08-06) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v2 ([#759](https://www.github.com/googleapis/java-pubsub/issues/759)) ([9afc2a3](https://www.github.com/googleapis/java-pubsub/commit/9afc2a3d0b94cf71feda5fed23841bdb7814f422)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2 ([#762](https://www.github.com/googleapis/java-pubsub/issues/762)) ([ee939c2](https://www.github.com/googleapis/java-pubsub/commit/ee939c2166ec3dfea0e6132f6198e3a7693659a1)) +* update dependency com.google.errorprone:error_prone_annotations to v2.8.0 ([#745](https://www.github.com/googleapis/java-pubsub/issues/745)) ([554d602](https://www.github.com/googleapis/java-pubsub/commit/554d60273b53ab4a06b13fa0c39b13e3c3e815e1)) +* update dependency com.google.errorprone:error_prone_annotations to v2.8.1 ([#758](https://www.github.com/googleapis/java-pubsub/issues/758)) ([09650e4](https://www.github.com/googleapis/java-pubsub/commit/09650e4d1201be0c738b8853d9271084c808c2be)) + +### [1.113.5](https://www.github.com/googleapis/java-pubsub/compare/v1.113.4...v1.113.5) (2021-07-02) + + +### Bug Fixes + +* Add `shopt -s nullglob` to dependencies script ([#724](https://www.github.com/googleapis/java-pubsub/issues/724)) ([25840d6](https://www.github.com/googleapis/java-pubsub/commit/25840d60c62123b71c64e3b2fea2b33d4c4c2fb4)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v1.95.3 ([#725](https://www.github.com/googleapis/java-pubsub/issues/725)) ([ae3b284](https://www.github.com/googleapis/java-pubsub/commit/ae3b2840eb25458d054c25a3c9879a8a5aa8883a)) +* update dependency com.google.cloud:google-cloud-core to v1.95.4 ([#730](https://www.github.com/googleapis/java-pubsub/issues/730)) ([b6453b3](https://www.github.com/googleapis/java-pubsub/commit/b6453b3026184e757a6f29c1baeece14ca4cc4f2)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v1.4.0 ([#732](https://www.github.com/googleapis/java-pubsub/issues/732)) ([78b26c0](https://www.github.com/googleapis/java-pubsub/commit/78b26c0de4a11b88295c2861917ee354e2793bf8)) + +### [1.113.4](https://www.github.com/googleapis/java-pubsub/compare/v1.113.3...v1.113.4) (2021-06-22) + + +### Bug Fixes + +* allow retries for subscriber unary rpcs ([#721](https://www.github.com/googleapis/java-pubsub/issues/721)) ([3f0a6d2](https://www.github.com/googleapis/java-pubsub/commit/3f0a6d2474dcbac604991c45298c7b89fefa27a7)) +* Update dependencies.sh to not break on mac ([#718](https://www.github.com/googleapis/java-pubsub/issues/718)) ([0ebad0a](https://www.github.com/googleapis/java-pubsub/commit/0ebad0a2c92f00126d9c00aec1af3c73333c3a31)) + +### [1.113.3](https://www.github.com/googleapis/java-pubsub/compare/v1.113.2...v1.113.3) (2021-06-09) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v1.95.2 ([#707](https://www.github.com/googleapis/java-pubsub/issues/707)) ([60c7a68](https://www.github.com/googleapis/java-pubsub/commit/60c7a68fefd54525958c3b195142d8613405f5d2)) + +### [1.113.2](https://www.github.com/googleapis/java-pubsub/compare/v1.113.1...v1.113.2) (2021-06-09) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v1.95.1 ([#701](https://www.github.com/googleapis/java-pubsub/issues/701)) ([c91e208](https://www.github.com/googleapis/java-pubsub/commit/c91e208efd04218dd5dd4f69743307375c8d6f06)) +* update dependency com.google.protobuf:protobuf-java-util to v3.17.3 ([#700](https://www.github.com/googleapis/java-pubsub/issues/700)) ([60f9b8d](https://www.github.com/googleapis/java-pubsub/commit/60f9b8d950d20a7b5a0fccad082d9014cd44d20c)) + +### [1.113.1](https://www.github.com/googleapis/java-pubsub/compare/v1.113.0...v1.113.1) (2021-06-07) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v1.95.0 ([#691](https://www.github.com/googleapis/java-pubsub/issues/691)) ([bc75411](https://www.github.com/googleapis/java-pubsub/commit/bc754112599c744374f95237bb7e9b8b4d374531)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v1.3.0 ([#692](https://www.github.com/googleapis/java-pubsub/issues/692)) ([1ba00a2](https://www.github.com/googleapis/java-pubsub/commit/1ba00a2da7ecd8447a182ae2f9c644c7b01fe8bd)) +* update dependency com.google.protobuf:protobuf-java-util to v3.17.2 ([#690](https://www.github.com/googleapis/java-pubsub/issues/690)) ([2ac440c](https://www.github.com/googleapis/java-pubsub/commit/2ac440cbb55dd24d5783fb74b77b5dfc97aed951)) + +## [1.113.0](https://www.github.com/googleapis/java-pubsub/compare/v1.112.5...v1.113.0) (2021-05-31) + + +### Features + +* add `gcf-owl-bot[bot]` to `ignoreAuthors` ([#673](https://www.github.com/googleapis/java-pubsub/issues/673)) ([51dfca3](https://www.github.com/googleapis/java-pubsub/commit/51dfca3049f87e8bc1163c03eaef0556be3eefdf)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v1.2.0 ([#672](https://www.github.com/googleapis/java-pubsub/issues/672)) ([2cc9ec5](https://www.github.com/googleapis/java-pubsub/commit/2cc9ec5f1418f23a89129bdfc038dcf461097b88)) +* update dependency com.google.errorprone:error_prone_annotations to v2.7.1 ([#667](https://www.github.com/googleapis/java-pubsub/issues/667)) ([885be5c](https://www.github.com/googleapis/java-pubsub/commit/885be5c37992b8b1175c55b407db0f833241a0d1)) +* update dependency com.google.protobuf:protobuf-java-util to v3.17.1 ([#679](https://www.github.com/googleapis/java-pubsub/issues/679)) ([e7ef708](https://www.github.com/googleapis/java-pubsub/commit/e7ef7088999f60dc8bd5268c0315a8e1e4639ae0)) + +### [1.112.5](https://www.github.com/googleapis/java-pubsub/compare/v1.112.4...v1.112.5) (2021-05-14) + + +### Dependencies + +* update dependency com.google.protobuf:protobuf-java-util to v3.17.0 ([#660](https://www.github.com/googleapis/java-pubsub/issues/660)) ([5f33acf](https://www.github.com/googleapis/java-pubsub/commit/5f33acf204bd5d3a62eb06fc64a4ad779458ed82)) + +### [1.112.4](https://www.github.com/googleapis/java-pubsub/compare/v1.112.3...v1.112.4) (2021-05-12) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v1.1.0 ([#651](https://www.github.com/googleapis/java-pubsub/issues/651)) ([96ab1d4](https://www.github.com/googleapis/java-pubsub/commit/96ab1d4ea484215fb951704d0d2f0dbbf2802544)) +* update dependency com.google.protobuf:protobuf-java-util to v3.16.0 ([#647](https://www.github.com/googleapis/java-pubsub/issues/647)) ([7fcc503](https://www.github.com/googleapis/java-pubsub/commit/7fcc503a790d28f3d07e07c0ca286a1ee031f38b)) + +### [1.112.3](https://www.github.com/googleapis/java-pubsub/compare/v1.112.2...v1.112.3) (2021-04-26) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v1.94.8 ([#624](https://www.github.com/googleapis/java-pubsub/issues/624)) ([e1d6632](https://www.github.com/googleapis/java-pubsub/commit/e1d663262b618223d021f8304718f4b939423002)) + +### [1.112.2](https://www.github.com/googleapis/java-pubsub/compare/v1.112.1...v1.112.2) (2021-04-24) + + +### Bug Fixes + +* release scripts from issuing overlapping phases ([#610](https://www.github.com/googleapis/java-pubsub/issues/610)) ([70246e8](https://www.github.com/googleapis/java-pubsub/commit/70246e8fd24c7e85b0384d99bd3895094383ff5e)) +* typo ([#603](https://www.github.com/googleapis/java-pubsub/issues/603)) ([60b087d](https://www.github.com/googleapis/java-pubsub/commit/60b087d2e2afbadaff5dd0a3b946d46b61acbf95)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.21.1 ([#614](https://www.github.com/googleapis/java-pubsub/issues/614)) ([61e2ea1](https://www.github.com/googleapis/java-pubsub/commit/61e2ea112a4d44219adb20f087e7847114be4261)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v1 ([#626](https://www.github.com/googleapis/java-pubsub/issues/626)) ([a9884a9](https://www.github.com/googleapis/java-pubsub/commit/a9884a9beede67ce90616be2f1bdd7da1aa6f867)) +* update dependency org.easymock:easymock to v4.3 ([#612](https://www.github.com/googleapis/java-pubsub/issues/612)) ([b08e816](https://www.github.com/googleapis/java-pubsub/commit/b08e81604341381543b13f68bb0695c55d0a7575)) + +### [1.112.1](https://www.github.com/googleapis/java-pubsub/compare/v1.112.0...v1.112.1) (2021-04-12) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v1.94.6 ([#590](https://www.github.com/googleapis/java-pubsub/issues/590)) ([902b149](https://www.github.com/googleapis/java-pubsub/commit/902b149b04d5d74b84051c4b09e54b14df20f6a2)) +* update dependency com.google.cloud:google-cloud-core to v1.94.7 ([#597](https://www.github.com/googleapis/java-pubsub/issues/597)) ([312966d](https://www.github.com/googleapis/java-pubsub/commit/312966d58c494864d57821ed1a75c84fd3de1aab)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.21.0 ([#592](https://www.github.com/googleapis/java-pubsub/issues/592)) ([f81b792](https://www.github.com/googleapis/java-pubsub/commit/f81b7929659b03d620789fef5dfc9e8fcb418c66)) +* update dependency com.google.errorprone:error_prone_annotations to v2.6.0 ([#585](https://www.github.com/googleapis/java-pubsub/issues/585)) ([8316bce](https://www.github.com/googleapis/java-pubsub/commit/8316bced8cf506a470c2f07cc578eda86305dd4e)) +* update dependency com.google.protobuf:protobuf-java-util to v3.15.7 ([#586](https://www.github.com/googleapis/java-pubsub/issues/586)) ([616e77d](https://www.github.com/googleapis/java-pubsub/commit/616e77df843a70edf7d5d972156b2e2371d928e4)) +* update dependency com.google.protobuf:protobuf-java-util to v3.15.8 ([#589](https://www.github.com/googleapis/java-pubsub/issues/589)) ([8adde2d](https://www.github.com/googleapis/java-pubsub/commit/8adde2d6741c8bc264f00e34255368ef527aa9ce)) +* update dependency org.apache.avro:avro to v1.10.2 ([#575](https://www.github.com/googleapis/java-pubsub/issues/575)) ([acd0c19](https://www.github.com/googleapis/java-pubsub/commit/acd0c1953aa4728699a03566632f4b1bf8bbe177)) + +## [1.112.0](https://www.github.com/googleapis/java-pubsub/compare/v1.111.4...v1.112.0) (2021-03-16) + + +### Features + +* expose default client configs ([#541](https://www.github.com/googleapis/java-pubsub/issues/541)) ([01e6daf](https://www.github.com/googleapis/java-pubsub/commit/01e6dafb569a37c661463b79f5afbfba4f6d188d)) + + +### Bug Fixes + +* properly shutdown subscriber stub on permanent streaming pull failure ([#539](https://www.github.com/googleapis/java-pubsub/issues/539)) ([adbcc0c](https://www.github.com/googleapis/java-pubsub/commit/adbcc0c6777e35eae24b538e6c48f9ef7485a786)) +* update MessageDispatcher to not extend deadlines of messages which arrive early to 60s ([#570](https://www.github.com/googleapis/java-pubsub/issues/570)) ([e174e20](https://www.github.com/googleapis/java-pubsub/commit/e174e2043f64563f4d2868537aeb90d948233166)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v1.94.3 ([#566](https://www.github.com/googleapis/java-pubsub/issues/566)) ([3f23ac6](https://www.github.com/googleapis/java-pubsub/commit/3f23ac6cda00814f74f2c435dd8a05b70ac69d27)) +* update dependency com.google.cloud:google-cloud-core to v1.94.4 ([#568](https://www.github.com/googleapis/java-pubsub/issues/568)) ([21886d3](https://www.github.com/googleapis/java-pubsub/commit/21886d39cdc2a33275c2061578c877b0fa6aee98)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.20.1 ([#564](https://www.github.com/googleapis/java-pubsub/issues/564)) ([0aa4521](https://www.github.com/googleapis/java-pubsub/commit/0aa452121b2fa769221b41c8c1323f3b31b599d1)) +* update dependency com.google.protobuf:protobuf-java-util to v3.15.5 ([#559](https://www.github.com/googleapis/java-pubsub/issues/559)) ([74e6a92](https://www.github.com/googleapis/java-pubsub/commit/74e6a92ca88f006e0fe1a68144ba0cb30a1d140c)) +* update dependency com.google.protobuf:protobuf-java-util to v3.15.6 ([#569](https://www.github.com/googleapis/java-pubsub/issues/569)) ([b6e299f](https://www.github.com/googleapis/java-pubsub/commit/b6e299f6d13dab7d5b2e8c575021371485878bb2)) + + +### Documentation + +* Remove experimental note for schema APIs ([#560](https://www.github.com/googleapis/java-pubsub/issues/560)) ([4b98556](https://www.github.com/googleapis/java-pubsub/commit/4b98556e550802135cfb87d8984f0deec57e8c2e)) + +### [1.111.4](https://www.github.com/googleapis/java-pubsub/compare/v1.111.3...v1.111.4) (2021-02-26) + + +### Dependencies + +* update dependency com.google.protobuf:protobuf-java-util to v3.15.3 ([#546](https://www.github.com/googleapis/java-pubsub/issues/546)) ([3c10d2c](https://www.github.com/googleapis/java-pubsub/commit/3c10d2cf7cb8fab1c2dad8e80ea8ad7723e4e899)) + +### [1.111.3](https://www.github.com/googleapis/java-pubsub/compare/v1.111.2...v1.111.3) (2021-02-25) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.20.0 ([#542](https://www.github.com/googleapis/java-pubsub/issues/542)) ([ff9dc0d](https://www.github.com/googleapis/java-pubsub/commit/ff9dc0d5becf281aea855eeb0d246e938ed5e09c)) + +### [1.111.2](https://www.github.com/googleapis/java-pubsub/compare/v1.111.1...v1.111.2) (2021-02-24) + + +### Dependencies + +* update dependency com.google.protobuf:protobuf-java-util to v3.15.2 ([#524](https://www.github.com/googleapis/java-pubsub/issues/524)) ([b5e07a8](https://www.github.com/googleapis/java-pubsub/commit/b5e07a866f096744feafc6187bcb022669f5fa26)) + +### [1.111.1](https://www.github.com/googleapis/java-pubsub/compare/v1.111.0...v1.111.1) (2021-02-23) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.19.0 ([#515](https://www.github.com/googleapis/java-pubsub/issues/515)) ([073c3b8](https://www.github.com/googleapis/java-pubsub/commit/073c3b84965a4225d735743d5f4e540330cf26b7)) + +## [1.111.0](https://www.github.com/googleapis/java-pubsub/compare/v1.110.3...v1.111.0) (2021-02-02) + + +### Features + +* add schema service to gapic ([#494](https://www.github.com/googleapis/java-pubsub/issues/494)) ([23952bf](https://www.github.com/googleapis/java-pubsub/commit/23952bfb728f64efaeaa2862f2f56f873260ca3e)) + + +### Bug Fixes + +* adding deprecated tags to deprecated methods ([#472](https://www.github.com/googleapis/java-pubsub/issues/472)) ([91b5152](https://www.github.com/googleapis/java-pubsub/commit/91b5152ba9942e9ce4cfd2051e4b8b358b465601)) +* fix flakiness in subscriberIT integration test ([#476](https://www.github.com/googleapis/java-pubsub/issues/476)) ([d981b4e](https://www.github.com/googleapis/java-pubsub/commit/d981b4ec7ba905898fcc5e17453166d9d995bdb4)) + + +### Documentation + +* Document potentially unexpected blocking behavior of publish() method ([#370](https://www.github.com/googleapis/java-pubsub/issues/370)) ([18b3a2f](https://www.github.com/googleapis/java-pubsub/commit/18b3a2f77816b55cf605447b382a2f1bd42e0880)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.18.0 ([#482](https://www.github.com/googleapis/java-pubsub/issues/482)) ([260eca5](https://www.github.com/googleapis/java-pubsub/commit/260eca5ea34296d3722707ce7199845c6f2e8526)) +* update dependency com.google.errorprone:error_prone_annotations to v2.5.1 ([#484](https://www.github.com/googleapis/java-pubsub/issues/484)) ([44b6780](https://www.github.com/googleapis/java-pubsub/commit/44b6780022bbc2e1cf40be82932a34e5d8e08650)) + +### [1.110.3](https://www.github.com/googleapis/java-pubsub/compare/v1.110.2...v1.110.3) (2020-12-15) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.17.0 ([#466](https://www.github.com/googleapis/java-pubsub/issues/466)) ([e96ae16](https://www.github.com/googleapis/java-pubsub/commit/e96ae16afa7829a087129abccd94a2dafcf25e9a)) + +### [1.110.2](https://www.github.com/googleapis/java-pubsub/compare/v1.110.1...v1.110.2) (2020-12-14) + + +### Bug Fixes + +* `setParallelPullCount` documentation ([#459](https://www.github.com/googleapis/java-pubsub/issues/459)) ([b399f60](https://www.github.com/googleapis/java-pubsub/commit/b399f60cf324ab21c15697bd697902aa1fde3e80)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.16.1 ([#462](https://www.github.com/googleapis/java-pubsub/issues/462)) ([1326484](https://www.github.com/googleapis/java-pubsub/commit/13264848f5124d7ad388c1cd1423447aab2aa512)) + +### [1.110.1](https://www.github.com/googleapis/java-pubsub/compare/v1.110.0...v1.110.1) (2020-12-02) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.16.0 ([#452](https://www.github.com/googleapis/java-pubsub/issues/452)) ([6f8d0bb](https://www.github.com/googleapis/java-pubsub/commit/6f8d0bbbfe1b05541e916520c1dfb715ccce03b0)) + +## [1.110.0](https://www.github.com/googleapis/java-pubsub/compare/v1.109.0...v1.110.0) (2020-11-24) + + +### Features + +* make the stream ack deadline congruent with maxDurationPerAckExtension ([#447](https://www.github.com/googleapis/java-pubsub/issues/447)) ([c63dc25](https://www.github.com/googleapis/java-pubsub/commit/c63dc255dff55982fca2e4cf0e955c47614dc291)) + +## [1.109.0](https://www.github.com/googleapis/java-pubsub/compare/v1.108.7...v1.109.0) (2020-11-17) + + +### Features + +* Enable server side flow control by default with the option to turn it off ([#426](https://www.github.com/googleapis/java-pubsub/issues/426)) ([14ac8d7](https://www.github.com/googleapis/java-pubsub/commit/14ac8d7e10ef6fbecdb21cb80ef496686d20e8f3)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.15.0 ([#430](https://www.github.com/googleapis/java-pubsub/issues/430)) ([991cb43](https://www.github.com/googleapis/java-pubsub/commit/991cb430794b5d95d47477e0113b71db313ebebe)) + +### [1.108.7](https://www.github.com/googleapis/java-pubsub/compare/v1.108.6...v1.108.7) (2020-11-02) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.14.1 ([#417](https://www.github.com/googleapis/java-pubsub/issues/417)) ([fc388c0](https://www.github.com/googleapis/java-pubsub/commit/fc388c0d452957a617f8ce7288830392cdd40693)) + +### [1.108.6](https://www.github.com/googleapis/java-pubsub/compare/v1.108.5...v1.108.6) (2020-10-22) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.13.0 ([#400](https://www.github.com/googleapis/java-pubsub/issues/400)) ([bd3d400](https://www.github.com/googleapis/java-pubsub/commit/bd3d400b11a0677bcd3ca2bf8cd5d7fd0fbf59bc)) + +### [1.108.5](https://www.github.com/googleapis/java-pubsub/compare/v1.108.4...v1.108.5) (2020-10-19) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.12.1 ([#392](https://www.github.com/googleapis/java-pubsub/issues/392)) ([1a0d7e9](https://www.github.com/googleapis/java-pubsub/commit/1a0d7e98a40298b139cfddbd9e044dc541296ab5)) + +### [1.108.4](https://www.github.com/googleapis/java-pubsub/compare/v1.108.3...v1.108.4) (2020-10-12) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.10.2 ([#377](https://www.github.com/googleapis/java-pubsub/issues/377)) ([5e76466](https://www.github.com/googleapis/java-pubsub/commit/5e7646640c28b019dbfbd4073420f9358993ef85)) + +### [1.108.3](https://www.github.com/googleapis/java-pubsub/compare/v1.108.2...v1.108.3) (2020-10-02) + + +### Bug Fixes + +* ensure proper cleanup of publisher in tests ([#310](https://www.github.com/googleapis/java-pubsub/issues/310)) ([b2b2f86](https://www.github.com/googleapis/java-pubsub/commit/b2b2f8694b925aad95e891cbd0d89426989fec59)) +* Ensure that messages that are in pending batches for an ordering key are canceled when a previous publish for the ordering keys fails ([#366](https://www.github.com/googleapis/java-pubsub/issues/366)) ([7cdf8bc](https://www.github.com/googleapis/java-pubsub/commit/7cdf8bcf71a6c141f8b751b41fb2e055a75a4022)) +* make subscriberIT test less flaky ([#340](https://www.github.com/googleapis/java-pubsub/issues/340)) ([5d4f534](https://www.github.com/googleapis/java-pubsub/commit/5d4f5345b13171a47f022d34d39609c2f4329069)) +* Only check keyHasError if ordering key is non-empty ([#367](https://www.github.com/googleapis/java-pubsub/issues/367)) ([8b2d0b7](https://www.github.com/googleapis/java-pubsub/commit/8b2d0b73a46e6b91795ad05a8dd0f626249c4f30)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.10.0 ([#357](https://www.github.com/googleapis/java-pubsub/issues/357)) ([3b3616c](https://www.github.com/googleapis/java-pubsub/commit/3b3616c524059fb8a87bf30a66c481000046132a)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.9.0 ([#337](https://www.github.com/googleapis/java-pubsub/issues/337)) ([8cf77ee](https://www.github.com/googleapis/java-pubsub/commit/8cf77ee3b31356f342942a9ffaa61db2d0686769)) + +### [1.108.2](https://www.github.com/googleapis/java-pubsub/compare/v1.108.1...v1.108.2) (2020-08-21) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.5 ([#303](https://www.github.com/googleapis/java-pubsub/issues/303)) ([28ef9ea](https://www.github.com/googleapis/java-pubsub/commit/28ef9ea8cd78391a37023df6a0dcdbd1ba8432f1)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.6 ([#313](https://www.github.com/googleapis/java-pubsub/issues/313)) ([6fc0a4f](https://www.github.com/googleapis/java-pubsub/commit/6fc0a4fceddd420ac8539e0aa98975a01546250d)) + +### [1.108.1](https://www.github.com/googleapis/java-pubsub/compare/v1.108.0...v1.108.1) (2020-08-04) + + +### Bug Fixes + +* add header providers to PublisherStubSettings ([#294](https://www.github.com/googleapis/java-pubsub/issues/294)) ([6bd5016](https://www.github.com/googleapis/java-pubsub/commit/6bd5016dafe85c7af92a44a8e9a34b2fcb95e64d)) +* if a flow control setting is not provided use zero ([#292](https://www.github.com/googleapis/java-pubsub/issues/292)) ([d56155b](https://www.github.com/googleapis/java-pubsub/commit/d56155b640d13fa78d28031862aabe4814ce201d)) +* Make error message more clear about where ordering must be enabled when publishing ([#293](https://www.github.com/googleapis/java-pubsub/issues/293)) ([f54ed02](https://www.github.com/googleapis/java-pubsub/commit/f54ed0284a9c7e1a337481e13388397adfa33abf)) + + +### Documentation + +* remove experimental warning for ordering keys properties. ([#297](https://www.github.com/googleapis/java-pubsub/issues/297)) ([3fa5164](https://www.github.com/googleapis/java-pubsub/commit/3fa516496315b882da7ffbbc230a3e69acf08a48)) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.3 ([#282](https://www.github.com/googleapis/java-pubsub/issues/282)) ([744c268](https://www.github.com/googleapis/java-pubsub/commit/744c2687d50c79ff8556d455aab60928ab2f790c)) + +## [1.108.0](https://www.github.com/googleapis/java-pubsub/compare/v1.107.0...v1.108.0) (2020-07-09) + + +### Features + +* **deps:** adopt flatten plugin and google-cloud-shared-dependencies ([#259](https://www.github.com/googleapis/java-pubsub/issues/259)) ([6b0947b](https://www.github.com/googleapis/java-pubsub/commit/6b0947b0c142691a16190b7d15da136936517e5a)) +* implement max duration per ack extension ([#211](https://www.github.com/googleapis/java-pubsub/issues/211)) ([1427b8c](https://www.github.com/googleapis/java-pubsub/commit/1427b8ced4d7f75e4cb1b57dd898b18f0d232d19)) +* regenerated to pick up doc changes ([#246](https://www.github.com/googleapis/java-pubsub/issues/246)) ([a5f45ac](https://www.github.com/googleapis/java-pubsub/commit/a5f45ac0ad493856cd5e1743b8df4fc6d70c5ca9)) +* Send streaming pull flow control settings to server ([#267](https://www.github.com/googleapis/java-pubsub/issues/267)) ([9c750c8](https://www.github.com/googleapis/java-pubsub/commit/9c750c8e4899ae994a788c5323fc456ac5d7aa38)) + + +### Dependencies + +* update autovalue.version to v1.7.3 ([#244](https://www.github.com/googleapis/java-pubsub/issues/244)) ([6af6682](https://www.github.com/googleapis/java-pubsub/commit/6af6682a5c52af1b929634fe210ef342c5625fda)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.1 ([#247](https://www.github.com/googleapis/java-pubsub/issues/247)) ([fbceaed](https://www.github.com/googleapis/java-pubsub/commit/fbceaed9701811e3c818fe5696f04936ec447b96)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.2 ([#274](https://www.github.com/googleapis/java-pubsub/issues/274)) ([b101905](https://www.github.com/googleapis/java-pubsub/commit/b101905dedcaff4a50c7d3c6097fcb5c0e48310c)) + +## [1.107.0](https://www.github.com/googleapis/java-pubsub/compare/v1.106.0...v1.107.0) (2020-06-09) + + +### Features + +* add detach subscription rpc ([#216](https://www.github.com/googleapis/java-pubsub/issues/216)) ([09866b0](https://www.github.com/googleapis/java-pubsub/commit/09866b0d36e2dd1c994b4c91807d71552b65c8e1)) +* regenerated to pick up changes in the API or client library generator ([#185](https://www.github.com/googleapis/java-pubsub/issues/185)) ([16624f8](https://www.github.com/googleapis/java-pubsub/commit/16624f88ad19ccaf2ea074a62242496be103659f)), closes [#533](https://www.github.com/googleapis/java-pubsub/issues/533) [#535](https://www.github.com/googleapis/java-pubsub/issues/535) [#534](https://www.github.com/googleapis/java-pubsub/issues/534) + + +### Bug Fixes + +* update ignored diffs ([#206](https://www.github.com/googleapis/java-pubsub/issues/206)) ([240e141](https://www.github.com/googleapis/java-pubsub/commit/240e141a8b4f8e4d4e252672bb4ae4d091dde453)), closes [#6784](https://www.github.com/googleapis/java-pubsub/issues/6784) [#11](https://www.github.com/googleapis/java-pubsub/issues/11) + + +### Dependencies + +* bump shared-deps version and add back certain test deps ([#218](https://www.github.com/googleapis/java-pubsub/issues/218)) ([49ecc69](https://www.github.com/googleapis/java-pubsub/commit/49ecc69fb6a63abf6a83f82f2820ff386cdaf5fb)) +* remove grpc test dep since it's now in shared-deps ([#220](https://www.github.com/googleapis/java-pubsub/issues/220)) ([28ab521](https://www.github.com/googleapis/java-pubsub/commit/28ab5211c344d60743c3cb11f568c8f2a4e2c040)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.6.0 ([#219](https://www.github.com/googleapis/java-pubsub/issues/219)) ([c6fc69d](https://www.github.com/googleapis/java-pubsub/commit/c6fc69d47dea6f3833a9a2945d27ed3f9e310c52)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.7.0 ([#221](https://www.github.com/googleapis/java-pubsub/issues/221)) ([89eae9a](https://www.github.com/googleapis/java-pubsub/commit/89eae9a6c3dc585926f85fc0de2b80f7dbfedb42)) +* update dependency com.google.errorprone:error_prone_annotations to v2.4.0 ([#225](https://www.github.com/googleapis/java-pubsub/issues/225)) ([f375ecb](https://www.github.com/googleapis/java-pubsub/commit/f375ecbbd66e518a25c1d0459ba0634121ddced1)) + +## [1.106.0](https://www.github.com/googleapis/java-pubsub/compare/v1.105.1...v1.106.0) (2020-05-20) + + +### Features + +* implement google-cloud-shared-dependencies BOM ([#198](https://www.github.com/googleapis/java-pubsub/issues/198)) ([55bdc26](https://www.github.com/googleapis/java-pubsub/commit/55bdc2647f4f9949d015497ed4a35c24a3ecdfab)) +* set up repo for samples ([#196](https://www.github.com/googleapis/java-pubsub/issues/196)) ([3e1b136](https://www.github.com/googleapis/java-pubsub/commit/3e1b1360250ed8fa91b9fa6f36bc1d051aa38e2c)) + + +### Documentation + +* **fix:** update client documentation link ([#192](https://www.github.com/googleapis/java-pubsub/issues/192)) ([e6f0533](https://www.github.com/googleapis/java-pubsub/commit/e6f053399c45d02c7d641c4b2a84bff96b634e34)) + + +### Dependencies + +* update autovalue.version to v1.7.2 ([#184](https://www.github.com/googleapis/java-pubsub/issues/184)) ([040ff0b](https://www.github.com/googleapis/java-pubsub/commit/040ff0b7ce0a323a0e1ee575eb1c021dd644608b)) +* update dependency com.google.protobuf:protobuf-java to v3.12.0 ([#188](https://www.github.com/googleapis/java-pubsub/issues/188)) ([87e036e](https://www.github.com/googleapis/java-pubsub/commit/87e036ed6929dfa8f6d8e2eb099833276aa17a91)) + +### [1.105.1](https://www.github.com/googleapis/java-pubsub/compare/v1.105.0...v1.105.1) (2020-05-07) + + +### Bug Fixes + +* changing integration test push endpoint to be valid https ([#170](https://www.github.com/googleapis/java-pubsub/issues/170)) ([71f15a4](https://www.github.com/googleapis/java-pubsub/commit/71f15a4a90475c8e82c6cc6393d4232228273656)), closes [#6784](https://www.github.com/googleapis/java-pubsub/issues/6784) [#11](https://www.github.com/googleapis/java-pubsub/issues/11) + + +### Dependencies + +* update autovalue.version to v1.7.1 ([#173](https://www.github.com/googleapis/java-pubsub/issues/173)) ([77884f8](https://www.github.com/googleapis/java-pubsub/commit/77884f8c816bb189a1d5ecad3ab860b19df2804d)) +* update dependency com.google.api.grpc:proto-google-common-protos to v1.18.0 ([#176](https://www.github.com/googleapis/java-pubsub/issues/176)) ([486ed41](https://www.github.com/googleapis/java-pubsub/commit/486ed4130a17a0fa411a30e7c48bd04082e68458)) +* update dependency com.google.guava:guava-bom to v29 ([#146](https://www.github.com/googleapis/java-pubsub/issues/146)) ([16f1dbb](https://www.github.com/googleapis/java-pubsub/commit/16f1dbb3226af119cdbc234e8672608244d0a7fd)) +* update dependency com.google.http-client:google-http-client-bom to v1.35.0 ([#169](https://www.github.com/googleapis/java-pubsub/issues/169)) ([6346042](https://www.github.com/googleapis/java-pubsub/commit/6346042b09c5f7e302f75ad8e48cc2d08b6f8e64)) +* update dependency io.grpc:grpc-bom to v1.29.0 ([#162](https://www.github.com/googleapis/java-pubsub/issues/162)) ([b883b45](https://www.github.com/googleapis/java-pubsub/commit/b883b452676eeb7bd5a178cd1bb357e965a26ee8)) +* update dependency org.threeten:threetenbp to v1.4.4 ([#167](https://www.github.com/googleapis/java-pubsub/issues/167)) ([78ead3a](https://www.github.com/googleapis/java-pubsub/commit/78ead3a69ce493fdf57a372c1e135e71b8b5cb7c)) + +## [1.105.0](https://www.github.com/googleapis/java-pubsub/compare/v1.104.1...v1.105.0) (2020-04-13) + + +### Features + +* add interfaces for cloud pubsub publishers and subscribers ([#134](https://www.github.com/googleapis/java-pubsub/issues/134)) ([89fcc88](https://www.github.com/googleapis/java-pubsub/commit/89fcc8848cc7d421e8dde9b7dca28a6940d8386f)) + + +### Documentation + +* update libraries-bom ([#140](https://www.github.com/googleapis/java-pubsub/issues/140)) ([d8239bd](https://www.github.com/googleapis/java-pubsub/commit/d8239bdc080d0ef595bac90451485b1d3d50f266)) + +### [1.104.1](https://www.github.com/googleapis/java-pubsub/compare/v1.104.0...v1.104.1) (2020-04-08) + + +### Dependencies + +* update core dependencies ([#127](https://www.github.com/googleapis/java-pubsub/issues/127)) ([33c9293](https://www.github.com/googleapis/java-pubsub/commit/33c9293fbb7de6de6861c4b2c3e3e79fb9e57e7b)) +* update dependency com.google.cloud:google-cloud-core to v1.93.4 ([#129](https://www.github.com/googleapis/java-pubsub/issues/129)) ([78c0216](https://www.github.com/googleapis/java-pubsub/commit/78c021628c86317d3893f2797ccc5039cffd453a)) +* update dependency org.threeten:threetenbp to v1.4.3 ([#128](https://www.github.com/googleapis/java-pubsub/issues/128)) ([54650dd](https://www.github.com/googleapis/java-pubsub/commit/54650dd6115f055d8a66c164017d1a038552dfac)) + +## [1.104.0](https://www.github.com/googleapis/java-pubsub/compare/v1.103.1...v1.104.0) (2020-04-02) + + +### Features + +* Add flow control support to publisher ([#119](https://www.github.com/googleapis/java-pubsub/issues/119)) ([fdd9434](https://www.github.com/googleapis/java-pubsub/commit/fdd943433cface4bc6634f74aa12afa6e471f3a3)) +* add TopicName ([#113](https://www.github.com/googleapis/java-pubsub/issues/113)) ([4558c34](https://www.github.com/googleapis/java-pubsub/commit/4558c3430901cdaec12a43e06ea4fafaa01c08e0)) + + +### Bug Fixes + +* Re-generated to pick up changes in the API or client library generator. ([#104](https://www.github.com/googleapis/java-pubsub/issues/104)) ([0e366c3](https://www.github.com/googleapis/java-pubsub/commit/0e366c35580116fcd6aa40caadedd95be07bdd87)) + + +### Dependencies + +* update core dependencies ([#105](https://www.github.com/googleapis/java-pubsub/issues/105)) ([5639f63](https://www.github.com/googleapis/java-pubsub/commit/5639f6321e1506fdf803f5de58f2c7fdf5afb448)) +* update core dependencies to v1.55.0 ([#122](https://www.github.com/googleapis/java-pubsub/issues/122)) ([3ea1202](https://www.github.com/googleapis/java-pubsub/commit/3ea1202dbe13b60cfdc14c2855e878e190a52199)) +* update dependency com.google.api:api-common to v1.9.0 ([#121](https://www.github.com/googleapis/java-pubsub/issues/121)) ([30a1dee](https://www.github.com/googleapis/java-pubsub/commit/30a1deecbecf63d1629ae93407658865518febce)) +* update dependency org.threeten:threetenbp to v1.4.2 ([#116](https://www.github.com/googleapis/java-pubsub/issues/116)) ([e7c007b](https://www.github.com/googleapis/java-pubsub/commit/e7c007b917618e75f9c8fecd2475f31c7eba0817)) +* update opencensus.version to v0.26.0 ([#115](https://www.github.com/googleapis/java-pubsub/issues/115)) ([26aec5d](https://www.github.com/googleapis/java-pubsub/commit/26aec5d7ee45bec5b39b6cbe67122a6e5944268e)) + +### [1.103.1](https://www.github.com/googleapis/java-pubsub/compare/v1.103.0...v1.103.1) (2020-03-03) + + +### Bug Fixes + +* add a default value for max outstanding request bytes flow control setting ([#96](https://www.github.com/googleapis/java-pubsub/issues/96)) ([4a6046c](https://www.github.com/googleapis/java-pubsub/commit/4a6046c2b03ad1d7e08d6e6dc0d1817cbffc5283)) +* remove deprecated tag that was added prematurely ([#97](https://www.github.com/googleapis/java-pubsub/issues/97)) ([fbb87ef](https://www.github.com/googleapis/java-pubsub/commit/fbb87ef0d493fc9e375e860b52dd6a9b99e3cf00)) + + +### Dependencies + +* update core dependencies ([#100](https://www.github.com/googleapis/java-pubsub/issues/100)) ([8323b31](https://www.github.com/googleapis/java-pubsub/commit/8323b31b9349065f1798120b6ffdaff3372f8552)) +* update dependency com.google.cloud:google-cloud-core to v1.93.1 ([#102](https://www.github.com/googleapis/java-pubsub/issues/102)) ([33b12df](https://www.github.com/googleapis/java-pubsub/commit/33b12df2e8c54ac404aeabd97ef71404611f3e3b)) +* update dependency com.google.http-client:google-http-client-bom to v1.34.2 ([19fde3a](https://www.github.com/googleapis/java-pubsub/commit/19fde3ab100c4910c4d998fbf0e5380ad7732f90)) +* update dependency com.google.protobuf:protobuf-java to v3.11.4 ([e49a861](https://www.github.com/googleapis/java-pubsub/commit/e49a8615147779d9dab07661e7586395ffa26d1f)) +* update dependency io.grpc:grpc-bom to v1.27.1 ([013b0c3](https://www.github.com/googleapis/java-pubsub/commit/013b0c3e4ee09926efc88f43dde6d6265fb41171)) +* update dependency org.easymock:easymock to v4 ([#39](https://www.github.com/googleapis/java-pubsub/issues/39)) ([f803bee](https://www.github.com/googleapis/java-pubsub/commit/f803bee1292fb6e1961dabb25dca17c7c2bd5a04)) +* update opencensus.version to v0.25.0 ([#85](https://www.github.com/googleapis/java-pubsub/issues/85)) ([aeca5d4](https://www.github.com/googleapis/java-pubsub/commit/aeca5d413ae46dc9153c4db0135e594a426a7375)) + + +### Documentation + +* **regen:** switch to proto annotations ([#90](https://www.github.com/googleapis/java-pubsub/issues/90)) ([63c147a](https://www.github.com/googleapis/java-pubsub/commit/63c147a9250c7b07cb9c8cc7b086a68e0631a37d)) + +## [1.103.0](https://www.github.com/googleapis/java-pubsub/compare/v1.102.1...v1.103.0) (2020-02-20) + + +### Features + +* add randomly generated UUID to outgoing initial streaming pull requests ([#77](https://www.github.com/googleapis/java-pubsub/issues/77)) ([08e77d4](https://www.github.com/googleapis/java-pubsub/commit/08e77d428aa50bb53ed7d5b922e76c2da18ed6d1)) +* adding support for dead letter queues ([#60](https://www.github.com/googleapis/java-pubsub/issues/60)) ([f3c93fa](https://www.github.com/googleapis/java-pubsub/commit/f3c93fa8bf0eb8ebda6eea6c6c6a60a36dc69af2)) + + +### Bug Fixes + +* ensure all publishes complete before shutting down publisher ([#76](https://www.github.com/googleapis/java-pubsub/issues/76)) ([d0ab525](https://www.github.com/googleapis/java-pubsub/commit/d0ab52576c729091b4cdc72b378a305e102ca180)), closes [#6784](https://www.github.com/googleapis/java-pubsub/issues/6784) [#11](https://www.github.com/googleapis/java-pubsub/issues/11) +* removing delivery attempt attribute when dead lettering is not enabled ([#72](https://www.github.com/googleapis/java-pubsub/issues/72)) ([535854d](https://www.github.com/googleapis/java-pubsub/commit/535854df64234fe491cae1e3db0c96d685ef0800)) +* retry streaming subscriber connections on unknown ([#92](https://www.github.com/googleapis/java-pubsub/issues/92)) ([d702a5c](https://www.github.com/googleapis/java-pubsub/commit/d702a5caa2a1da7a160a449fd91681e38c034afc)) +* shutdown grpc stubs properly when a subscriber is stopped ([#74](https://www.github.com/googleapis/java-pubsub/issues/74)) ([9bcc433](https://www.github.com/googleapis/java-pubsub/commit/9bcc433e6d167f68256e0ede2a521296dcbc7412)), closes [#6784](https://www.github.com/googleapis/java-pubsub/issues/6784) [#11](https://www.github.com/googleapis/java-pubsub/issues/11) + + +### Dependencies + +* update core dependencies ([#56](https://www.github.com/googleapis/java-pubsub/issues/56)) ([0188a8a](https://www.github.com/googleapis/java-pubsub/commit/0188a8a550d3aeb2626e7398a2802bf1756240d7)) +* update dependency com.google.cloud:google-cloud-core to v1.92.5 ([c296feb](https://www.github.com/googleapis/java-pubsub/commit/c296febe426dc9453b050cb21bcb188a4d09ad50)) +* update dependency com.google.http-client:google-http-client-bom to v1.34.1 ([#71](https://www.github.com/googleapis/java-pubsub/issues/71)) ([69fc615](https://www.github.com/googleapis/java-pubsub/commit/69fc6155a4490dcad082abf7742b359c0a0ff885)) +* update dependency com.google.protobuf:protobuf-java to v3.11.3 ([#79](https://www.github.com/googleapis/java-pubsub/issues/79)) ([0f77732](https://www.github.com/googleapis/java-pubsub/commit/0f77732e751a83f61fe3b6a7e4b745003fc87474)) +* update dependency org.threeten:threetenbp to v1.4.1 ([4383d60](https://www.github.com/googleapis/java-pubsub/commit/4383d6064d8a3ef8d0dd9bc8c65e09b48d6f53dc)) + + +### Documentation + +* **regen:** update sample code to set total timeout, add API client header test ([8bc23bc](https://www.github.com/googleapis/java-pubsub/commit/8bc23bc3b68a2c3a2a7caa1d9859dfdd1b56c47d)) + +### [1.102.1](https://www.github.com/googleapis/java-pubsub/compare/v1.102.0...v1.102.1) (2020-01-07) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-core to v1.92.0 ([4b3c656](https://www.github.com/googleapis/java-pubsub/commit/4b3c656fbc50d5703bf830e2307fa6ba9cbe31cb)) +* update dependency com.google.cloud:google-cloud-core to v1.92.1 ([c9345e3](https://www.github.com/googleapis/java-pubsub/commit/c9345e3178d26e2f8872c3cc5173e4cb9fa61675)) +* update dependency com.google.errorprone:error_prone_annotations to v2.3.4 ([#13](https://www.github.com/googleapis/java-pubsub/issues/13)) ([a34c50c](https://www.github.com/googleapis/java-pubsub/commit/a34c50c28c0907129f5eb6bf1380b202eabd8c07)) +* update dependency com.google.guava:guava-bom to v28.2-android ([9f0a7b2](https://www.github.com/googleapis/java-pubsub/commit/9f0a7b2c390546321393c5ef0ea972167dac5049)) +* update dependency io.grpc:grpc-bom to v1.26.0 ([#38](https://www.github.com/googleapis/java-pubsub/issues/38)) ([c09da56](https://www.github.com/googleapis/java-pubsub/commit/c09da568fffde6256a20be5ff77e98d7a0ba044f)) + +## [1.102.0](https://www.github.com/googleapis/java-pubsub/compare/1.101.0...v1.102.0) (2019-12-04) + + +### Features + +* make repo releasable, add parent/bom ([#3](https://www.github.com/googleapis/java-pubsub/issues/3)) ([53c4030](https://www.github.com/googleapis/java-pubsub/commit/53c403008f891b79438a8b797156a473e47af5d6)) + + +### Bug Fixes + +* ordering keys publishing of last batch ([#9](https://www.github.com/googleapis/java-pubsub/issues/9)) ([02c3771](https://www.github.com/googleapis/java-pubsub/commit/02c3771846bec09c93441c490c7928090a8dd71e)) + + +### Dependencies + +* update dependency com.google.protobuf:protobuf-java to v3.11.1 ([#14](https://www.github.com/googleapis/java-pubsub/issues/14)) ([575b3d6](https://www.github.com/googleapis/java-pubsub/commit/575b3d624423d61b6475a86e019246d77f9957fe)) diff --git a/java-pubsub/README.md b/java-pubsub/README.md new file mode 100644 index 000000000000..29d6feb94d5e --- /dev/null +++ b/java-pubsub/README.md @@ -0,0 +1,425 @@ +# Google Cloud Pub/Sub Client for Java + +Java idiomatic client for [Cloud Pub/Sub][product-docs]. + +[![Maven][maven-version-image]][maven-version-link] +![Stability][stability-image] + +- [Product Documentation][product-docs] +- [Client Library Documentation][javadocs] + + +## Quickstart + +If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file: + +```xml + + + + com.google.cloud + libraries-bom + 26.76.0 + pom + import + + + + + + + com.google.cloud + google-cloud-pubsub + + + + +``` + +If you are using Maven without the BOM, add this to your dependencies: + + +```xml + + com.google.cloud + google-cloud-pubsub + 1.148.0 + + +``` + +If you are using Gradle 5.x or later, add this to your dependencies: + +```Groovy +implementation platform('com.google.cloud:libraries-bom:26.77.0') + +implementation 'com.google.cloud:google-cloud-pubsub' +``` +If you are using Gradle without BOM, add this to your dependencies: + +```Groovy +implementation 'com.google.cloud:google-cloud-pubsub:1.149.0' +``` + +If you are using SBT, add this to your dependencies: + +```Scala +libraryDependencies += "com.google.cloud" % "google-cloud-pubsub" % "1.149.0" +``` + +## Authentication + +See the [Authentication][authentication] section in the base directory's README. + +## Authorization + +The client application making API calls must be granted [authorization scopes][auth-scopes] required for the desired Cloud Pub/Sub APIs, and the authenticated principal must have the [IAM role(s)][predefined-iam-roles] required to access GCP resources using the Cloud Pub/Sub API calls. + +## Getting Started + +### Prerequisites + +You will need a [Google Cloud Platform Console][developer-console] project with the Cloud Pub/Sub [API enabled][enable-api]. +You will need to [enable billing][enable-billing] to use Google Cloud Pub/Sub. +[Follow these instructions][create-project] to get your project set up. You will also need to set up the local development environment by +[installing the Google Cloud Command Line Interface][cloud-cli] and running the following commands in command line: +`gcloud auth login` and `gcloud config set project [YOUR PROJECT ID]`. + +### Installation and setup + +You'll need to obtain the `google-cloud-pubsub` library. See the [Quickstart](#quickstart) section +to add `google-cloud-pubsub` as a dependency in your code. + +## About Cloud Pub/Sub + + +[Cloud Pub/Sub][product-docs] is designed to provide reliable, many-to-many, asynchronous messaging between applications. Publisher applications can send messages to a topic and other applications can subscribe to that topic to receive the messages. By decoupling senders and receivers, Google Cloud Pub/Sub allows developers to communicate between independently written applications. + +See the [Cloud Pub/Sub client library docs][javadocs] to learn how to +use this Cloud Pub/Sub Client Library. + + +#### Creating a topic + +With Pub/Sub you can create topics. A topic is a named resource to which messages are sent by +publishers. Add the following imports at the top of your file: + +```java +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.TopicName; +``` +Then, to create the topic, use the following code: + +```java +TopicName topic = TopicName.of("test-project", "test-topic"); +try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + topicAdminClient.createTopic(topic); +} +``` + +#### Publishing messages + +With Pub/Sub you can publish messages to a topic. Add the following import at the top of your file: + +```java +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutureCallback; +import com.google.api.core.ApiFutures; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +``` +Then, to publish messages asynchronously, use the following code: + +```java +Publisher publisher = null; +try { + publisher = Publisher.newBuilder(topic).build(); + ByteString data = ByteString.copyFromUtf8("my-message"); + PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build(); + ApiFuture messageIdFuture = publisher.publish(pubsubMessage); + ApiFutures.addCallback(messageIdFuture, new ApiFutureCallback() { + public void onSuccess(String messageId) { + System.out.println("published with message id: " + messageId); + } + + public void onFailure(Throwable t) { + System.out.println("failed to publish: " + t); + } + }, MoreExecutors.directExecutor()); + //... +} finally { + if (publisher != null) { + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } +} +``` + +#### Creating a subscription + +With Pub/Sub you can create subscriptions. A subscription represents the stream of messages from a +single, specific topic. Add the following imports at the top of your file: + +```java +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.pubsub.v1.PushConfig; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.TopicName; +``` +Then, to create the subscription, use the following code: + +```java +TopicName topic = TopicName.of("test-project", "test-topic"); +SubscriptionName subscription = SubscriptionName.of("test-project", "test-subscription"); + +try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + subscriptionAdminClient.createSubscription(subscription, topic, PushConfig.getDefaultInstance(), 0); +} +``` + +#### Pulling messages + +With Pub/Sub you can pull messages from a subscription. Add the following imports at the top of your +file: + +```java +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.TopicName; +``` +Then, to pull messages asynchronously, use the following code: + +```java +SubscriptionName subscription = SubscriptionName.of("test-project", "test-subscription"); + +MessageReceiver receiver = + new MessageReceiver() { + @Override + public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) { + System.out.println("got message: " + message.getData().toStringUtf8()); + consumer.ack(); + } + }; + +Subscriber subscriber = null; +try { + subscriber = Subscriber.newBuilder(subscription.toString(), receiver).build(); + subscriber.addListener( + new Subscriber.Listener() { + @Override + public void failed(Subscriber.State from, Throwable failure) { + // Handle failure. This is called when the Subscriber encountered a fatal error and is shutting down. + System.err.println(failure); + } + }, + MoreExecutors.directExecutor()); + subscriber.startAsync().awaitRunning(); + //... +} finally { + if (subscriber != null) { + subscriber.stopAsync(); + } +} +``` +#### Complete source code + +In [CreateTopicAndPublishMessages.java](https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-examples/src/main/java/com/google/cloud/examples/pubsub/snippets/CreateTopicAndPublishMessages.java) and [CreateSubscriptionAndConsumeMessages.java](https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-examples/src/main/java/com/google/cloud/examples/pubsub/snippets/CreateSubscriptionAndConsumeMessages.java) we put together all the code shown above into two programs. The programs assume that you are running on Compute Engine, App Engine Flexible or from your own desktop. + + + + +## Samples + +Samples are in the [`samples/`](https://github.com/googleapis/google-cloud-java/tree/main/samples) directory. + +| Sample | Source Code | Try it | +| --------------------------- | --------------------------------- | ------ | +| Commit Avro Schema Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CommitAvroSchemaExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CommitAvroSchemaExample.java) | +| Commit Proto Schema Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CommitProtoSchemaExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CommitProtoSchemaExample.java) | +| Create Avro Schema Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateAvroSchemaExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateAvroSchemaExample.java) | +| Create Big Query Subscription Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateBigQuerySubscriptionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateBigQuerySubscriptionExample.java) | +| Create Cloud Storage Subscription Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateCloudStorageSubscriptionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateCloudStorageSubscriptionExample.java) | +| Create Proto Schema Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateProtoSchemaExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateProtoSchemaExample.java) | +| Create Pull Subscription Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreatePullSubscriptionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreatePullSubscriptionExample.java) | +| Create Push Subscription Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreatePushSubscriptionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreatePushSubscriptionExample.java) | +| Create Subscription With Dead Letter Policy Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithDeadLetterPolicyExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateSubscriptionWithDeadLetterPolicyExample.java) | +| Create Subscription With Exactly Once Delivery | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithExactlyOnceDelivery.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateSubscriptionWithExactlyOnceDelivery.java) | +| Create Subscription With Filtering | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithFiltering.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateSubscriptionWithFiltering.java) | +| Create Subscription With Ordering | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithOrdering.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateSubscriptionWithOrdering.java) | +| Create Subscription With Smt Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithSmtExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateSubscriptionWithSmtExample.java) | +| Create Topic Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateTopicExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateTopicExample.java) | +| Create Topic With Aws Msk Ingestion Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateTopicWithAwsMskIngestionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateTopicWithAwsMskIngestionExample.java) | +| Create Topic With Azure Event Hubs Ingestion Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateTopicWithAzureEventHubsIngestionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateTopicWithAzureEventHubsIngestionExample.java) | +| Create Topic With Cloud Storage Ingestion Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateTopicWithCloudStorageIngestionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateTopicWithCloudStorageIngestionExample.java) | +| Create Topic With Confluent Cloud Ingestion Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateTopicWithConfluentCloudIngestionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateTopicWithConfluentCloudIngestionExample.java) | +| Create Topic With Kinesis Ingestion Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateTopicWithKinesisIngestionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateTopicWithKinesisIngestionExample.java) | +| Create Topic With Schema Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateTopicWithSchemaExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateTopicWithSchemaExample.java) | +| Create Topic With Schema Revisions Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateTopicWithSchemaRevisionsExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateTopicWithSchemaRevisionsExample.java) | +| Create Topic With Smt Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateTopicWithSmtExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateTopicWithSmtExample.java) | +| Create Unwrapped Push Subscription Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/CreateUnwrappedPushSubscriptionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/CreateUnwrappedPushSubscriptionExample.java) | +| Delete Schema Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/DeleteSchemaExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/DeleteSchemaExample.java) | +| Delete Schema Revision Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/DeleteSchemaRevisionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/DeleteSchemaRevisionExample.java) | +| Delete Subscription Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/DeleteSubscriptionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/DeleteSubscriptionExample.java) | +| Delete Topic Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/DeleteTopicExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/DeleteTopicExample.java) | +| Detach Subscription Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/DetachSubscriptionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/DetachSubscriptionExample.java) | +| Get Schema Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/GetSchemaExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/GetSchemaExample.java) | +| Get Schema Revision Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/GetSchemaRevisionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/GetSchemaRevisionExample.java) | +| Get Subscription Policy Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/GetSubscriptionPolicyExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/GetSubscriptionPolicyExample.java) | +| Get Topic Policy Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/GetTopicPolicyExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/GetTopicPolicyExample.java) | +| List Schema Revisions Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/ListSchemaRevisionsExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/ListSchemaRevisionsExample.java) | +| List Schemas Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/ListSchemasExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/ListSchemasExample.java) | +| List Subscriptions In Project Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/ListSubscriptionsInProjectExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/ListSubscriptionsInProjectExample.java) | +| List Subscriptions In Topic Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/ListSubscriptionsInTopicExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/ListSubscriptionsInTopicExample.java) | +| List Topics Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/ListTopicsExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/ListTopicsExample.java) | +| Open Telemetry Publisher Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/OpenTelemetryPublisherExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/OpenTelemetryPublisherExample.java) | +| Open Telemetry Subscriber Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/OpenTelemetrySubscriberExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/OpenTelemetrySubscriberExample.java) | +| Optimistic Subscribe Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/OptimisticSubscribeExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/OptimisticSubscribeExample.java) | +| Publish Avro Records Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/PublishAvroRecordsExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/PublishAvroRecordsExample.java) | +| Publish Protobuf Messages Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/PublishProtobufMessagesExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/PublishProtobufMessagesExample.java) | +| Publish With Batch Settings Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/PublishWithBatchSettingsExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/PublishWithBatchSettingsExample.java) | +| Publish With Concurrency Control Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/PublishWithConcurrencyControlExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/PublishWithConcurrencyControlExample.java) | +| Publish With Custom Attributes Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/PublishWithCustomAttributesExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/PublishWithCustomAttributesExample.java) | +| Publish With Error Handler Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/PublishWithErrorHandlerExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/PublishWithErrorHandlerExample.java) | +| Publish With Flow Control Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/PublishWithFlowControlExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/PublishWithFlowControlExample.java) | +| Publish With Grpc Compression Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/PublishWithGrpcCompressionExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/PublishWithGrpcCompressionExample.java) | +| Publish With Ordering Keys | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/PublishWithOrderingKeys.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/PublishWithOrderingKeys.java) | +| Publish With Retry Settings Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/PublishWithRetrySettingsExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/PublishWithRetrySettingsExample.java) | +| Publisher Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/PublisherExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/PublisherExample.java) | +| Receive Messages With Delivery Attempts Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/ReceiveMessagesWithDeliveryAttemptsExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/ReceiveMessagesWithDeliveryAttemptsExample.java) | +| Remove Dead Letter Policy Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/RemoveDeadLetterPolicyExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/RemoveDeadLetterPolicyExample.java) | +| Resume Publish With Ordering Keys | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/ResumePublishWithOrderingKeys.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/ResumePublishWithOrderingKeys.java) | +| Rollback Schema Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/RollbackSchemaExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/RollbackSchemaExample.java) | +| Set Subscription Policy Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/SetSubscriptionPolicyExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/SetSubscriptionPolicyExample.java) | +| Set Topic Policy Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/SetTopicPolicyExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/SetTopicPolicyExample.java) | +| Subscribe Async Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/SubscribeAsyncExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/SubscribeAsyncExample.java) | +| Subscribe Sync Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/SubscribeSyncExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/SubscribeSyncExample.java) | +| Subscribe Sync With Lease Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/SubscribeSyncWithLeaseExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/SubscribeSyncWithLeaseExample.java) | +| Subscribe With Avro Schema Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/SubscribeWithAvroSchemaExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/SubscribeWithAvroSchemaExample.java) | +| Subscribe With Avro Schema Revisions Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/SubscribeWithAvroSchemaRevisionsExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/SubscribeWithAvroSchemaRevisionsExample.java) | +| Subscribe With Concurrency Control Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/SubscribeWithConcurrencyControlExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/SubscribeWithConcurrencyControlExample.java) | +| Subscribe With Custom Attributes Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/SubscribeWithCustomAttributesExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/SubscribeWithCustomAttributesExample.java) | +| Subscribe With Error Listener Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/SubscribeWithErrorListenerExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/SubscribeWithErrorListenerExample.java) | +| Subscribe With Exactly Once Consumer With Response Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/SubscribeWithExactlyOnceConsumerWithResponseExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/SubscribeWithExactlyOnceConsumerWithResponseExample.java) | +| Subscribe With Flow Control Settings Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/SubscribeWithFlowControlSettingsExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/SubscribeWithFlowControlSettingsExample.java) | +| Subscribe With Proto Schema Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/SubscribeWithProtoSchemaExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/SubscribeWithProtoSchemaExample.java) | +| Test Subscription Permissions Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/TestSubscriptionPermissionsExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/TestSubscriptionPermissionsExample.java) | +| Test Topic Permissions Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/TestTopicPermissionsExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/TestTopicPermissionsExample.java) | +| Update Dead Letter Policy Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/UpdateDeadLetterPolicyExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/UpdateDeadLetterPolicyExample.java) | +| Update Push Configuration Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/UpdatePushConfigurationExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/UpdatePushConfigurationExample.java) | +| Update Topic Schema Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/UpdateTopicSchemaExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/UpdateTopicSchemaExample.java) | +| Update Topic Type Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/UpdateTopicTypeExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/UpdateTopicTypeExample.java) | +| Use Pub Sub Emulator Example | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/pubsub/UsePubSubEmulatorExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/pubsub/UsePubSubEmulatorExample.java) | +| State | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/utilities/State.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/utilities/State.java) | +| State Proto | [source code](https://github.com/googleapis/google-cloud-java/blob/main/samples/snippets/src/main/java/utilities/StateProto.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-cloud-java&page=editor&open_in_editor=samples/snippets/src/main/java/utilities/StateProto.java) | + + + +## Troubleshooting + +To get help, follow the instructions in the [shared Troubleshooting document][troubleshooting]. + +## Transport + +Cloud Pub/Sub uses both gRPC and HTTP/JSON for the transport layer. + +## Supported Java Versions + +Java 8 or above is required for using this client. + +Google's Java client libraries, +[Google Cloud Client Libraries][cloudlibs] +and +[Google Cloud API Libraries][apilibs], +follow the +[Oracle Java SE support roadmap][oracle] +(see the Oracle Java SE Product Releases section). + +### For new development + +In general, new feature development occurs with support for the lowest Java +LTS version covered by Oracle's Premier Support (which typically lasts 5 years +from initial General Availability). If the minimum required JVM for a given +library is changed, it is accompanied by a [semver][semver] major release. + +Java 11 and (in September 2021) Java 17 are the best choices for new +development. + +### Keeping production systems current + +Google tests its client libraries with all current LTS versions covered by +Oracle's Extended Support (which typically lasts 8 years from initial +General Availability). + +#### Legacy support + +Google's client libraries support legacy versions of Java runtimes with long +term stable libraries that don't receive feature updates on a best efforts basis +as it may not be possible to backport all patches. + +Google provides updates on a best efforts basis to apps that continue to use +Java 7, though apps might need to upgrade to current versions of the library +that supports their JVM. + +#### Where to find specific information + +The latest versions and the supported Java versions are identified on +the individual GitHub repository `github.com/GoogleAPIs/java-SERVICENAME` +and on [google-cloud-java][g-c-j]. + +## Versioning + + +This library follows [Semantic Versioning](http://semver.org/). + + + +## Contributing + + +Contributions to this library are always welcome and highly encouraged. + +See [CONTRIBUTING][contributing] for more information how to get started. + +Please note that this project is released with a Contributor Code of Conduct. By participating in +this project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more +information. + + +## License + +Apache 2.0 - See [LICENSE][license] for more information. + +Java is a registered trademark of Oracle and/or its affiliates. + +[product-docs]: https://cloud.google.com/pubsub/docs/ +[javadocs]: https://cloud.google.com/java/docs/reference/google-cloud-pubsub/latest/history +[stability-image]: https://img.shields.io/badge/stability-stable-green +[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-pubsub.svg +[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-pubsub/1.149.0 +[authentication]: https://github.com/googleapis/google-cloud-java#authentication +[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes +[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles +[iam-policy]: https://cloud.google.com/iam/docs/overview#cloud-iam-policy +[developer-console]: https://console.developers.google.com/ +[create-project]: https://cloud.google.com/resource-manager/docs/creating-managing-projects +[cloud-cli]: https://cloud.google.com/cli +[troubleshooting]: https://github.com/googleapis/google-cloud-java/blob/main/TROUBLESHOOTING.md +[contributing]: https://github.com/googleapis/google-cloud-java/blob/main/CONTRIBUTING.md +[code-of-conduct]: https://github.com/googleapis/google-cloud-java/blob/main/CODE_OF_CONDUCT.md#contributor-code-of-conduct +[license]: https://github.com/googleapis/google-cloud-java/blob/main/LICENSE +[enable-billing]: https://cloud.google.com/apis/docs/getting-started#enabling_billing +[enable-api]: https://console.cloud.google.com/flows/enableapi?apiid=pubsub.googleapis.com +[libraries-bom]: https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/The-Google-Cloud-Platform-Libraries-BOM +[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png + +[semver]: https://semver.org/ +[cloudlibs]: https://cloud.google.com/apis/docs/client-libraries-explained +[apilibs]: https://cloud.google.com/apis/docs/client-libraries-explained#google_api_client_libraries +[oracle]: https://www.oracle.com/java/technologies/java-se-support-roadmap.html +[g-c-j]: http://github.com/googleapis/google-cloud-java diff --git a/java-pubsub/google-cloud-pubsub-bom/pom.xml b/java-pubsub/google-cloud-pubsub-bom/pom.xml new file mode 100644 index 000000000000..b73e7e57bc37 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub-bom/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + com.google.cloud + google-cloud-pubsub-bom + 1.149.1-SNAPSHOT + pom + + com.google.cloud + google-cloud-pom-parent + 1.82.0-SNAPSHOT + ../../google-cloud-pom-parent/pom.xml + + + Google Cloud pubsub BOM + https://github.com/googleapis/google-cloud-java + + BOM for Google Cloud Pub/Sub + + + + Google LLC + + + + + chingor13 + Jeff Ching + chingor@google.com + Google LLC + + Developer + + + + + + scm:git:https://github.com/googleapis/google-cloud-java.git + scm:git:git@github.com:googleapis/google-cloud-java.git + https://github.com/googleapis/google-cloud-java + + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + + + com.google.cloud + google-cloud-pubsub + 1.149.1-SNAPSHOT + + + com.google.api.grpc + grpc-google-cloud-pubsub-v1 + 1.131.1-SNAPSHOT + + + com.google.api.grpc + proto-google-cloud-pubsub-v1 + 1.131.1-SNAPSHOT + + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + true + + + + + diff --git a/java-pubsub/google-cloud-pubsub/EnableAutoValue.txt b/java-pubsub/google-cloud-pubsub/EnableAutoValue.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java-pubsub/google-cloud-pubsub/clirr-ignored-differences.xml b/java-pubsub/google-cloud-pubsub/clirr-ignored-differences.xml new file mode 100644 index 000000000000..e4629e32e63d --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/clirr-ignored-differences.xml @@ -0,0 +1,24 @@ + + + + + 7005 + + com/google/cloud/pubsub/v1/MessageDispatcher$Builder + *(org.threeten.bp.Duration) + *(java.time.Duration) + + + 7005 + + com/google/cloud/pubsub/v1/StreamingSubscriberConnection$Builder + *(org.threeten.bp.Duration) + *(java.time.Duration) + + + 7002 + + com/google/cloud/pubsub/v1/StreamingSubscriberConnection$Builder + * setEodAckCallbackExecutor(*) + + diff --git a/java-pubsub/google-cloud-pubsub/pom.xml b/java-pubsub/google-cloud-pubsub/pom.xml new file mode 100644 index 000000000000..7f2d39455d40 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/pom.xml @@ -0,0 +1,226 @@ + + + 4.0.0 + com.google.cloud + google-cloud-pubsub + 1.149.1-SNAPSHOT + jar + Google Cloud Pub/Sub + https://github.com/googleapis/google-cloud-java + Java idiomatic client for Google Cloud Pub/Sub + + com.google.cloud + google-cloud-pubsub-parent + 1.149.1-SNAPSHOT + + + google-cloud-pubsub + + + + io.grpc + grpc-api + + + io.grpc + grpc-stub + runtime + + + io.grpc + grpc-protobuf + + + com.google.api + api-common + + + com.google.protobuf + protobuf-java + + + com.google.api.grpc + proto-google-common-protos + + + com.google.auth + google-auth-library-oauth2-http + + + com.google.api.grpc + proto-google-cloud-pubsub-v1 + + + com.google.api.grpc + proto-google-iam-v1 + + + com.google.guava + guava + + + com.google.api + gax + + + com.google.api + gax-grpc + + + com.google.api + gax-httpjson + + + org.threeten + threetenbp + + + com.google.code.findbugs + jsr305 + + + io.opencensus + opencensus-api + + + io.grpc + grpc-inprocess + test + + + com.google.errorprone + error_prone_annotations + + + com.google.auto.value + auto-value-annotations + + + com.google.http-client + google-http-client + runtime + + + io.opentelemetry + opentelemetry-api + + + io.opentelemetry + opentelemetry-context + + + + junit + junit + test + + + com.google.truth + truth + test + + + org.easymock + easymock + test + + + org.mockito + mockito-core + test + + + com.google.cloud + google-cloud-core + test + + + com.google.api.grpc + grpc-google-cloud-pubsub-v1 + test + + + com.google.api.grpc + grpc-google-iam-v1 + test + + + io.opencensus + opencensus-impl + test + + + io.opentelemetry + opentelemetry-sdk-trace + test + + + io.opentelemetry + opentelemetry-sdk-testing + test + + + org.assertj + assertj-core + test + + + com.google.api + gax + testlib + test + + + com.google.api + gax-grpc + testlib + test + + + com.google.api + gax-httpjson + testlib + test + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + com.google.auth:google-auth-library-oauth2-http:jar + io.opencensus:opencensus-impl + javax.annotation:javax.annotation-api + org.assertj:assertj-core + + + + + + + + org.codehaus.mojo + flatten-maven-plugin + + + + + + + java9 + + [9,) + + + + javax.annotation + javax.annotation-api + + + + + diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumer.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumer.java new file mode 100644 index 000000000000..9fd9bc837c5c --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumer.java @@ -0,0 +1,32 @@ +/* + * Copyright 2017 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. + */ + +package com.google.cloud.pubsub.v1; + +/** Accepts a reply, sending it to the service. */ +public interface AckReplyConsumer { + /** + * Acknowledges that the message has been successfully processed. The service will not send the + * message again. + */ + void ack(); + + /** + * Signals that the message has not been successfully processed. The service should resend the + * message. + */ + void nack(); +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumerImpl.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumerImpl.java new file mode 100644 index 000000000000..f9d4bd15ad92 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumerImpl.java @@ -0,0 +1,37 @@ +/* + * Copyright 2022 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. + */ +package com.google.cloud.pubsub.v1; + +import com.google.api.core.SettableApiFuture; + +public class AckReplyConsumerImpl implements AckReplyConsumer { + final SettableApiFuture ackReplySettableApiFuture; + + public AckReplyConsumerImpl( + final SettableApiFuture ackReplySettableApiFuture) { + this.ackReplySettableApiFuture = ackReplySettableApiFuture; + } + + @Override + public void ack() { + ackReplySettableApiFuture.set(MessageDispatcher.AckReply.ACK); + } + + @Override + public void nack() { + ackReplySettableApiFuture.set(MessageDispatcher.AckReply.NACK); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumerWithResponse.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumerWithResponse.java new file mode 100644 index 000000000000..445ba7287783 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumerWithResponse.java @@ -0,0 +1,55 @@ +/* + * Copyright 2022 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.ApiFuture; +import com.google.api.core.BetaApi; + +/** + * Acknowledging a message in Pub/Sub means that you are done with it, and it will not be delivered + * to this subscription again. You should avoid acknowledging messages until you have *finished* + * processing them, so that in the event of a failure, you receive the message again. + * + *

If exactly-once delivery is enabled on the subscription, the future returned by the ack/nack + * methods track the state of acknowledgement operation by the server. If the future completes + * successfully, the message is guaranteed NOT to be re-delivered. Otherwise, the future will + * contain an exception with more details about the failure and the message may be re-delivered. + * + *

If exactly-once delivery is NOT enabled on the subscription, the future returns immediately + * with an AckResponse.SUCCESS. Because re-deliveries are possible, you should ensure that your + * processing code is idempotent, as you may receive any given message more than once. + */ +@BetaApi( + "This is a preview feature. For more details, see" + + " https://cloud.google.com/pubsub/docs/exactly-once-delivery.") +public interface AckReplyConsumerWithResponse { + /** + * Acknowledges that the message has been successfully processed. The service will not send the + * message again. + * + *

A future representing the server response is returned + */ + ApiFuture ack(); + + /** + * Signals that the message has not been successfully processed. The service should resend the + * message. + * + *

A future representing the server response is returned + */ + ApiFuture nack(); +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumerWithResponseImpl.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumerWithResponseImpl.java new file mode 100644 index 000000000000..6e78a1392e40 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckReplyConsumerWithResponseImpl.java @@ -0,0 +1,43 @@ +/* + * Copyright 2022 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. + */ +package com.google.cloud.pubsub.v1; + +import com.google.api.core.ApiFuture; +import com.google.api.core.SettableApiFuture; + +public class AckReplyConsumerWithResponseImpl implements AckReplyConsumerWithResponse { + final SettableApiFuture ackReplySettableApiFuture; + final SettableApiFuture messageFuture; + + public AckReplyConsumerWithResponseImpl( + SettableApiFuture ackReplySettableApiFuture, + SettableApiFuture messageFuture) { + this.ackReplySettableApiFuture = ackReplySettableApiFuture; + this.messageFuture = messageFuture; + } + + @Override + public ApiFuture ack() { + ackReplySettableApiFuture.set(MessageDispatcher.AckReply.ACK); + return messageFuture; + } + + @Override + public ApiFuture nack() { + ackReplySettableApiFuture.set(MessageDispatcher.AckReply.NACK); + return messageFuture; + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckRequestData.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckRequestData.java new file mode 100644 index 000000000000..5cab83f49394 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckRequestData.java @@ -0,0 +1,104 @@ +/* + * Copyright 2022 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.SettableApiFuture; +import java.util.Optional; + +public class AckRequestData { + private final String ackId; + private final Optional> messageFuture; + private PubsubMessageWrapper messageWrapper; + + protected AckRequestData(Builder builder) { + this.ackId = builder.ackId; + this.messageFuture = builder.messageFuture; + this.messageWrapper = builder.messageWrapper; + } + + public String getAckId() { + return ackId; + } + + public SettableApiFuture getMessageFutureIfExists() { + return this.messageFuture.orElse(null); + } + + /** + * Returns an empty PubsubMessageWrapper with OpenTelemetry tracing disabled. This allows methods + * that use this method to be unit tested. + */ + public PubsubMessageWrapper getMessageWrapper() { + if (this.messageWrapper == null) { + return PubsubMessageWrapper.newBuilder(null, null).build(); + } + return messageWrapper; + } + + public AckRequestData setResponse(AckResponse ackResponse, boolean setResponseOnSuccess) { + if (this.messageFuture.isPresent() && !this.messageFuture.get().isDone()) { + switch (ackResponse) { + case SUCCESSFUL: + if (setResponseOnSuccess) { + this.messageFuture.get().set(ackResponse); + } + break; + case INVALID: + case OTHER: + case PERMISSION_DENIED: + case FAILED_PRECONDITION: + // Non-succesful messages will get set for both acks, nacks, and modacks + this.messageFuture.get().set(ackResponse); + break; + } + } + return this; + } + + public boolean hasMessageFuture() { + return this.messageFuture.isPresent(); + } + + public static Builder newBuilder(String ackId) { + return new Builder(ackId); + } + + /** Builder of {@link AckRequestData AckRequestData}. */ + protected static final class Builder { + private final String ackId; + private Optional> messageFuture = Optional.empty(); + private PubsubMessageWrapper messageWrapper; + + protected Builder(String ackId) { + this.ackId = ackId; + } + + public Builder setMessageFuture(SettableApiFuture messageFuture) { + this.messageFuture = Optional.of(messageFuture); + return this; + } + + public Builder setMessageWrapper(PubsubMessageWrapper messageWrapper) { + this.messageWrapper = messageWrapper; + return this; + } + + public AckRequestData build() { + return new AckRequestData(this); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckResponse.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckResponse.java new file mode 100644 index 000000000000..162d87bc189d --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/AckResponse.java @@ -0,0 +1,25 @@ +/* + * Copyright 2021 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. + */ + +package com.google.cloud.pubsub.v1; + +public enum AckResponse { + PERMISSION_DENIED, + FAILED_PRECONDITION, + SUCCESSFUL, + INVALID, + OTHER +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/LoggingUtil.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/LoggingUtil.java new file mode 100644 index 000000000000..dbc3a5d86e88 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/LoggingUtil.java @@ -0,0 +1,146 @@ +/* + * Copyright 2026 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.pubsub.v1.PubsubMessage; +import java.util.logging.Level; +import java.util.logging.Logger; + +public final class LoggingUtil { + // Instantiate all loggers as static final fields to maintain strong references + + private static final Logger slowAckLogger = Logger.getLogger("slow-ack"); + private static final Logger callbackDeliveryLogger = Logger.getLogger("callback-delivery"); + private static final Logger expiryLogger = Logger.getLogger("expiry"); + private static final Logger callbackExceptionsLogger = Logger.getLogger("callback-exceptions"); + private static final Logger ackBatchLogger = Logger.getLogger("ack-batch"); + private static final Logger subscriberFlowControlLogger = + Logger.getLogger("subscriber-flow-control"); + private static final Logger ackNackLogger = Logger.getLogger("ack-nack"); + private static final Logger publishBatchLogger = Logger.getLogger("publish-batch"); + private static final Logger subscriberStreamsLogger = Logger.getLogger("subscriber-streams"); + + public enum SubSystem { + SLOW_ACK(slowAckLogger), + CALLBACK_DELIVERY(callbackDeliveryLogger), + EXPIRY(expiryLogger), + CALLBACK_EXCEPTIONS(callbackExceptionsLogger), + ACK_BATCH(ackBatchLogger), + SUBSCRIBER_FLOW_CONTROL(subscriberFlowControlLogger), + ACK_NACK(ackNackLogger), + PUBLISH_BATCH(publishBatchLogger), + SUBSCRIBER_STREAMS(subscriberStreamsLogger); + + private final Logger logger; + + SubSystem(Logger logger) { + this.logger = logger; + } + + public Logger getLogger() { + return logger; + } + } + + public LoggingUtil() {} + + private String getSubscriptionLogPrefix( + PubsubMessageWrapper messageWrapper, String ackId, boolean exactlyOnceDeliveryEnabled) { + if (messageWrapper == null || messageWrapper.getPubsubMessage() == null) { + return " Ack ID: " + + ackId + + ", Exactly Once Delivery: " + + exactlyOnceDeliveryEnabled + + " (Message details not available)"; + } + + PubsubMessage message = messageWrapper.getPubsubMessage(); + String messageId = message.getMessageId(); + String orderingKey = message.getOrderingKey(); + + StringBuilder sb = new StringBuilder(); + sb.append("Message ID: ").append(messageId); + sb.append(", Ack ID: ").append(ackId); + if (orderingKey != null && !orderingKey.isEmpty()) { + sb.append(", Ordering Key: ").append(orderingKey); + } + sb.append(", Exactly Once Delivery: ").append(exactlyOnceDeliveryEnabled); + return sb.toString(); + } + + private String getPublisherLogPrefix(PubsubMessageWrapper messageWrapper) { + if (messageWrapper == null || messageWrapper.getPubsubMessage() == null) { + return " (Message details not available)"; + } + + PubsubMessage message = messageWrapper.getPubsubMessage(); + String messageId = message.getMessageId(); + String orderingKey = message.getOrderingKey(); + + StringBuilder sb = new StringBuilder(); + sb.append("Message ID: ").append(messageId); + if (orderingKey != null && !orderingKey.isEmpty()) { + sb.append(", Ordering Key: ").append(orderingKey); + } + return sb.toString(); + } + + public void logSubscriber( + SubSystem subSystem, + Level level, + String msg, + PubsubMessageWrapper messageWrapper, + String ackId, + boolean exactlyOnceDeliveryEnabled) { + Logger logger = subSystem.getLogger(); + if (logger.isLoggable(level)) { + String prefix = getSubscriptionLogPrefix(messageWrapper, ackId, exactlyOnceDeliveryEnabled); + logger.log(level, prefix + " - " + msg); + } + } + + public void logSubscriberWithThrowable( + SubSystem subSystem, + Level level, + String msg, + PubsubMessageWrapper messageWrapper, + String ackId, + boolean exactlyOnceDeliveryEnabled, + Throwable throwable) { + Logger logger = subSystem.getLogger(); + if (logger.isLoggable(level)) { + String prefix = getSubscriptionLogPrefix(messageWrapper, ackId, exactlyOnceDeliveryEnabled); + logger.log(level, prefix + " - " + msg, throwable); + } + } + + public void logPublisher( + SubSystem subSystem, Level level, String msg, PubsubMessageWrapper messageWrapper) { + Logger logger = subSystem.getLogger(); + if (logger.isLoggable(level)) { + String prefix = getPublisherLogPrefix(messageWrapper); + logger.log(level, prefix + " - " + msg); + } + } + + public void logEvent(SubSystem subSystem, Level level, String msg, Object... params) { + Logger logger = subSystem.getLogger(); + if (logger.isLoggable(level)) { + logger.log(level, msg, params); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageDispatcher.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageDispatcher.java new file mode 100644 index 000000000000..f2f7cd2e7e61 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageDispatcher.java @@ -0,0 +1,954 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.ApiClock; +import com.google.api.core.ApiFutureCallback; +import com.google.api.core.ApiFutures; +import com.google.api.core.InternalApi; +import com.google.api.core.SettableApiFuture; +import com.google.api.gax.batching.FlowController; +import com.google.api.gax.batching.FlowController.FlowControlException; +import com.google.api.gax.core.Distribution; +import com.google.common.primitives.Ints; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.ReceivedMessage; +import com.google.pubsub.v1.SubscriptionName; +import java.time.Duration; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.Executor; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Dispatches messages to a message receiver while handling the messages acking and lease + * extensions. + */ +class MessageDispatcher { + private static final Logger logger = Logger.getLogger(MessageDispatcher.class.getName()); + private LoggingUtil loggingUtil = new LoggingUtil(); + + @InternalApi static final double PERCENTILE_FOR_ACK_DEADLINE_UPDATES = 99.9; + @InternalApi static final Duration PENDING_ACKS_SEND_DELAY = Duration.ofMillis(100); + @InternalApi static final long FINAL_NACK_TIMEOUT = Duration.ofSeconds(1).toMillis(); + + private final Executor executor; + private final SequentialExecutorService.AutoExecutor sequentialExecutor; + private final ScheduledExecutorService systemExecutor; + private final ApiClock clock; + + private final Duration ackExpirationPadding; + private final Duration maxAckExtensionPeriod; + private int minDurationPerAckExtensionSeconds; + private final boolean minDurationPerAckExtensionDefaultUsed; + private final int maxDurationPerAckExtensionSeconds; + private final boolean maxDurationPerAckExtensionDefaultUsed; + + // Only one of receiver or receiverWithAckResponse will be set + private MessageReceiver receiver; + private MessageReceiverWithAckResponse receiverWithAckResponse; + + private final AckProcessor ackProcessor; + + private final FlowController flowController; + + private AtomicBoolean exactlyOnceDeliveryEnabled = new AtomicBoolean(false); + private AtomicBoolean messageOrderingEnabled = new AtomicBoolean(false); + + private final Waiter messagesWaiter; + + // Maps ID to "total expiration time". If it takes longer than this, stop extending. + private final ConcurrentMap pendingMessages = new ConcurrentHashMap<>(); + + private final LinkedBlockingQueue pendingAcks = new LinkedBlockingQueue<>(); + private final LinkedBlockingQueue pendingNacks = new LinkedBlockingQueue<>(); + private final LinkedBlockingQueue pendingReceipts = new LinkedBlockingQueue<>(); + private final LinkedHashMap outstandingReceipts = + new LinkedHashMap(); + private final AtomicInteger messageDeadlineSeconds = new AtomicInteger(); + private final AtomicBoolean extendDeadline = new AtomicBoolean(true); + private final Lock jobLock; + private ScheduledFuture backgroundJob; + private ScheduledFuture setExtendedDeadlineFuture; + + // To keep track of number of seconds the receiver takes to process messages. + private final Distribution ackLatencyDistribution; + + private final SubscriptionName subscriptionNameObject; + private final boolean enableOpenTelemetryTracing; + private OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(null, false); + private final SubscriberShutdownSettings subscriberShutdownSettings; + private final AtomicBoolean nackImmediatelyShutdownInProgress = new AtomicBoolean(false); + + private final double slowAckPercentile = 99.0; + + /** Internal representation of a reply to a Pubsub message, to be sent back to the service. */ + public enum AckReply { + ACK, + NACK + } + + /** Handles callbacks for acking/nacking messages from the {@link MessageReceiver}. */ + private class AckHandler implements ApiFutureCallback { + private final AckRequestData ackRequestData; + private final int outstandingBytes; + private final long receivedTimeMillis; + private final Instant totalExpiration; + + private AckHandler( + AckRequestData ackRequestData, int outstandingBytes, Instant totalExpiration) { + this.ackRequestData = ackRequestData; + this.outstandingBytes = outstandingBytes; + this.receivedTimeMillis = clock.millisTime(); + this.totalExpiration = totalExpiration; + } + + public AckRequestData getAckRequestData() { + return ackRequestData; + } + + public SettableApiFuture getMessageFutureIfExists() { + return this.ackRequestData.getMessageFutureIfExists(); + } + + /** Stop extending deadlines for this message and free flow control. */ + private void forget() { + if (pendingMessages.remove(this.ackRequestData.getAckId()) == null) { + /* + * We're forgetting the message for the second time. Probably because we ran out of total + * expiration, forget the message, then the user finishes working on the message, and forget + * again. Turn the second forget into a no-op so we don't free twice. + */ + return; + } + flowController.release(1, outstandingBytes); + messagesWaiter.incrementPendingCount(-1); + } + + @Override + public void onFailure(Throwable t) { + loggingUtil.logSubscriberWithThrowable( + LoggingUtil.SubSystem.CALLBACK_EXCEPTIONS, + Level.WARNING, + "MessageReceiver exception.", + this.ackRequestData.getMessageWrapper(), + this.ackRequestData.getAckId(), + exactlyOnceDeliveryEnabled.get(), + t); + this.ackRequestData.setResponse(AckResponse.OTHER, false); + pendingNacks.add(this.ackRequestData); + tracer.endSubscribeProcessSpan(this.ackRequestData.getMessageWrapper(), "nack"); + forget(); + } + + @Override + public void onSuccess(AckReply reply) { + int ackLatency = + Ints.saturatedCast((long) Math.ceil((clock.millisTime() - receivedTimeMillis) / 1000D)); + if (ackLatency >= ackLatencyDistribution.getPercentile(slowAckPercentile)) { + loggingUtil.logSubscriber( + LoggingUtil.SubSystem.SLOW_ACK, + Level.FINE, + String.format( + "Message ack duration of %d is higher than the p99 ack duration", ackLatency), + this.ackRequestData.getMessageWrapper(), + this.ackRequestData.getAckId(), + exactlyOnceDeliveryEnabled.get()); + } + + switch (reply) { + case ACK: + if (nackImmediatelyShutdownInProgress.get() && exactlyOnceDeliveryEnabled.get()) { + this.ackRequestData.setResponse(AckResponse.OTHER, true); + tracer.endSubscribeProcessSpan( + this.ackRequestData.getMessageWrapper(), "ack failed_with_nack_immediately"); + } else { + pendingAcks.add(this.ackRequestData); + // Record the latency rounded to the next closest integer. + ackLatencyDistribution.record(ackLatency); + tracer.endSubscribeProcessSpan(this.ackRequestData.getMessageWrapper(), "ack"); + } + loggingUtil.logSubscriber( + LoggingUtil.SubSystem.ACK_NACK, + Level.FINE, + "Ack called on message.", + this.ackRequestData.getMessageWrapper(), + this.ackRequestData.getAckId(), + exactlyOnceDeliveryEnabled.get()); + break; + case NACK: + pendingNacks.add(this.ackRequestData); + tracer.endSubscribeProcessSpan(this.ackRequestData.getMessageWrapper(), "nack"); + loggingUtil.logSubscriber( + LoggingUtil.SubSystem.ACK_NACK, + Level.FINE, + "Nack called on message.", + this.ackRequestData.getMessageWrapper(), + this.ackRequestData.getAckId(), + exactlyOnceDeliveryEnabled.get()); + break; + default: + throw new IllegalArgumentException(String.format("AckReply: %s not supported", reply)); + } + forget(); + } + } + + interface AckProcessor { + public void sendAckOperations(List ackRequestDataList); + + public void sendModackOperations(List modackRequestDataList); + } + + private MessageDispatcher(Builder builder) { + executor = builder.executor; + systemExecutor = builder.systemExecutor; + ackExpirationPadding = builder.ackExpirationPadding; + maxAckExtensionPeriod = builder.maxAckExtensionPeriod; + + minDurationPerAckExtensionSeconds = + Math.toIntExact(builder.minDurationPerAckExtension.getSeconds()); + minDurationPerAckExtensionDefaultUsed = builder.minDurationPerAckExtensionDefaultUsed; + maxDurationPerAckExtensionSeconds = + Math.toIntExact(builder.maxDurationPerAckExtension.getSeconds()); + maxDurationPerAckExtensionDefaultUsed = builder.maxDurationPerAckExtensionDefaultUsed; + + // Start the deadline at the minimum ack deadline so messages which arrive before this is + // updated will not have a long ack deadline. + if (minDurationPerAckExtensionDefaultUsed) { + messageDeadlineSeconds.set(Math.toIntExact(Subscriber.MIN_STREAM_ACK_DEADLINE.getSeconds())); + } else { + messageDeadlineSeconds.set(minDurationPerAckExtensionSeconds); + } + + receiver = builder.receiver; + receiverWithAckResponse = builder.receiverWithAckResponse; + + ackProcessor = builder.ackProcessor; + flowController = builder.flowController; + ackLatencyDistribution = builder.ackLatencyDistribution; + clock = builder.clock; + jobLock = new ReentrantLock(); + messagesWaiter = new Waiter(); + sequentialExecutor = new SequentialExecutorService.AutoExecutor(builder.executor); + + subscriptionNameObject = SubscriptionName.parse(builder.subscriptionName); + enableOpenTelemetryTracing = builder.enableOpenTelemetryTracing; + if (builder.tracer != null) { + tracer = builder.tracer; + } + this.subscriberShutdownSettings = builder.subscriberShutdownSettings; + } + + private boolean shouldSetMessageFuture() { + return receiverWithAckResponse != null; + } + + void start() { + final Runnable setExtendDeadline = + new Runnable() { + @Override + public void run() { + extendDeadline.set(true); + } + }; + + jobLock.lock(); + try { + // Do not adjust deadline concurrently with extendDeadline or processOutstandingAckOperations. + // The following sequence can happen: + // 0. Initially, deadline = 1 min + // 1. Thread A (TA) wants to send receipts, reads deadline = 1m, but stalls before actually + // sending request + // 2. Thread B (TB) adjusts deadline to 2m + // 3. TB calls extendDeadline, modack all messages to 2m, schedules next extension in 2m + // 4. TA sends request, modacking messages to 1m. + // Then messages will expire too early. + // This can be resolved by adding locks in the right places, but at that point, + // we might as well do things sequentially. + backgroundJob = + systemExecutor.scheduleWithFixedDelay( + new Runnable() { + @Override + public void run() { + try { + if (extendDeadline.getAndSet(false)) { + int newDeadlineSec = computeDeadlineSeconds(); + messageDeadlineSeconds.set(newDeadlineSec); + extendDeadlines(); + if (setExtendedDeadlineFuture != null && !backgroundJob.isDone()) { + setExtendedDeadlineFuture.cancel(true); + } + + setExtendedDeadlineFuture = + systemExecutor.schedule( + setExtendDeadline, + newDeadlineSec - ackExpirationPadding.getSeconds(), + TimeUnit.SECONDS); + } + processOutstandingOperations(); + } catch (Throwable t) { + // Catch everything so that one run failing doesn't prevent subsequent runs. + logger.log(Level.WARNING, "failed to run periodic job", t); + } + } + }, + PENDING_ACKS_SEND_DELAY.toMillis(), + PENDING_ACKS_SEND_DELAY.toMillis(), + TimeUnit.MILLISECONDS); + } finally { + jobLock.unlock(); + } + } + + private void nackAllOutstandingMessages() { + nackImmediatelyShutdownInProgress.set(true); + List handlersToNack = new ArrayList<>(pendingMessages.values()); + for (AckHandler ackHandler : handlersToNack) { + pendingNacks.add(ackHandler.getAckRequestData()); + ackHandler.forget(); // This removes from pendingMessages, releases flow control, etc. + } + } + + void stop() { + switch (subscriberShutdownSettings.getMode()) { + case WAIT_FOR_PROCESSING: + logger.log( + Level.FINE, + "WAIT_FOR_PROCESSING shutdown mode: Waiting for outstanding messages to complete" + + " processing."); + java.time.Duration timeout = subscriberShutdownSettings.getTimeout(); + if (timeout.isNegative()) { + // Indefinite wait use existing blocking wait + messagesWaiter.waitComplete(); + } else { + // Wait for (timeout - 1 second) for messages to complete + long gracePeriodMillis = Math.max(0, timeout.toMillis() - FINAL_NACK_TIMEOUT); + boolean completedWait = messagesWaiter.tryWait(gracePeriodMillis, clock); + if (!completedWait) { + logger.log( + Level.WARNING, + "Grace period expired for WAIT_FOR_PROCESSING shutdown. Nacking remaining" + + " messages."); + // Switch to NACK_IMMEDIATELY behavior for remaining messages + nackAllOutstandingMessages(); + } + } + cancelBackgroundJob(); + processOutstandingOperations(); // Send any remaining acks/nacks. + break; + + case NACK_IMMEDIATELY: + logger.log(Level.FINE, "NACK_IMMEDIATELY shutdown mode: Nacking all outstanding messages."); + // Stop extending deadlines immediately. + cancelBackgroundJob(); + nackAllOutstandingMessages(); + processOutstandingOperations(); // Send all pending nacks. + break; + + default: + logger.log(Level.WARNING, "Unknown shutdown mode: " + subscriberShutdownSettings.getMode()); + // Default to WAIT_FOR_PROCESSING behavior + messagesWaiter.waitComplete(); + cancelBackgroundJob(); + processOutstandingOperations(); + break; + } + } + + private void cancelBackgroundJob() { + jobLock.lock(); + try { + if (backgroundJob != null) { + backgroundJob.cancel(false); + } + if (setExtendedDeadlineFuture != null) { + setExtendedDeadlineFuture.cancel(true); + } + backgroundJob = null; + setExtendedDeadlineFuture = null; + } finally { + jobLock.unlock(); + } + } + + @InternalApi + void setMessageDeadlineSeconds(int sec) { + messageDeadlineSeconds.set(sec); + } + + @InternalApi + int getMessageDeadlineSeconds() { + return messageDeadlineSeconds.get(); + } + + @InternalApi + void setExactlyOnceDeliveryEnabled(boolean exactlyOnceDeliveryEnabled) { + // Sanity check that we are changing the exactlyOnceDeliveryEnabled state + if (exactlyOnceDeliveryEnabled == this.exactlyOnceDeliveryEnabled.get()) { + return; + } + + this.exactlyOnceDeliveryEnabled.set(exactlyOnceDeliveryEnabled); + + // If a custom value for minDurationPerAckExtension, we should respect that + if (!minDurationPerAckExtensionDefaultUsed) { + return; + } + + // We just need to update the minDurationPerAckExtensionSeconds as the + // maxDurationPerAckExtensionSeconds does not change + int possibleNewMinAckDeadlineExtensionSeconds; + + if (exactlyOnceDeliveryEnabled) { + possibleNewMinAckDeadlineExtensionSeconds = + Math.toIntExact( + Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION_EXACTLY_ONCE_DELIVERY.getSeconds()); + } else { + possibleNewMinAckDeadlineExtensionSeconds = + Math.toIntExact(Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION.getSeconds()); + } + + // If we are not using the default maxDurationAckExtension, check if the + // minAckDeadlineExtensionExactlyOnceDelivery needs to be bounded by the set max + if (!maxDurationPerAckExtensionDefaultUsed + && (possibleNewMinAckDeadlineExtensionSeconds > maxDurationPerAckExtensionSeconds)) { + minDurationPerAckExtensionSeconds = maxDurationPerAckExtensionSeconds; + } else { + minDurationPerAckExtensionSeconds = possibleNewMinAckDeadlineExtensionSeconds; + } + } + + @InternalApi + void setMessageOrderingEnabled(boolean messageOrderingEnabled) { + this.messageOrderingEnabled.set(messageOrderingEnabled); + } + + @InternalApi + boolean getNackImmediatelyShutdownInProgress() { + return nackImmediatelyShutdownInProgress.get(); + } + + private static class OutstandingMessage { + private final AckHandler ackHandler; + + private OutstandingMessage(AckHandler ackHandler) { + this.ackHandler = ackHandler; + } + + public PubsubMessageWrapper messageWrapper() { + return this.ackHandler.ackRequestData.getMessageWrapper(); + } + } + + private static class ReceiptCompleteData { + private OutstandingMessage outstandingMessage; + private Boolean receiptComplete; + + private ReceiptCompleteData(OutstandingMessage outstandingMessage) { + this.outstandingMessage = outstandingMessage; + this.receiptComplete = false; + } + + private OutstandingMessage getOutstandingMessage() { + return this.outstandingMessage; + } + + private Boolean isReceiptComplete() { + return this.receiptComplete; + } + + private void notifyReceiptComplete() { + this.receiptComplete = true; + } + } + + void processReceivedMessages(List messages) { + Instant totalExpiration = now().plus(maxAckExtensionPeriod); + List outstandingBatch = new ArrayList<>(messages.size()); + for (ReceivedMessage message : messages) { + AckRequestData.Builder builder = AckRequestData.newBuilder(message.getAckId()); + if (shouldSetMessageFuture()) { + builder.setMessageFuture(SettableApiFuture.create()); + } + PubsubMessageWrapper messageWrapper = + PubsubMessageWrapper.newBuilder( + message.getMessage(), + subscriptionNameObject, + message.getAckId(), + message.getDeliveryAttempt()) + .build(); + builder.setMessageWrapper(messageWrapper); + tracer.startSubscriberSpan(messageWrapper, this.exactlyOnceDeliveryEnabled.get()); + + AckRequestData ackRequestData = builder.build(); + AckHandler ackHandler = + new AckHandler(ackRequestData, message.getMessage().getSerializedSize(), totalExpiration); + OutstandingMessage outstandingMessage = new OutstandingMessage(ackHandler); + + if (this.exactlyOnceDeliveryEnabled.get()) { + // For exactly once deliveries we don't add to outstanding batch because we first + // process the receipt modack. If that is successful then we process the message. + synchronized (outstandingReceipts) { + outstandingReceipts.put(message.getAckId(), new ReceiptCompleteData(outstandingMessage)); + } + } else if (pendingMessages.putIfAbsent(message.getAckId(), ackHandler) != null) { + // putIfAbsent puts ackHandler if ackID isn't previously mapped, then return the + // previously-mapped element. + // If the previous element is not null, we already have the message and the new one is + // definitely a duplicate. + // Don't nack this, because that'd also nack the one we already have in queue. + // Don't update the existing one's total expiration either. If the user "loses" the message, + // we want to eventually + // totally expire so that pubsub service sends us the message again. + continue; + } else { + outstandingBatch.add(outstandingMessage); + } + pendingReceipts.add(ackRequestData); + } + processBatch(outstandingBatch); + } + + void notifyAckSuccess(AckRequestData ackRequestData) { + synchronized (outstandingReceipts) { + if (outstandingReceipts.containsKey(ackRequestData.getAckId())) { + outstandingReceipts.get(ackRequestData.getAckId()).notifyReceiptComplete(); + List outstandingBatch = new ArrayList<>(); + + for (Iterator> it = + outstandingReceipts.entrySet().iterator(); + it.hasNext(); ) { + Map.Entry receipt = it.next(); + // If receipt is complete then add to outstandingBatch to process the batch + if (receipt.getValue().isReceiptComplete()) { + it.remove(); + if (pendingMessages.putIfAbsent( + receipt.getKey(), receipt.getValue().getOutstandingMessage().ackHandler) + == null) { + outstandingBatch.add(receipt.getValue().getOutstandingMessage()); + } + } else { + break; + } + } + processBatch(outstandingBatch); + } + } + } + + void notifyAckFailed(AckRequestData ackRequestData) { + synchronized (outstandingReceipts) { + outstandingReceipts.remove(ackRequestData.getAckId()); + } + + // When notifying that an ack/modack has failed, due to a non-retryable error, + // we attempt to remove the message from the pending messages and release it from the flow + // controller so that we no longer attempt to extend the message's ack deadline. + if (pendingMessages.remove(ackRequestData.getAckId()) == null) { + /* + * We're forgetting the message for the second time. This may occur on modacks because the message passed + * its total expiration and was forgotten and then the user finishes working on the message + * which forgets the message again. Additionally, when a failed ack occurs, we will have already forgotten + * the message, so we don't need to here. Turns the second forget into a no-op so we don't free twice. + */ + return; + } + flowController.release(1, ackRequestData.getMessageWrapper().getSerializedSize()); + messagesWaiter.incrementPendingCount(-1); + } + + private void processBatch(List batch) { + messagesWaiter.incrementPendingCount(batch.size()); + for (OutstandingMessage message : batch) { + // This is a blocking flow controller. We have already incremented messagesWaiter, so + // shutdown will block on processing of all these messages anyway. + tracer.startSubscribeConcurrencyControlSpan(message.messageWrapper()); + try { + loggingUtil.logSubscriber( + LoggingUtil.SubSystem.SUBSCRIBER_FLOW_CONTROL, + Level.FINE, + "Flow controller is blocking.", + message.messageWrapper(), + message.messageWrapper().getAckId(), + exactlyOnceDeliveryEnabled.get()); + flowController.reserve(1, message.messageWrapper().getPubsubMessage().getSerializedSize()); + loggingUtil.logSubscriber( + LoggingUtil.SubSystem.SUBSCRIBER_FLOW_CONTROL, + Level.FINE, + "Flow controller is done blocking.", + message.messageWrapper(), + message.messageWrapper().getAckId(), + exactlyOnceDeliveryEnabled.get()); + tracer.endSubscribeConcurrencyControlSpan(message.messageWrapper()); + } catch (FlowControlException unexpectedException) { + // This should be a blocking flow controller and never throw an exception. + loggingUtil.logSubscriberWithThrowable( + LoggingUtil.SubSystem.SUBSCRIBER_FLOW_CONTROL, + Level.FINE, + "Flow controller unexpected exception.", + message.messageWrapper(), + message.messageWrapper().getAckId(), + exactlyOnceDeliveryEnabled.get(), + unexpectedException); + tracer.setSubscribeConcurrencyControlSpanException( + message.messageWrapper(), unexpectedException); + throw new IllegalStateException("Flow control unexpected exception", unexpectedException); + } + addDeliveryInfoCount(message.messageWrapper()); + processOutstandingMessage(message.ackHandler); + } + } + + private void addDeliveryInfoCount(PubsubMessageWrapper messageWrapper) { + PubsubMessage originalMessage = messageWrapper.getPubsubMessage(); + int deliveryAttempt = messageWrapper.getDeliveryAttempt(); + // Delivery Attempt will be set to 0 if DeadLetterPolicy is not set on the subscription. In + // this case, do not populate the PubsubMessage with the delivery attempt attribute. + if (deliveryAttempt > 0) { + messageWrapper.setPubsubMessage( + PubsubMessage.newBuilder(originalMessage) + .putAttributes("googclient_deliveryattempt", Integer.toString(deliveryAttempt)) + .build()); + } + } + + private void processOutstandingMessage(final AckHandler ackHandler) { + // Get the PubsubMessageWrapper and the PubsubMessage it wraps that are stored withing the + // AckHandler object. + PubsubMessageWrapper messageWrapper = ackHandler.ackRequestData.getMessageWrapper(); + PubsubMessage message = messageWrapper.getPubsubMessage(); + + // This future is for internal bookkeeping to be sent to the StreamingSubscriberConnection + // use below in the consumers + SettableApiFuture ackReplySettableApiFuture = SettableApiFuture.create(); + ApiFutures.addCallback(ackReplySettableApiFuture, ackHandler, MoreExecutors.directExecutor()); + + Runnable deliverMessageTask = + new Runnable() { + @Override + public void run() { + try { + if (ackHandler + .totalExpiration + .plusSeconds(messageDeadlineSeconds.get()) + .isBefore(now())) { + // Message expired while waiting. We don't extend these messages anymore, + // so it was probably sent to someone else. Don't work on it. + // Don't nack it either, because we'd be nacking someone else's message. + ackHandler.forget(); + tracer.setSubscriberSpanExpirationResult(messageWrapper); + loggingUtil.logSubscriber( + LoggingUtil.SubSystem.EXPIRY, + Level.FINE, + "Message expired.", + messageWrapper, + ackHandler.ackRequestData.getAckId(), + exactlyOnceDeliveryEnabled.get()); + return; + } + tracer.startSubscribeProcessSpan(messageWrapper); + loggingUtil.logSubscriber( + LoggingUtil.SubSystem.CALLBACK_DELIVERY, + Level.FINE, + "Message delivered.", + messageWrapper, + ackHandler.ackRequestData.getAckId(), + exactlyOnceDeliveryEnabled.get()); + if (shouldSetMessageFuture()) { + // This is the message future that is propagated to the user + SettableApiFuture messageFuture = + ackHandler.getMessageFutureIfExists(); + final AckReplyConsumerWithResponse ackReplyConsumerWithResponse = + new AckReplyConsumerWithResponseImpl(ackReplySettableApiFuture, messageFuture); + receiverWithAckResponse.receiveMessage(message, ackReplyConsumerWithResponse); + } else { + final AckReplyConsumer ackReplyConsumer = + new AckReplyConsumerImpl(ackReplySettableApiFuture); + receiver.receiveMessage(message, ackReplyConsumer); + } + } catch (Exception e) { + ackReplySettableApiFuture.setException(e); + } + } + }; + if (!messageOrderingEnabled.get() || message.getOrderingKey().isEmpty()) { + executor.execute(deliverMessageTask); + } else { + tracer.startSubscribeSchedulerSpan(messageWrapper); + sequentialExecutor.submit(message.getOrderingKey(), deliverMessageTask); + tracer.endSubscribeSchedulerSpan(messageWrapper); + } + } + + /** Compute the ideal deadline, set subsequent modacks to this deadline, and return it. */ + @InternalApi + int computeDeadlineSeconds() { + int deadlineSeconds = ackLatencyDistribution.getPercentile(PERCENTILE_FOR_ACK_DEADLINE_UPDATES); + + // Bound deadlineSeconds by extensions + if (!maxDurationPerAckExtensionDefaultUsed + && (deadlineSeconds > maxDurationPerAckExtensionSeconds)) { + deadlineSeconds = maxDurationPerAckExtensionSeconds; + } else if (deadlineSeconds < minDurationPerAckExtensionSeconds) { + deadlineSeconds = minDurationPerAckExtensionSeconds; + } + + // Bound deadlineSeconds by hard limits in subscriber + if (deadlineSeconds < Subscriber.MIN_STREAM_ACK_DEADLINE.getSeconds()) { + deadlineSeconds = Math.toIntExact(Subscriber.MIN_STREAM_ACK_DEADLINE.getSeconds()); + } else if (deadlineSeconds > Subscriber.MAX_STREAM_ACK_DEADLINE.getSeconds()) { + deadlineSeconds = Math.toIntExact(Subscriber.MAX_STREAM_ACK_DEADLINE.getSeconds()); + } + + return deadlineSeconds; + } + + @InternalApi + void extendDeadlines() { + int extendSeconds = getMessageDeadlineSeconds(); + int numAckIdToSend = 0; + Map deadlineExtensionModacks = + new HashMap(); + Instant now = now(); + Instant extendTo = now.plusSeconds(extendSeconds); + + for (Map.Entry entry : pendingMessages.entrySet()) { + String ackId = entry.getKey(); + Instant totalExpiration = entry.getValue().totalExpiration; + if (totalExpiration.isAfter(extendTo)) { + ModackRequestData modackRequestData = + deadlineExtensionModacks.computeIfAbsent( + extendSeconds, + deadlineExtensionSeconds -> new ModackRequestData(deadlineExtensionSeconds)); + modackRequestData.addAckRequestData(entry.getValue().getAckRequestData()); + numAckIdToSend++; + continue; + } + + // forget removes from pendingMessages; this is OK, concurrent maps can + // handle concurrent iterations and modifications. + entry.getValue().forget(); + if (totalExpiration.isAfter(now)) { + int sec = Math.max(1, (int) now.until(totalExpiration, ChronoUnit.SECONDS)); + ModackRequestData modackRequestData = + deadlineExtensionModacks.computeIfAbsent( + sec, extensionSeconds -> new ModackRequestData(extensionSeconds)); + modackRequestData.addAckRequestData(entry.getValue().getAckRequestData()); + numAckIdToSend++; + } + } + + if (numAckIdToSend > 0) { + logger.log(Level.FINER, "Sending {0} modacks", numAckIdToSend); + ackProcessor.sendModackOperations( + new ArrayList(deadlineExtensionModacks.values())); + } + } + + @InternalApi + void processOutstandingOperations() { + + List modackRequestData = new ArrayList(); + + // Nacks are modacks with an expiration of 0 + List nackRequestDataList = new ArrayList(); + pendingNacks.drainTo(nackRequestDataList); + + if (!nackRequestDataList.isEmpty()) { + modackRequestData.add(new ModackRequestData(0, nackRequestDataList)); + } + + List ackRequestDataReceipts = new ArrayList(); + pendingReceipts.drainTo(ackRequestDataReceipts); + if (!ackRequestDataReceipts.isEmpty() && !getNackImmediatelyShutdownInProgress()) { + ModackRequestData receiptModack = + new ModackRequestData(this.getMessageDeadlineSeconds(), ackRequestDataReceipts); + receiptModack.setIsReceiptModack(true); + modackRequestData.add(receiptModack); + } + + ackProcessor.sendModackOperations(modackRequestData); + + List ackRequestDataList = new ArrayList(); + pendingAcks.drainTo(ackRequestDataList); + loggingUtil.logEvent( + LoggingUtil.SubSystem.ACK_BATCH, + Level.FINE, + "Sending {0} ACKs, {1} NACKs, {2} receipts. Exactly Once Delivery: {3}", + new Object[] { + ackRequestDataList.size(), + nackRequestDataList.size(), + ackRequestDataReceipts.size(), + exactlyOnceDeliveryEnabled.get() + }); + + ackProcessor.sendAckOperations(ackRequestDataList); + } + + private Instant now() { + return Instant.ofEpochMilli(clock.millisTime()); + } + + /** Builder of {@link MessageDispatcher MessageDispatchers}. */ + public static final class Builder { + private MessageReceiver receiver; + private MessageReceiverWithAckResponse receiverWithAckResponse; + + private AckProcessor ackProcessor; + private Duration ackExpirationPadding; + private Duration maxAckExtensionPeriod; + private Duration minDurationPerAckExtension; + private boolean minDurationPerAckExtensionDefaultUsed; + private Duration maxDurationPerAckExtension; + private boolean maxDurationPerAckExtensionDefaultUsed; + + private Distribution ackLatencyDistribution; + private FlowController flowController; + + private Executor executor; + private ScheduledExecutorService systemExecutor; + private ApiClock clock; + + private String subscriptionName; + private boolean enableOpenTelemetryTracing; + private OpenTelemetryPubsubTracer tracer; + private SubscriberShutdownSettings subscriberShutdownSettings; + + protected Builder(MessageReceiver receiver) { + this.receiver = receiver; + } + + protected Builder(MessageReceiverWithAckResponse receiverWithAckResponse) { + this.receiverWithAckResponse = receiverWithAckResponse; + } + + public Builder setAckProcessor(AckProcessor ackProcessor) { + this.ackProcessor = ackProcessor; + return this; + } + + public Builder setAckExpirationPadding(Duration ackExpirationPadding) { + this.ackExpirationPadding = ackExpirationPadding; + return this; + } + + public Builder setMaxAckExtensionPeriod(Duration maxAckExtensionPeriod) { + this.maxAckExtensionPeriod = maxAckExtensionPeriod; + return this; + } + + public Builder setMinDurationPerAckExtension(Duration minDurationPerAckExtension) { + this.minDurationPerAckExtension = minDurationPerAckExtension; + return this; + } + + public Builder setMinDurationPerAckExtensionDefaultUsed( + boolean minDurationPerAckExtensionDefaultUsed) { + this.minDurationPerAckExtensionDefaultUsed = minDurationPerAckExtensionDefaultUsed; + return this; + } + + public Builder setMaxDurationPerAckExtension(Duration maxDurationPerAckExtension) { + this.maxDurationPerAckExtension = maxDurationPerAckExtension; + return this; + } + + public Builder setMaxDurationPerAckExtensionDefaultUsed( + boolean maxDurationPerAckExtensionDefaultUsed) { + this.maxDurationPerAckExtensionDefaultUsed = maxDurationPerAckExtensionDefaultUsed; + return this; + } + + public Builder setAckLatencyDistribution(Distribution ackLatencyDistribution) { + this.ackLatencyDistribution = ackLatencyDistribution; + return this; + } + + public Builder setFlowController(FlowController flowController) { + this.flowController = flowController; + return this; + } + + public Builder setExecutor(Executor executor) { + this.executor = executor; + return this; + } + + public Builder setSystemExecutor(ScheduledExecutorService systemExecutor) { + this.systemExecutor = systemExecutor; + return this; + } + + public Builder setApiClock(ApiClock clock) { + this.clock = clock; + return this; + } + + public Builder setSubscriptionName(String subscriptionName) { + this.subscriptionName = subscriptionName; + return this; + } + + public Builder setEnableOpenTelemetryTracing(boolean enableOpenTelemetryTracing) { + this.enableOpenTelemetryTracing = enableOpenTelemetryTracing; + return this; + } + + public Builder setTracer(OpenTelemetryPubsubTracer tracer) { + this.tracer = tracer; + return this; + } + + public Builder setSubscriberShutdownSettings( + SubscriberShutdownSettings subscriberShutdownSettings) { + this.subscriberShutdownSettings = subscriberShutdownSettings; + return this; + } + + public MessageDispatcher build() { + return new MessageDispatcher(this); + } + } + + public static Builder newBuilder(MessageReceiver receiver) { + return new Builder(receiver); + } + + public static Builder newBuilder(MessageReceiverWithAckResponse receiverWithAckResponse) { + return new Builder(receiverWithAckResponse); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageReceiver.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageReceiver.java new file mode 100644 index 000000000000..d1428a6d5cc2 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageReceiver.java @@ -0,0 +1,52 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.pubsub.v1.PubsubMessage; + +/** This interface can be implemented by users of {@link Subscriber} to receive messages. */ +public interface MessageReceiver { + /** + * Called when a message is received by the subscriber. The implementation must arrange for {@link + * AckReplyConsumer#ack()} or {@link AckReplyConsumer#nack()} to be called after processing the + * {@code message}. + * + * + *

{@code
+   * // This {@code MessageReceiver} passes all messages to a {@link BlockingQueue}. This method can
+   * // be called concurrently from multiple threads, so it is important that the queue be
+   * // thread-safe.
+   * //
+   * // This example is for illustration. Implementations may directly process messages instead of
+   * // sending them to queues.
+   * MessageReceiver receiver =
+   *     new MessageReceiver() {
+   *       public void receiveMessage(final PubsubMessage message, final AckReplyConsumer consumer) {
+   *         if (blockingQueue.offer(message)) {
+   *           consumer.ack();
+   *         } else {
+   *           consumer.nack();
+   *         }
+   *       }
+   *     };
+   *
+   * }
+ * + * + */ + void receiveMessage(final PubsubMessage message, final AckReplyConsumer consumer); +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageReceiverWithAckResponse.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageReceiverWithAckResponse.java new file mode 100644 index 000000000000..49792be07207 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageReceiverWithAckResponse.java @@ -0,0 +1,23 @@ +/* + * Copyright 2022 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.pubsub.v1.PubsubMessage; + +public interface MessageReceiverWithAckResponse { + void receiveMessage(PubsubMessage message, AckReplyConsumerWithResponse consumer); +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/ModackRequestData.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/ModackRequestData.java new file mode 100644 index 000000000000..54c7436af2b6 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/ModackRequestData.java @@ -0,0 +1,62 @@ +/* + * Copyright 2022 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. + */ + +package com.google.cloud.pubsub.v1; + +import java.util.*; + +class ModackRequestData { + private final int deadlineExtensionSeconds; + private List ackRequestData; + private boolean isReceiptModack; + + ModackRequestData(int deadlineExtensionSeconds) { + this.deadlineExtensionSeconds = deadlineExtensionSeconds; + this.ackRequestData = new ArrayList(); + } + + ModackRequestData(int deadlineExtensionSeconds, AckRequestData... ackRequestData) { + this.deadlineExtensionSeconds = deadlineExtensionSeconds; + this.ackRequestData = Arrays.asList(ackRequestData); + } + + ModackRequestData(int deadlineExtensionSeconds, List ackRequestData) { + this.deadlineExtensionSeconds = deadlineExtensionSeconds; + this.ackRequestData = ackRequestData; + } + + public int getDeadlineExtensionSeconds() { + return deadlineExtensionSeconds; + } + + public List getAckRequestData() { + return ackRequestData; + } + + public boolean getIsReceiptModack() { + return isReceiptModack; + } + + public ModackRequestData addAckRequestData(AckRequestData ackRequestData) { + this.ackRequestData.add(ackRequestData); + return this; + } + + public ModackRequestData setIsReceiptModack(boolean isReceiptModack) { + this.isReceiptModack = isReceiptModack; + return this; + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/OpenCensusUtil.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/OpenCensusUtil.java new file mode 100644 index 000000000000..fce664ff2050 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/OpenCensusUtil.java @@ -0,0 +1,176 @@ +/* + * Copyright 2019 Google Inc. + * + * 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.ApiFunction; +import com.google.common.annotations.VisibleForTesting; +import com.google.errorprone.annotations.MustBeClosed; +import com.google.pubsub.v1.PubsubMessage; +import io.opencensus.common.Scope; +import io.opencensus.tags.TagContext; +import io.opencensus.tags.Tagger; +import io.opencensus.tags.Tags; +import io.opencensus.tags.propagation.TagContextBinarySerializer; +import io.opencensus.trace.Link; +import io.opencensus.trace.SpanContext; +import io.opencensus.trace.Tracer; +import io.opencensus.trace.Tracing; +import io.opencensus.trace.propagation.SpanContextParseException; +import io.opencensus.trace.propagation.TextFormat; +import io.opencensus.trace.propagation.TextFormat.Getter; +import io.opencensus.trace.propagation.TextFormat.Setter; +import io.opencensus.trace.samplers.Samplers; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Utilities for propagating OpenCensus {@link TagContext} and {@link SpanContext} from publishers + * to subscribers. + */ +public class OpenCensusUtil { + private static final Logger logger = Logger.getLogger(OpenCensusUtil.class.getName()); + + public static final String TAG_CONTEXT_KEY = "googclient_OpenCensusTagContextKey"; + public static final String TRACE_CONTEXT_KEY = "googclient_OpenCensusTraceContextKey"; + @VisibleForTesting static final String MESSAGE_RECEIVER_SPAN_NAME = "OpenCensusMessageReceiver"; + private static final String TRACEPARENT_KEY = "traceparent"; + + private static final Tagger tagger = Tags.getTagger(); + private static final TagContextBinarySerializer serializer = + Tags.getTagPropagationComponent().getBinarySerializer(); + + private static final Tracer tracer = Tracing.getTracer(); + private static final TextFormat traceContextTextFormat = + Tracing.getPropagationComponent().getTraceContextFormat(); + + /** + * Propagates active OpenCensus trace and tag contexts from the Publisher by adding them as + * attributes to the {@link PubsubMessage}. + */ + public static final ApiFunction OPEN_CENSUS_MESSAGE_TRANSFORM = + new ApiFunction() { + @Override + public PubsubMessage apply(PubsubMessage message) { + PubsubMessage.Builder builder = PubsubMessage.newBuilder(message); + String encodedSpanContext = encodeSpanContext(tracer.getCurrentSpan().getContext()); + String encodedTagContext = encodeTagContext(tagger.getCurrentTagContext()); + if (encodedSpanContext.isEmpty() && encodedTagContext.isEmpty()) { + return message; + } + if (!encodedSpanContext.isEmpty()) { + builder.putAttributes(TRACE_CONTEXT_KEY, encodedSpanContext); + } + if (!encodedTagContext.isEmpty()) { + builder.putAttributes(TAG_CONTEXT_KEY, encodedTagContext); + } + return builder.build(); + } + }; + + private static final Setter setter = + new Setter() { + @Override + public void put(StringBuilder carrier, String key, String value) { + if (key.equals(TRACEPARENT_KEY)) { + carrier.append(value); + } + } + }; + + private static final Getter getter = + new Getter() { + @Override + public String get(String carrier, String key) { + return key.equals(TRACEPARENT_KEY) ? carrier : null; + } + }; + + @VisibleForTesting + static String encodeSpanContext(SpanContext ctxt) { + StringBuilder builder = new StringBuilder(); + traceContextTextFormat.inject(ctxt, builder, setter); + return builder.toString(); + } + + // TODO: update this code once the text encoding of tags has been resolved + // (https://github.com/census-instrumentation/opencensus-specs/issues/65). + private static String encodeTagContext(TagContext tags) { + return ""; + } + + // TODO: update this code once the text encoding of tags has been resolved + // (https://github.com/census-instrumentation/opencensus-specs/issues/65). + private static Scope createScopedTagContext(String encodedTags) { + return tagger.withTagContext(tagger.getCurrentTagContext()); + } + + @VisibleForTesting + @MustBeClosed + static Scope createScopedSpan(String name) { + return tracer + .spanBuilderWithExplicitParent(name, tracer.getCurrentSpan()) + .setRecordEvents(true) + // Note: we preserve the sampling decision from the publisher. + .setSampler(Samplers.alwaysSample()) + .startScopedSpan(); + } + + private static void addParentLink(String encodedParentSpanContext) { + try { + SpanContext ctxt = traceContextTextFormat.extract(encodedParentSpanContext, getter); + tracer.getCurrentSpan().addLink(Link.fromSpanContext(ctxt, Link.Type.PARENT_LINKED_SPAN)); + } catch (SpanContextParseException exn) { + logger.log(Level.INFO, "OpenCensus: Trace Context Deserialization Exception: " + exn); + } + } + + /** + * Wrapper class for {@link MessageReceiver} that decodes any received trace and tag contexts and + * puts them in scope. + */ + public static class OpenCensusMessageReceiver implements MessageReceiver { + private final MessageReceiver receiver; + + public OpenCensusMessageReceiver(MessageReceiver receiver) { + this.receiver = receiver; + } + + @Override + public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) { + String encodedTagContext = message.getAttributesOrDefault(TAG_CONTEXT_KEY, ""); + if (encodedTagContext.isEmpty()) { + addTraceScope(message, consumer); + return; + } + try (Scope statsScope = createScopedTagContext(encodedTagContext)) { + addTraceScope(message, consumer); + } + } + + private void addTraceScope(PubsubMessage message, AckReplyConsumer consumer) { + String encodedSpanContext = message.getAttributesOrDefault(TRACE_CONTEXT_KEY, ""); + if (encodedSpanContext.isEmpty()) { + receiver.receiveMessage(message, consumer); + return; + } + try (Scope spanScope = createScopedSpan(MESSAGE_RECEIVER_SPAN_NAME)) { + addParentLink(encodedSpanContext); + receiver.receiveMessage(message, consumer); + } + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/OpenTelemetryPubsubTracer.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/OpenTelemetryPubsubTracer.java new file mode 100644 index 000000000000..3de4484586d0 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/OpenTelemetryPubsubTracer.java @@ -0,0 +1,463 @@ +/* + * 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.TopicName; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanBuilder; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.api.trace.StatusCode; +import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.context.Context; +import java.util.List; + +public class OpenTelemetryPubsubTracer { + private final Tracer tracer; + private boolean enabled = false; + + private static final String PUBLISH_FLOW_CONTROL_SPAN_NAME = "publisher flow control"; + private static final String PUBLISH_BATCHING_SPAN_NAME = "publisher batching"; + private static final String SUBSCRIBE_CONCURRENCY_CONTROL_SPAN_NAME = + "subscriber concurrency control"; + private static final String SUBSCRIBE_SCHEDULER_SPAN_NAME = "subscriber scheduler"; + + private static final String MESSAGING_SYSTEM_ATTR_KEY = "messaging.system"; + private static final String MESSAGING_DESTINATION_NAME_ATTR_KEY = "messaging.destination.name"; + private static final String CODE_FUNCTION_ATTR_KEY = "code.function"; + private static final String MESSAGING_OPERATION_ATTR_KEY = "messaging.operation"; + private static final String MESSAGING_BATCH_MESSAGE_COUNT_ATTR_KEY = + "messaging.batch.message_count"; + private static final String MESSAGING_MESSAGE_ID_ATTR_KEY = "messaging.message.id"; + private static final String MESSAGE_SIZE_ATTR_KEY = "messaging.message.body.size"; + private static final String ORDERING_KEY_ATTR_KEY = "messaging.gcp_pubsub.message.ordering_key"; + private static final String MESSAGE_ACK_ID_ATTR_KEY = "messaging.gcp_pubsub.message.ack_id"; + private static final String MESSAGE_EXACTLY_ONCE_ATTR_KEY = + "messaging.gcp_pubsub.message.exactly_once_delivery"; + private static final String MESSAGE_DELIVERY_ATTEMPT_ATTR_KEY = + "messaging.gcp_pubsub.message.delivery_attempt"; + private static final String ACK_DEADLINE_ATTR_KEY = "messaging.gcp_pubsub.message.ack_deadline"; + private static final String RECEIPT_MODACK_ATTR_KEY = "messaging.gcp_pubsub.is_receipt_modack"; + private static final String PROJECT_ATTR_KEY = "gcp.project_id"; + private static final String PUBLISH_RPC_SPAN_SUFFIX = " publish"; + + private static final String MESSAGING_SYSTEM_VALUE = "gcp_pubsub"; + + OpenTelemetryPubsubTracer(Tracer tracer, boolean enableOpenTelemetry) { + this.tracer = tracer; + if (this.tracer != null && enableOpenTelemetry) { + this.enabled = true; + } + } + + /** Populates attributes that are common the publisher parent span and publish RPC span. */ + private static final AttributesBuilder createCommonSpanAttributesBuilder( + String destinationName, String projectName, String codeFunction, String operation) { + AttributesBuilder attributesBuilder = + Attributes.builder() + .put(MESSAGING_SYSTEM_ATTR_KEY, MESSAGING_SYSTEM_VALUE) + .put(MESSAGING_DESTINATION_NAME_ATTR_KEY, destinationName) + .put(PROJECT_ATTR_KEY, projectName) + .put(CODE_FUNCTION_ATTR_KEY, codeFunction); + if (operation != null) { + attributesBuilder.put(MESSAGING_OPERATION_ATTR_KEY, operation); + } + + return attributesBuilder; + } + + private Span startChildSpan(String name, Span parent) { + return tracer.spanBuilder(name).setParent(Context.current().with(parent)).startSpan(); + } + + /** + * Creates and starts the parent span with the appropriate span attributes and injects the span + * context into the {@link PubsubMessage} attributes. + */ + void startPublisherSpan(PubsubMessageWrapper message) { + if (!enabled) { + return; + } + AttributesBuilder attributesBuilder = + createCommonSpanAttributesBuilder( + message.getTopicName(), message.getTopicProject(), "publish", "create"); + + attributesBuilder.put(MESSAGE_SIZE_ATTR_KEY, message.getDataSize()); + if (!message.getOrderingKey().isEmpty()) { + attributesBuilder.put(ORDERING_KEY_ATTR_KEY, message.getOrderingKey()); + } + + Span publisherSpan = + tracer + .spanBuilder(message.getTopicName() + " create") + .setSpanKind(SpanKind.PRODUCER) + .setAllAttributes(attributesBuilder.build()) + .startSpan(); + + message.setPublisherSpan(publisherSpan); + if (publisherSpan.getSpanContext().isValid()) { + message.injectSpanContext(); + } + } + + void endPublisherSpan(PubsubMessageWrapper message) { + if (!enabled) { + return; + } + message.endPublisherSpan(); + } + + void setPublisherMessageIdSpanAttribute(PubsubMessageWrapper message, String messageId) { + if (!enabled) { + return; + } + message.setPublisherMessageIdSpanAttribute(messageId); + } + + /** Creates a span for publish-side flow control as a child of the parent publisher span. */ + void startPublishFlowControlSpan(PubsubMessageWrapper message) { + if (!enabled) { + return; + } + Span publisherSpan = message.getPublisherSpan(); + if (publisherSpan != null) + message.setPublishFlowControlSpan( + startChildSpan(PUBLISH_FLOW_CONTROL_SPAN_NAME, publisherSpan)); + } + + void endPublishFlowControlSpan(PubsubMessageWrapper message) { + if (!enabled) { + return; + } + message.endPublishFlowControlSpan(); + } + + void setPublishFlowControlSpanException(PubsubMessageWrapper message, Throwable t) { + if (!enabled) { + return; + } + message.setPublishFlowControlSpanException(t); + } + + /** Creates a span for publish message batching as a child of the parent publisher span. */ + void startPublishBatchingSpan(PubsubMessageWrapper message) { + if (!enabled) { + return; + } + Span publisherSpan = message.getPublisherSpan(); + if (publisherSpan != null) { + message.setPublishBatchingSpan(startChildSpan(PUBLISH_BATCHING_SPAN_NAME, publisherSpan)); + } + } + + void endPublishBatchingSpan(PubsubMessageWrapper message) { + if (!enabled) { + return; + } + message.endPublishBatchingSpan(); + } + + /** + * Creates, starts, and returns a publish RPC span for the given message batch. Bi-directional + * links with the publisher parent span are created for sampled messages in the batch. + */ + Span startPublishRpcSpan(TopicName topicName, List messages) { + if (!enabled) { + return null; + } + Attributes attributes = + createCommonSpanAttributesBuilder( + topicName.getTopic(), topicName.getProject(), "publishCall", "publish") + .put(MESSAGING_BATCH_MESSAGE_COUNT_ATTR_KEY, messages.size()) + .build(); + SpanBuilder publishRpcSpanBuilder = + tracer + .spanBuilder(topicName.getTopic() + PUBLISH_RPC_SPAN_SUFFIX) + .setSpanKind(SpanKind.CLIENT) + .setAllAttributes(attributes); + Attributes linkAttributes = + Attributes.builder().put(MESSAGING_OPERATION_ATTR_KEY, "publish").build(); + for (PubsubMessageWrapper message : messages) { + if (message.getPublisherSpan().getSpanContext().isSampled()) + publishRpcSpanBuilder.addLink(message.getPublisherSpan().getSpanContext(), linkAttributes); + } + Span publishRpcSpan = publishRpcSpanBuilder.startSpan(); + + for (PubsubMessageWrapper message : messages) { + if (publishRpcSpan.getSpanContext().isSampled()) { + message.getPublisherSpan().addLink(publishRpcSpan.getSpanContext(), linkAttributes); + message.addPublishStartEvent(); + } + } + return publishRpcSpan; + } + + /** Ends the given publish RPC span if it exists. */ + void endPublishRpcSpan(Span publishRpcSpan) { + if (!enabled) { + return; + } + if (publishRpcSpan != null) { + publishRpcSpan.end(); + } + } + + /** + * Sets an error status and records an exception when an exception is thrown when publishing the + * message batch. + */ + void setPublishRpcSpanException(Span publishRpcSpan, Throwable t) { + if (!enabled) { + return; + } + if (publishRpcSpan != null) { + publishRpcSpan.setStatus(StatusCode.ERROR, "Exception thrown on publish RPC."); + publishRpcSpan.recordException(t); + publishRpcSpan.end(); + } + } + + void startSubscriberSpan(PubsubMessageWrapper message, boolean exactlyOnceDeliveryEnabled) { + if (!enabled) { + return; + } + AttributesBuilder attributesBuilder = + createCommonSpanAttributesBuilder( + message.getSubscriptionName(), message.getSubscriptionProject(), "onResponse", null); + + attributesBuilder + .put(MESSAGING_MESSAGE_ID_ATTR_KEY, message.getMessageId()) + .put(MESSAGE_SIZE_ATTR_KEY, message.getDataSize()) + .put(MESSAGE_ACK_ID_ATTR_KEY, message.getAckId()) + .put(MESSAGE_EXACTLY_ONCE_ATTR_KEY, exactlyOnceDeliveryEnabled); + if (!message.getOrderingKey().isEmpty()) { + attributesBuilder.put(ORDERING_KEY_ATTR_KEY, message.getOrderingKey()); + } + if (message.getDeliveryAttempt() > 0) { + attributesBuilder.put(MESSAGE_DELIVERY_ATTEMPT_ATTR_KEY, message.getDeliveryAttempt()); + } + Attributes attributes = attributesBuilder.build(); + Context publisherSpanContext = message.extractSpanContext(attributes); + message.setPublisherSpan(Span.fromContextOrNull(publisherSpanContext)); + message.setSubscriberSpan( + tracer + .spanBuilder(message.getSubscriptionName() + " subscribe") + .setSpanKind(SpanKind.CONSUMER) + .setParent(publisherSpanContext) + .setAllAttributes(attributes) + .startSpan()); + } + + void endSubscriberSpan(PubsubMessageWrapper message) { + if (!enabled) { + return; + } + message.endSubscriberSpan(); + } + + void setSubscriberSpanExpirationResult(PubsubMessageWrapper message) { + if (!enabled) { + return; + } + message.setSubscriberSpanExpirationResult(); + } + + void setSubscriberSpanException(PubsubMessageWrapper message, Throwable t, String exception) { + if (!enabled) { + return; + } + message.setSubscriberSpanException(t, exception); + } + + /** Creates a span for subscribe concurrency control as a child of the parent subscriber span. */ + void startSubscribeConcurrencyControlSpan(PubsubMessageWrapper message) { + if (!enabled) { + return; + } + Span subscriberSpan = message.getSubscriberSpan(); + if (subscriberSpan != null) { + message.setSubscribeConcurrencyControlSpan( + startChildSpan(SUBSCRIBE_CONCURRENCY_CONTROL_SPAN_NAME, subscriberSpan)); + } + } + + void endSubscribeConcurrencyControlSpan(PubsubMessageWrapper message) { + if (!enabled) { + return; + } + message.endSubscribeConcurrencyControlSpan(); + } + + void setSubscribeConcurrencyControlSpanException(PubsubMessageWrapper message, Throwable t) { + if (!enabled) { + return; + } + message.setSubscribeConcurrencyControlSpanException(t); + } + + /** + * Creates a span for subscribe ordering key scheduling as a child of the parent subscriber span. + */ + void startSubscribeSchedulerSpan(PubsubMessageWrapper message) { + if (!enabled) { + return; + } + Span subscriberSpan = message.getSubscriberSpan(); + if (subscriberSpan != null) { + message.setSubscribeSchedulerSpan( + startChildSpan(SUBSCRIBE_SCHEDULER_SPAN_NAME, subscriberSpan)); + } + } + + void endSubscribeSchedulerSpan(PubsubMessageWrapper message) { + if (!enabled) { + return; + } + message.endSubscribeSchedulerSpan(); + } + + /** Creates a span for subscribe message processing as a child of the parent subscriber span. */ + void startSubscribeProcessSpan(PubsubMessageWrapper message) { + if (!enabled) { + return; + } + Span subscriberSpan = message.getSubscriberSpan(); + if (subscriberSpan != null) { + Span subscribeProcessSpan = + startChildSpan(message.getSubscriptionName() + " process", subscriberSpan); + subscribeProcessSpan.setAttribute(MESSAGING_SYSTEM_ATTR_KEY, MESSAGING_SYSTEM_VALUE); + Span publisherSpan = message.getPublisherSpan(); + if (publisherSpan != null) { + subscribeProcessSpan.addLink(publisherSpan.getSpanContext()); + } + message.setSubscribeProcessSpan(subscribeProcessSpan); + } + } + + void endSubscribeProcessSpan(PubsubMessageWrapper message, String action) { + if (!enabled) { + return; + } + message.endSubscribeProcessSpan(action); + } + + /** + * Creates, starts, and returns spans for ModAck, Nack, and Ack RPC requests. Bi-directional links + * to parent subscribe span for sampled messages are added. + */ + Span startSubscribeRpcSpan( + SubscriptionName subscriptionName, + String rpcOperation, + List messages, + int ackDeadline, + boolean isReceiptModack) { + if (!enabled) { + return null; + } + String codeFunction = rpcOperation == "ack" ? "sendAckOperations" : "sendModAckOperations"; + AttributesBuilder attributesBuilder = + createCommonSpanAttributesBuilder( + subscriptionName.getSubscription(), + subscriptionName.getProject(), + codeFunction, + rpcOperation) + .put(MESSAGING_BATCH_MESSAGE_COUNT_ATTR_KEY, messages.size()); + + // Ack deadline and receipt modack are specific to the modack operation + if (rpcOperation == "modack") { + attributesBuilder + .put(ACK_DEADLINE_ATTR_KEY, ackDeadline) + .put(RECEIPT_MODACK_ATTR_KEY, isReceiptModack); + } + + SpanBuilder rpcSpanBuilder = + tracer + .spanBuilder(subscriptionName.getSubscription() + " " + rpcOperation) + .setSpanKind(SpanKind.CLIENT) + .setAllAttributes(attributesBuilder.build()); + Attributes linkAttributes = + Attributes.builder().put(MESSAGING_OPERATION_ATTR_KEY, rpcOperation).build(); + for (PubsubMessageWrapper message : messages) { + if (message.getSubscriberSpan().getSpanContext().isSampled()) { + rpcSpanBuilder.addLink(message.getSubscriberSpan().getSpanContext(), linkAttributes); + } + } + Span rpcSpan = rpcSpanBuilder.startSpan(); + + for (PubsubMessageWrapper message : messages) { + if (rpcSpan.getSpanContext().isSampled()) { + message.getSubscriberSpan().addLink(rpcSpan.getSpanContext(), linkAttributes); + switch (rpcOperation) { + case "ack": + message.addAckStartEvent(); + break; + case "modack": + message.addModAckStartEvent(); + break; + case "nack": + message.addNackStartEvent(); + break; + } + } + } + return rpcSpan; + } + + /** Ends the given subscribe RPC span if it exists. */ + void endSubscribeRpcSpan(Span rpcSpan) { + if (!enabled) { + return; + } + if (rpcSpan != null) { + rpcSpan.end(); + } + } + + /** + * Sets an error status and records an exception when an exception is thrown when handling a + * subscribe-side RPC. + */ + void setSubscribeRpcSpanException(Span rpcSpan, boolean isModack, int ackDeadline, Throwable t) { + if (!enabled) { + return; + } + if (rpcSpan != null) { + String operation = !isModack ? "ack" : (ackDeadline == 0 ? "nack" : "modack"); + rpcSpan.setStatus(StatusCode.ERROR, "Exception thrown on " + operation + " RPC."); + rpcSpan.recordException(t); + rpcSpan.end(); + } + } + + /** Adds the appropriate subscribe-side RPC end event. */ + void addEndRpcEvent( + PubsubMessageWrapper message, boolean rpcSampled, boolean isModack, int ackDeadline) { + if (!enabled || !rpcSampled) { + return; + } + if (!isModack) { + message.addAckEndEvent(); + } else if (ackDeadline == 0) { + message.addNackEndEvent(); + } else { + message.addModAckEndEvent(); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Publisher.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Publisher.java new file mode 100644 index 000000000000..56c920bcfdc1 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Publisher.java @@ -0,0 +1,1185 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.common.util.concurrent.MoreExecutors.directExecutor; + +import com.google.api.core.ApiFunction; +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutureCallback; +import com.google.api.core.ApiFutures; +import com.google.api.core.BetaApi; +import com.google.api.core.SettableApiFuture; +import com.google.api.gax.batching.BatchingSettings; +import com.google.api.gax.batching.FlowControlSettings; +import com.google.api.gax.batching.FlowController; +import com.google.api.gax.batching.FlowController.LimitExceededBehavior; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.BackgroundResourceAggregation; +import com.google.api.gax.core.CredentialsProvider; +import com.google.api.gax.core.ExecutorAsBackgroundResource; +import com.google.api.gax.core.ExecutorProvider; +import com.google.api.gax.core.FixedExecutorProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.api.gax.grpc.GrpcCallContext; +import com.google.api.gax.retrying.RetrySettings; +import com.google.api.gax.rpc.HeaderProvider; +import com.google.api.gax.rpc.NoHeaderProvider; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.auth.oauth2.GoogleCredentials; +import com.google.cloud.pubsub.v1.stub.GrpcPublisherStub; +import com.google.cloud.pubsub.v1.stub.PublisherStub; +import com.google.cloud.pubsub.v1.stub.PublisherStubSettings; +import com.google.common.base.Preconditions; +import com.google.protobuf.CodedOutputStream; +import com.google.pubsub.v1.PublishRequest; +import com.google.pubsub.v1.PublishResponse; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import com.google.pubsub.v1.TopicNames; +import io.grpc.CallOptions; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.Tracer; +import java.io.IOException; +import java.time.Duration; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Executor; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * A Cloud Pub/Sub publisher, that is + * associated with a specific topic at creation. + * + *

A {@link Publisher} provides built-in capabilities to automatically handle batching of + * messages, controlling memory utilization, and retrying API calls on transient errors. + * + *

With customizable options that control: + * + *

    + *
  • Message batching: such as number of messages or max batch byte size. + *
  • Retries: such as the maximum duration of retries for a failing batch of messages. + *
+ * + *

{@link Publisher} will use the credentials set on the channel, which uses application default + * credentials through {@link GoogleCredentials#getApplicationDefault} by default. + */ +public class Publisher implements PublisherInterface { + private static final Logger logger = Logger.getLogger(Publisher.class.getName()); + private LoggingUtil loggingUtil = new LoggingUtil(); + + private static final String GZIP_COMPRESSION = "gzip"; + + private static final String OPEN_TELEMETRY_TRACER_NAME = "com.google.cloud.pubsub.v1"; + + private final String topicName; + private final int topicNameSize; + private final TopicName topicNameObject; + + private final BatchingSettings batchingSettings; + private final boolean enableMessageOrdering; + + private final Lock messagesBatchLock; + + private final Map messagesBatches; + + private final AtomicBoolean activeAlarm; + + private final PublisherStub publisherStub; + + private final ScheduledExecutorService executor; + + private final SequentialExecutorService.CallbackExecutor sequentialExecutor; + + private final AtomicBoolean shutdown; + private final BackgroundResource backgroundResources; + private final Waiter messagesWaiter; + private ScheduledFuture currentAlarmFuture; + private final ApiFunction messageTransform; + + private MessageFlowController flowController = null; + + private final boolean enableCompression; + private final long compressionBytesThreshold; + + private final GrpcCallContext publishContext; + private final GrpcCallContext publishContextWithCompression; + + private final boolean enableOpenTelemetryTracing; + private final OpenTelemetry openTelemetry; + private OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(null, false); + + /** The maximum number of messages in one request. Defined by the API. */ + public static long getApiMaxRequestElementCount() { + return 1000L; + } + + /** The maximum size of one request. Defined by the API. */ + public static long getApiMaxRequestBytes() { + return 10L * 1000L * 1000L; // 10 megabytes (https://en.wikipedia.org/wiki/Megabyte) + } + + private Publisher(Builder builder) throws IOException { + topicName = builder.topicName; + topicNameSize = + CodedOutputStream.computeStringSize(PublishRequest.TOPIC_FIELD_NUMBER, this.topicName); + topicNameObject = TopicName.parse(this.topicName); + + this.batchingSettings = builder.batchingSettings; + FlowControlSettings flowControl = this.batchingSettings.getFlowControlSettings(); + if (flowControl != null + && flowControl.getLimitExceededBehavior() != FlowController.LimitExceededBehavior.Ignore) { + this.flowController = + new MessageFlowController( + flowControl.getMaxOutstandingElementCount(), + flowControl.getMaxOutstandingRequestBytes(), + flowControl.getLimitExceededBehavior()); + } + + this.enableMessageOrdering = builder.enableMessageOrdering; + this.messageTransform = builder.messageTransform; + this.enableCompression = builder.enableCompression; + this.compressionBytesThreshold = builder.compressionBytesThreshold; + this.enableOpenTelemetryTracing = builder.enableOpenTelemetryTracing; + this.openTelemetry = builder.openTelemetry; + if (this.openTelemetry != null && this.enableOpenTelemetryTracing) { + Tracer openTelemetryTracer = builder.openTelemetry.getTracer(OPEN_TELEMETRY_TRACER_NAME); + if (openTelemetryTracer != null) { + this.tracer = + new OpenTelemetryPubsubTracer(openTelemetryTracer, this.enableOpenTelemetryTracing); + } + } + + messagesBatches = new HashMap<>(); + messagesBatchLock = new ReentrantLock(); + activeAlarm = new AtomicBoolean(false); + executor = builder.executorProvider.getExecutor(); + sequentialExecutor = new SequentialExecutorService.CallbackExecutor(executor); + List backgroundResourceList = new ArrayList<>(); + if (builder.executorProvider.shouldAutoClose()) { + backgroundResourceList.add(new ExecutorAsBackgroundResource(executor)); + } + + // Publisher used to take maxAttempt == 0 to mean infinity, but to GAX it means don't retry. + // We post-process this here to keep backward-compatibility. + // Also, if "message ordering" is enabled, the publisher should retry sending the failed + // message infinitely rather than sending the next one. + RetrySettings.Builder retrySettingsBuilder = builder.retrySettings.toBuilder(); + if (retrySettingsBuilder.getMaxAttempts() == 0) { + retrySettingsBuilder.setMaxAttempts(Integer.MAX_VALUE); + } + if (enableMessageOrdering) { + // TODO: is there a way to have the default retry settings for requests without an ordering + // key? + retrySettingsBuilder + .setMaxAttempts(Integer.MAX_VALUE) + .setTotalTimeoutDuration(Duration.ofNanos(Long.MAX_VALUE)); + } + + PublisherStubSettings.Builder stubSettings = + PublisherStubSettings.newBuilder() + .setCredentialsProvider(builder.credentialsProvider) + .setExecutorProvider(FixedExecutorProvider.create(executor)) + .setTransportChannelProvider(builder.channelProvider) + .setEndpoint(builder.endpoint) + .setUniverseDomain(builder.universeDomain) + .setHeaderProvider(builder.headerProvider); + stubSettings + .publishSettings() + .setRetryableCodes( + StatusCode.Code.ABORTED, + StatusCode.Code.CANCELLED, + StatusCode.Code.DEADLINE_EXCEEDED, + StatusCode.Code.INTERNAL, + StatusCode.Code.RESOURCE_EXHAUSTED, + StatusCode.Code.UNKNOWN, + StatusCode.Code.UNAVAILABLE) + .setRetrySettings(retrySettingsBuilder.build()) + .setBatchingSettings(BatchingSettings.newBuilder().setIsEnabled(false).build()); + this.publisherStub = GrpcPublisherStub.create(stubSettings.build()); + backgroundResourceList.add(publisherStub); + backgroundResources = new BackgroundResourceAggregation(backgroundResourceList); + shutdown = new AtomicBoolean(false); + messagesWaiter = new Waiter(); + this.publishContext = GrpcCallContext.createDefault(); + this.publishContextWithCompression = + GrpcCallContext.createDefault() + .withCallOptions(CallOptions.DEFAULT.withCompression(GZIP_COMPRESSION)); + } + + /** Topic which the publisher publishes to. */ + public TopicName getTopicName() { + return TopicNames.parse(topicName); + } + + /** Topic which the publisher publishes to. */ + public String getTopicNameString() { + return topicName; + } + + /** + * Schedules the publishing of a message. The publishing of the message may occur immediately or + * be delayed based on the publisher batching options. + * + *

This method blocks in the downcall if using LimitExceededBehavior.Block in the flow control + * settings. + * + *

Example of publishing a message. + * + *

{@code
+   * String message = "my_message";
+   * ByteString data = ByteString.copyFromUtf8(message);
+   * PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build();
+   * ApiFuture messageIdFuture = publisher.publish(pubsubMessage);
+   * ApiFutures.addCallback(messageIdFuture, new ApiFutureCallback() {
+   *   public void onSuccess(String messageId) {
+   *     System.out.println("published with message id: " + messageId);
+   *   }
+   *
+   *   public void onFailure(Throwable t) {
+   *     System.out.println("failed to publish: " + t);
+   *   }
+   * }, MoreExecutors.directExecutor());
+   * }
+ * + * @param message the message to publish. + * @return the message ID wrapped in a future. + */ + @Override + public ApiFuture publish(PubsubMessage message) { + Preconditions.checkState(!shutdown.get(), "Cannot publish on a shut-down publisher."); + + final String orderingKey = message.getOrderingKey(); + Preconditions.checkState( + orderingKey.isEmpty() || enableMessageOrdering, + "Cannot publish a message with an ordering key when message ordering is not enabled in the " + + "Publisher client. Please create a Publisher client with " + + "setEnableMessageOrdering(true) in the builder."); + + PubsubMessageWrapper messageWrapper = + PubsubMessageWrapper.newBuilder(messageTransform.apply(message), topicNameObject).build(); + tracer.startPublisherSpan(messageWrapper); + + final OutstandingPublish outstandingPublish = new OutstandingPublish(messageWrapper); + + if (flowController != null) { + tracer.startPublishFlowControlSpan(messageWrapper); + try { + flowController.acquire(outstandingPublish.messageSize); + tracer.endPublishFlowControlSpan(messageWrapper); + } catch (FlowController.FlowControlException e) { + if (!orderingKey.isEmpty()) { + sequentialExecutor.stopPublish(orderingKey); + } + outstandingPublish.publishResult.setException(e); + tracer.setPublishFlowControlSpanException(messageWrapper, e); + return outstandingPublish.publishResult; + } + } + + List batchesToSend; + messagesBatchLock.lock(); + try { + tracer.startPublishBatchingSpan(messageWrapper); + if (!orderingKey.isEmpty() && sequentialExecutor.keyHasError(orderingKey)) { + outstandingPublish.publishResult.setException( + SequentialExecutorService.CallbackExecutor.CANCELLATION_EXCEPTION); + return outstandingPublish.publishResult; + } + MessagesBatch messagesBatch = messagesBatches.get(orderingKey); + if (messagesBatch == null) { + messagesBatch = new MessagesBatch(batchingSettings, topicNameSize, orderingKey); + messagesBatches.put(orderingKey, messagesBatch); + } + + batchesToSend = messagesBatch.add(outstandingPublish); + if (!batchesToSend.isEmpty() && messagesBatch.isEmpty()) { + messagesBatches.remove(orderingKey); + } + // Setup the next duration based delivery alarm if there are messages batched. + setupAlarm(); + // For messages with an ordering key, we need to publish with messagesBatchLock held in order + // to ensure another publish doesn't slip in and send a batch before these batches we already + // want to send. + if (!batchesToSend.isEmpty() && !orderingKey.isEmpty()) { + for (final OutstandingBatch batch : batchesToSend) { + logger.log(Level.FINER, "Scheduling a batch for immediate sending."); + publishOutstandingBatch(batch); + } + } + } finally { + messagesBatchLock.unlock(); + } + + messagesWaiter.incrementPendingCount(1); + + // For messages without ordering keys, it is okay to send batches without holding + // messagesBatchLock. + if (!batchesToSend.isEmpty() && orderingKey.isEmpty()) { + for (final OutstandingBatch batch : batchesToSend) { + logger.log(Level.FINER, "Scheduling a batch for immediate sending."); + executor.execute( + new Runnable() { + @Override + public void run() { + publishOutstandingBatch(batch); + } + }); + } + } + + return outstandingPublish.publishResult; + } + + /** + * There may be non-recoverable problems with a request for an ordering key. In that case, all + * subsequent requests will fail until this method is called. If the key is not currently paused, + * calling this method will be a no-op. + * + * @param key The key for which to resume publishing. + */ + public void resumePublish(String key) { + Preconditions.checkState(!shutdown.get(), "Cannot publish on a shut-down publisher."); + sequentialExecutor.resumePublish(key); + } + + private void setupAlarm() { + if (!messagesBatches.isEmpty()) { + if (!activeAlarm.getAndSet(true)) { + long delayThresholdMs = getBatchingSettings().getDelayThreshold().toMillis(); + logger.log(Level.FINER, "Setting up alarm for the next {0} ms.", delayThresholdMs); + currentAlarmFuture = + executor.schedule( + new Runnable() { + @Override + public void run() { + logger.log(Level.FINER, "Sending messages based on schedule."); + activeAlarm.getAndSet(false); + publishAllWithoutInflight(); + } + }, + delayThresholdMs, + TimeUnit.MILLISECONDS); + } + } else if (currentAlarmFuture != null) { + logger.log(Level.FINER, "Cancelling alarm, no more messages"); + if (activeAlarm.getAndSet(false)) { + currentAlarmFuture.cancel(false); + } + } + } + + /** + * Publish any outstanding batches if non-empty. This method sends buffered messages, but does not + * wait for the send operations to complete. To wait for messages to send, call {@code get} on the + * futures returned from {@code publish}. + */ + public void publishAllOutstanding() { + OutstandingBatch unorderedOutstandingBatch = null; + messagesBatchLock.lock(); + try { + for (MessagesBatch batch : messagesBatches.values()) { + if (!batch.isEmpty()) { + if (!batch.orderingKey.isEmpty()) { + // For messages with an ordering key, we need to publish with messagesBatchLock held in + // order to ensure another publish doesn't slip in and send a batch before these batches + // we already want to send. + publishOutstandingBatch(batch.popOutstandingBatch()); + } else { + unorderedOutstandingBatch = batch.popOutstandingBatch(); + } + } + } + messagesBatches.clear(); + } finally { + messagesBatchLock.unlock(); + } + if (unorderedOutstandingBatch != null) { + publishOutstandingBatch(unorderedOutstandingBatch); + } + } + + /** + * Publish any outstanding batches if non-empty and there are no other batches in flight. This + * method sends buffered messages, but does not wait for the send operations to complete. To wait + * for messages to send, call {@code get} on the futures returned from {@code publish}. + */ + private void publishAllWithoutInflight() { + OutstandingBatch unorderedOutstandingBatch = null; + messagesBatchLock.lock(); + try { + Iterator> it = messagesBatches.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = it.next(); + MessagesBatch batch = entry.getValue(); + String key = entry.getKey(); + if (batch.isEmpty()) { + it.remove(); + } else if (key.isEmpty()) { + // We will publish the batch with no ordering key outside messagesBatchLock. + unorderedOutstandingBatch = batch.popOutstandingBatch(); + it.remove(); + } else if (!sequentialExecutor.hasTasksInflight(key)) { + publishOutstandingBatch(batch.popOutstandingBatch()); + it.remove(); + } + } + } finally { + messagesBatchLock.unlock(); + } + if (unorderedOutstandingBatch != null) { + publishOutstandingBatch(unorderedOutstandingBatch); + } + } + + /** + * Publish any outstanding batches if non-empty and there are no other batches in flight for + * orderingKey. This method sends buffered messages, but does not wait for the send operations to + * complete. To wait for messages to send, call {@code get} on the futures returned from {@code + * publish}. + */ + private void publishAllWithoutInflightForKey(final String orderingKey) { + messagesBatchLock.lock(); + try { + MessagesBatch batch = messagesBatches.get(orderingKey); + if (batch != null && !sequentialExecutor.hasTasksInflight(orderingKey)) { + publishOutstandingBatch(batch.popOutstandingBatch()); + messagesBatches.remove(orderingKey); + } + } finally { + messagesBatchLock.unlock(); + } + } + + private ApiFuture publishCall(OutstandingBatch outstandingBatch) { + GrpcCallContext context = publishContext; + if (enableCompression && outstandingBatch.batchSizeBytes >= compressionBytesThreshold) { + context = publishContextWithCompression; + } + + int numMessagesInBatch = outstandingBatch.size(); + List pubsubMessagesList = new ArrayList(numMessagesInBatch); + List messageWrappers = outstandingBatch.getMessageWrappers(); + for (PubsubMessageWrapper messageWrapper : messageWrappers) { + tracer.endPublishBatchingSpan(messageWrapper); + pubsubMessagesList.add(messageWrapper.getPubsubMessage()); + } + + outstandingBatch.publishRpcSpan = tracer.startPublishRpcSpan(topicNameObject, messageWrappers); + + return publisherStub + .publishCallable() + .futureCall( + PublishRequest.newBuilder() + .setTopic(topicName) + .addAllMessages(pubsubMessagesList) + .build(), + context); + } + + private void publishOutstandingBatch(final OutstandingBatch outstandingBatch) { + if (outstandingBatch.size() == 0) { + logger.log(Level.WARNING, "Attempted to publish batch with zero messages."); + return; + } + + loggingUtil.logPublisher( + LoggingUtil.SubSystem.PUBLISH_BATCH, + Level.FINE, + String.format("Attempting to batch publish %d messages", outstandingBatch.size()), + outstandingBatch.getMessageWrappers().get(0)); + + final ApiFutureCallback futureCallback = + new ApiFutureCallback() { + @Override + public void onSuccess(PublishResponse result) { + try { + if (result == null || result.getMessageIdsCount() != outstandingBatch.size()) { + outstandingBatch.onFailure( + new IllegalStateException( + String.format( + "The publish result count %s does not match " + + "the expected %s results. Please contact Cloud Pub/Sub support " + + "if this frequently occurs", + result.getMessageIdsCount(), outstandingBatch.size()))); + } else { + outstandingBatch.onSuccess(result.getMessageIdsList()); + if (!activeAlarm.get() + && outstandingBatch.orderingKey != null + && !outstandingBatch.orderingKey.isEmpty()) { + publishAllWithoutInflightForKey(outstandingBatch.orderingKey); + } + } + } finally { + messagesWaiter.incrementPendingCount(-outstandingBatch.size()); + } + } + + @Override + public void onFailure(Throwable t) { + try { + if (outstandingBatch.orderingKey != null && !outstandingBatch.orderingKey.isEmpty()) { + messagesBatchLock.lock(); + try { + MessagesBatch messagesBatch = messagesBatches.get(outstandingBatch.orderingKey); + if (messagesBatch != null) { + for (OutstandingPublish outstanding : messagesBatch.messages) { + outstanding.publishResult.setException( + SequentialExecutorService.CallbackExecutor.CANCELLATION_EXCEPTION); + } + messagesBatches.remove(outstandingBatch.orderingKey); + } + } finally { + messagesBatchLock.unlock(); + } + } + outstandingBatch.onFailure(t); + } finally { + messagesWaiter.incrementPendingCount(-outstandingBatch.size()); + } + } + }; + + ApiFuture future; + Executor callbackExecutor = directExecutor(); + if (outstandingBatch.orderingKey == null || outstandingBatch.orderingKey.isEmpty()) { + future = publishCall(outstandingBatch); + } else { + // If ordering key is specified, publish the batch using the sequential executor. + future = + sequentialExecutor.submit( + outstandingBatch.orderingKey, + new Callable>() { + public ApiFuture call() { + return publishCall(outstandingBatch); + } + }); + callbackExecutor = this.executor; + } + ApiFutures.addCallback(future, futureCallback, callbackExecutor); + } + + private final class OutstandingBatch { + final List outstandingPublishes; + final long creationTime; + int attempt; + int batchSizeBytes; + final String orderingKey; + Span publishRpcSpan; + + OutstandingBatch( + List outstandingPublishes, int batchSizeBytes, String orderingKey) { + this.outstandingPublishes = outstandingPublishes; + attempt = 1; + creationTime = System.currentTimeMillis(); + this.batchSizeBytes = batchSizeBytes; + this.orderingKey = orderingKey; + } + + int size() { + return outstandingPublishes.size(); + } + + private List getMessageWrappers() { + List results = new ArrayList<>(outstandingPublishes.size()); + for (OutstandingPublish outstandingPublish : outstandingPublishes) { + results.add(outstandingPublish.messageWrapper); + } + return results; + } + + private void onFailure(Throwable t) { + tracer.setPublishRpcSpanException(publishRpcSpan, t); + + for (OutstandingPublish outstandingPublish : outstandingPublishes) { + if (flowController != null) { + flowController.release(outstandingPublish.messageSize); + } + outstandingPublish.publishResult.setException(t); + tracer.endPublisherSpan(outstandingPublish.messageWrapper); + } + } + + private void onSuccess(Iterable results) { + tracer.endPublishRpcSpan(publishRpcSpan); + + Iterator messagesResultsIt = outstandingPublishes.iterator(); + for (String messageId : results) { + OutstandingPublish nextPublish = messagesResultsIt.next(); + if (flowController != null) { + flowController.release(nextPublish.messageSize); + } + nextPublish.publishResult.set(messageId); + tracer.setPublisherMessageIdSpanAttribute(nextPublish.messageWrapper, messageId); + tracer.endPublisherSpan(nextPublish.messageWrapper); + } + } + } + + private static final class OutstandingPublish { + final SettableApiFuture publishResult; + final PubsubMessageWrapper messageWrapper; + final int messageSize; + + OutstandingPublish(PubsubMessageWrapper messageWrapper) { + this.publishResult = SettableApiFuture.create(); + this.messageWrapper = messageWrapper; + this.messageSize = + CodedOutputStream.computeMessageSize( + PublishRequest.MESSAGES_FIELD_NUMBER, messageWrapper.getPubsubMessage()); + } + } + + /** The batching settings configured on this {@code Publisher}. */ + public BatchingSettings getBatchingSettings() { + return batchingSettings; + } + + /** + * Schedules immediate publishing of any outstanding messages and waits until all are processed. + * + *

Sends remaining outstanding messages and prevents future calls to publish. This method + * should be invoked prior to deleting the {@link Publisher} object in order to ensure that no + * pending messages are lost. + */ + public void shutdown() { + Preconditions.checkState( + !shutdown.getAndSet(true), "Cannot shut down a publisher already shut-down."); + if (currentAlarmFuture != null && activeAlarm.getAndSet(false)) { + currentAlarmFuture.cancel(false); + } + publishAllOutstanding(); + messagesWaiter.waitComplete(); + backgroundResources.shutdown(); + } + + /** + * Wait for all work has completed execution after a {@link #shutdown()} request, or the timeout + * occurs, or the current thread is interrupted. + * + *

Call this method to make sure all resources are freed properly. + */ + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return backgroundResources.awaitTermination(duration, unit); + } + + /** + * Constructs a new {@link Builder} using the given topic. + * + *

Example of creating a {@code Publisher}. + * + *

{@code
+   * String projectName = "my_project";
+   * String topicName = "my_topic";
+   * ProjectTopicName topic = ProjectTopicName.create(projectName, topicName);
+   * Publisher publisher = Publisher.newBuilder(topic).build();
+   * try {
+   *   // ...
+   * } finally {
+   *   // When finished with the publisher, make sure to shutdown to free up resources.
+   *   publisher.shutdown();
+   *   publisher.awaitTermination(1, TimeUnit.MINUTES);
+   * }
+   * }
+ */ + public static Builder newBuilder(TopicName topicName) { + return newBuilder(topicName.toString()); + } + + /** + * Constructs a new {@link Builder} using the given topic. + * + *

Example of creating a {@code Publisher}. + * + *

{@code
+   * String topic = "projects/my_project/topics/my_topic";
+   * Publisher publisher = Publisher.newBuilder(topic).build();
+   * try {
+   *   // ...
+   * } finally {
+   *   // When finished with the publisher, make sure to shutdown to free up resources.
+   *   publisher.shutdown();
+   *   publisher.awaitTermination(1, TimeUnit.MINUTES);
+   * }
+   * }
+ */ + public static Builder newBuilder(String topicName) { + return new Builder(topicName); + } + + /** A builder of {@link Publisher}s. */ + public static final class Builder { + static final Duration MIN_TOTAL_TIMEOUT = Duration.ofSeconds(10); + static final Duration MIN_RPC_TIMEOUT = Duration.ofMillis(10); + + // Meaningful defaults. + static final long DEFAULT_ELEMENT_COUNT_THRESHOLD = 100L; + static final long DEFAULT_REQUEST_BYTES_THRESHOLD = 1000L; // 1 kB + static final Duration DEFAULT_DELAY_THRESHOLD = Duration.ofMillis(1); + private static final Duration DEFAULT_INITIAL_RPC_TIMEOUT = Duration.ofSeconds(5); + private static final Duration DEFAULT_MAX_RPC_TIMEOUT = Duration.ofSeconds(60); + private static final Duration DEFAULT_TOTAL_TIMEOUT = Duration.ofSeconds(600); + private static final Duration DEFAULT_INITIAL_RETRY_DELAY = Duration.ofMillis(100); + private static final Duration DEFAULT_MAX_RETRY_DELAY = Duration.ofSeconds(60); + private static final double DEFAULT_MULTIPLIER = 4; + static final BatchingSettings DEFAULT_BATCHING_SETTINGS = + BatchingSettings.newBuilder() + .setDelayThresholdDuration(DEFAULT_DELAY_THRESHOLD) + .setRequestByteThreshold(DEFAULT_REQUEST_BYTES_THRESHOLD) + .setElementCountThreshold(DEFAULT_ELEMENT_COUNT_THRESHOLD) + .setFlowControlSettings( + FlowControlSettings.newBuilder() + .setLimitExceededBehavior(FlowController.LimitExceededBehavior.Ignore) + .build()) + .build(); + static final RetrySettings DEFAULT_RETRY_SETTINGS = + RetrySettings.newBuilder() + .setTotalTimeoutDuration(DEFAULT_TOTAL_TIMEOUT) + .setInitialRetryDelayDuration(DEFAULT_INITIAL_RETRY_DELAY) + .setRetryDelayMultiplier(DEFAULT_MULTIPLIER) + .setMaxRetryDelayDuration(DEFAULT_MAX_RETRY_DELAY) + .setInitialRpcTimeoutDuration(DEFAULT_INITIAL_RPC_TIMEOUT) + .setRpcTimeoutMultiplier(DEFAULT_MULTIPLIER) + .setMaxRpcTimeoutDuration(DEFAULT_MAX_RPC_TIMEOUT) + .build(); + static final boolean DEFAULT_ENABLE_MESSAGE_ORDERING = false; + private static final int THREADS_PER_CPU = 5; + static final ExecutorProvider DEFAULT_EXECUTOR_PROVIDER = + InstantiatingExecutorProvider.newBuilder() + .setExecutorThreadCount(THREADS_PER_CPU * Runtime.getRuntime().availableProcessors()) + .build(); + static final boolean DEFAULT_ENABLE_COMPRESSION = false; + static final long DEFAULT_COMPRESSION_BYTES_THRESHOLD = 240L; + + String topicName; + private String endpoint = null; + private String universeDomain = null; + + // Batching options + BatchingSettings batchingSettings = DEFAULT_BATCHING_SETTINGS; + + RetrySettings retrySettings = DEFAULT_RETRY_SETTINGS; + + private boolean enableMessageOrdering = DEFAULT_ENABLE_MESSAGE_ORDERING; + + private TransportChannelProvider channelProvider = + TopicAdminSettings.defaultGrpcTransportProviderBuilder().setChannelsPerCpu(1).build(); + + private HeaderProvider headerProvider = new NoHeaderProvider(); + private HeaderProvider internalHeaderProvider = + TopicAdminSettings.defaultApiClientHeaderProviderBuilder().build(); + ExecutorProvider executorProvider = DEFAULT_EXECUTOR_PROVIDER; + private CredentialsProvider credentialsProvider = + TopicAdminSettings.defaultCredentialsProviderBuilder().build(); + + private ApiFunction messageTransform = + new ApiFunction() { + @Override + public PubsubMessage apply(PubsubMessage input) { + return input; + } + }; + + private boolean enableCompression = DEFAULT_ENABLE_COMPRESSION; + private long compressionBytesThreshold = DEFAULT_COMPRESSION_BYTES_THRESHOLD; + + private boolean enableOpenTelemetryTracing = false; + private OpenTelemetry openTelemetry = null; + + private Builder(String topic) { + this.topicName = Preconditions.checkNotNull(topic); + } + + /** + * {@code ChannelProvider} to use to create Channels, which must point at Cloud Pub/Sub + * endpoint. + * + *

For performance, this client benefits from having multiple underlying connections. See + * {@link com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.Builder#setPoolSize(int)}. + */ + public Builder setChannelProvider(TransportChannelProvider channelProvider) { + this.channelProvider = Preconditions.checkNotNull(channelProvider); + return this; + } + + /** + * Sets the static header provider. The header provider will be called during client + * construction only once. The headers returned by the provider will be cached and supplied as + * is for each request issued by the constructed client. Some reserved headers can be overridden + * (e.g. Content-Type) or merged with the default value (e.g. User-Agent) by the underlying + * transport layer. + * + * @param headerProvider the header provider + * @return the builder + */ + @BetaApi + public Builder setHeaderProvider(HeaderProvider headerProvider) { + this.headerProvider = Preconditions.checkNotNull(headerProvider); + return this; + } + + /** + * Sets the static header provider for getting internal (library-defined) headers. The header + * provider will be called during client construction only once. The headers returned by the + * provider will be cached and supplied as is for each request issued by the constructed client. + * Some reserved headers can be overridden (e.g. Content-Type) or merged with the default value + * (e.g. User-Agent) by the underlying transport layer. + * + * @param internalHeaderProvider the internal header provider + * @return the builder + */ + Builder setInternalHeaderProvider(HeaderProvider internalHeaderProvider) { + this.internalHeaderProvider = Preconditions.checkNotNull(internalHeaderProvider); + return this; + } + + /** {@code CredentialsProvider} to use to create Credentials to authenticate calls. */ + public Builder setCredentialsProvider(CredentialsProvider credentialsProvider) { + this.credentialsProvider = Preconditions.checkNotNull(credentialsProvider); + return this; + } + + // Batching options + public Builder setBatchingSettings(BatchingSettings batchingSettings) { + Preconditions.checkNotNull(batchingSettings); + Preconditions.checkNotNull(batchingSettings.getElementCountThreshold()); + Preconditions.checkArgument(batchingSettings.getElementCountThreshold() > 0); + Preconditions.checkNotNull(batchingSettings.getRequestByteThreshold()); + Preconditions.checkArgument(batchingSettings.getRequestByteThreshold() > 0); + Preconditions.checkNotNull(batchingSettings.getDelayThreshold()); + Preconditions.checkArgument(batchingSettings.getDelayThreshold().toMillis() > 0); + FlowControlSettings flowControlSettings = batchingSettings.getFlowControlSettings(); + if (flowControlSettings.getLimitExceededBehavior() != LimitExceededBehavior.Ignore) { + Preconditions.checkArgument(flowControlSettings.getMaxOutstandingElementCount() > 0); + Preconditions.checkArgument(flowControlSettings.getMaxOutstandingRequestBytes() > 0); + } + this.batchingSettings = batchingSettings; + return this; + } + + /** Configures the Publisher's retry parameters. */ + public Builder setRetrySettings(RetrySettings retrySettings) { + Preconditions.checkArgument( + retrySettings.getTotalTimeoutDuration().compareTo(MIN_TOTAL_TIMEOUT) >= 0); + Preconditions.checkArgument( + retrySettings.getInitialRpcTimeoutDuration().compareTo(MIN_RPC_TIMEOUT) >= 0); + this.retrySettings = retrySettings; + return this; + } + + /** Sets the message ordering option. */ + public Builder setEnableMessageOrdering(boolean enableMessageOrdering) { + this.enableMessageOrdering = enableMessageOrdering; + return this; + } + + /** Gives the ability to set a custom executor to be used by the library. */ + public Builder setExecutorProvider(ExecutorProvider executorProvider) { + this.executorProvider = Preconditions.checkNotNull(executorProvider); + return this; + } + + /** + * Gives the ability to set an {@link ApiFunction} that will transform the {@link PubsubMessage} + * before it is sent + */ + @BetaApi + public Builder setTransform(ApiFunction messageTransform) { + this.messageTransform = + Preconditions.checkNotNull(messageTransform, "The messageTransform cannnot be null."); + return this; + } + + /** Gives the ability to override the gRPC endpoint. */ + public Builder setEndpoint(String endpoint) { + this.endpoint = endpoint; + return this; + } + + /** Gives the ability to override the universe domain. */ + public Builder setUniverseDomain(String universeDomain) { + this.universeDomain = universeDomain; + return this; + } + + /** Gives the ability to enable transport compression. */ + public Builder setEnableCompression(boolean enableCompression) { + this.enableCompression = enableCompression; + return this; + } + + /** + * Sets the threshold (in bytes) above which messages are compressed for transport. Only takes + * effect if setEnableCompression(true) is also called." + */ + public Builder setCompressionBytesThreshold(long compressionBytesThreshold) { + this.compressionBytesThreshold = compressionBytesThreshold; + return this; + } + + /** + * OpenTelemetry will be enabled if setEnableOpenTelemetry is true and and instance of + * OpenTelemetry has been provied. Warning: traces are subject to change. The name and + * attributes of a span might change without notice. Only use run traces interactively. Don't + * use in automation. Running non-interactive traces can cause problems if the underlying trace + * architecture changes without notice. + */ + + /** Gives the ability to enable Open Telemetry Tracing */ + public Builder setEnableOpenTelemetryTracing(boolean enableOpenTelemetryTracing) { + this.enableOpenTelemetryTracing = enableOpenTelemetryTracing; + return this; + } + + /** Sets the instance of OpenTelemetry for the Publisher class. */ + public Builder setOpenTelemetry(OpenTelemetry openTelemetry) { + this.openTelemetry = openTelemetry; + return this; + } + + /** Returns the default BatchingSettings used by the client if settings are not provided. */ + public static BatchingSettings getDefaultBatchingSettings() { + return DEFAULT_BATCHING_SETTINGS; + } + + public Publisher build() throws IOException { + return new Publisher(this); + } + } + + private static class MessageFlowController { + private final Lock lock; + private final Long messageLimit; + private final Long byteLimit; + private final FlowController.LimitExceededBehavior limitBehavior; + + private Long outstandingMessages; + private Long outstandingBytes; + private LinkedList awaitingMessageAcquires; + private LinkedList awaitingBytesAcquires; + + MessageFlowController( + Long messageLimit, Long byteLimit, FlowController.LimitExceededBehavior limitBehavior) { + this.messageLimit = messageLimit; + this.byteLimit = byteLimit; + this.limitBehavior = limitBehavior; + this.lock = new ReentrantLock(); + + this.outstandingMessages = 0L; + this.outstandingBytes = 0L; + + this.awaitingMessageAcquires = new LinkedList(); + this.awaitingBytesAcquires = new LinkedList(); + } + + void acquire(long messageSize) throws FlowController.FlowControlException { + if (messageSize > byteLimit) { + logger.log( + Level.WARNING, + "Attempted to publish message with byte size > request byte flow control limit."); + throw new FlowController.MaxOutstandingRequestBytesReachedException(byteLimit); + } + lock.lock(); + try { + if (outstandingMessages >= messageLimit + && limitBehavior == FlowController.LimitExceededBehavior.ThrowException) { + throw new FlowController.MaxOutstandingElementCountReachedException(messageLimit); + } + if (outstandingBytes + messageSize >= byteLimit + && limitBehavior == FlowController.LimitExceededBehavior.ThrowException) { + throw new FlowController.MaxOutstandingRequestBytesReachedException(byteLimit); + } + + // We can acquire or we should wait until we can acquire. + // Start by acquiring a slot for a message. + CountDownLatch messageWaiter = null; + while (outstandingMessages >= messageLimit) { + if (messageWaiter == null) { + // This message gets added to the back of the line. + messageWaiter = new CountDownLatch(1); + awaitingMessageAcquires.addLast(messageWaiter); + } else { + // This message already in line stays at the head of the line. + messageWaiter = new CountDownLatch(1); + awaitingMessageAcquires.set(0, messageWaiter); + } + lock.unlock(); + try { + messageWaiter.await(); + } catch (InterruptedException e) { + logger.log(Level.WARNING, "Interrupted while waiting to acquire flow control tokens"); + } + lock.lock(); + } + ++outstandingMessages; + if (messageWaiter != null) { + awaitingMessageAcquires.removeFirst(); + } + + // There may be some surplus messages left; let the next message waiting for a token have + // one. + if (!awaitingMessageAcquires.isEmpty() && outstandingMessages < messageLimit) { + awaitingMessageAcquires.getFirst().countDown(); + } + + // Now acquire space for bytes. + CountDownLatch bytesWaiter = null; + Long bytesRemaining = messageSize; + while (outstandingBytes + bytesRemaining >= byteLimit) { + // Take what is available. + Long available = byteLimit - outstandingBytes; + bytesRemaining -= available; + outstandingBytes = byteLimit; + if (bytesWaiter == null) { + // This message gets added to the back of the line. + bytesWaiter = new CountDownLatch(1); + awaitingBytesAcquires.addLast(bytesWaiter); + } else { + // This message already in line stays at the head of the line. + bytesWaiter = new CountDownLatch(1); + awaitingBytesAcquires.set(0, bytesWaiter); + } + lock.unlock(); + try { + bytesWaiter.await(); + } catch (InterruptedException e) { + logger.log(Level.WARNING, "Interrupted while waiting to acquire flow control tokens"); + } + lock.lock(); + } + + outstandingBytes += bytesRemaining; + if (bytesWaiter != null) { + awaitingBytesAcquires.removeFirst(); + } + // There may be some surplus bytes left; let the next message waiting for bytes have some. + if (!awaitingBytesAcquires.isEmpty() && outstandingBytes < byteLimit) { + awaitingBytesAcquires.getFirst().countDown(); + } + } finally { + lock.unlock(); + } + } + + private void notifyNextAcquires() { + if (!awaitingMessageAcquires.isEmpty()) { + CountDownLatch awaitingAcquire = awaitingMessageAcquires.getFirst(); + awaitingAcquire.countDown(); + } + if (!awaitingBytesAcquires.isEmpty()) { + CountDownLatch awaitingAcquire = awaitingBytesAcquires.getFirst(); + awaitingAcquire.countDown(); + } + } + + void release(long messageSize) { + lock.lock(); + --outstandingMessages; + outstandingBytes -= messageSize; + notifyNextAcquires(); + lock.unlock(); + } + } + + private class MessagesBatch { + private List messages; + private int initialBatchedBytes; + private int batchedBytes; + private String orderingKey; + private final BatchingSettings batchingSettings; + + private MessagesBatch( + BatchingSettings batchingSettings, int initialBatchedBytes, String orderingKey) { + this.batchingSettings = batchingSettings; + this.initialBatchedBytes = initialBatchedBytes; + this.orderingKey = orderingKey; + reset(); + } + + private OutstandingBatch popOutstandingBatch() { + OutstandingBatch batch = new OutstandingBatch(messages, batchedBytes, orderingKey); + reset(); + return batch; + } + + private void reset() { + messages = new LinkedList<>(); + batchedBytes = initialBatchedBytes; + } + + private boolean isEmpty() { + return messages.isEmpty(); + } + + private int getBatchedBytes() { + return batchedBytes; + } + + private int getMessagesCount() { + return messages.size(); + } + + private boolean hasBatchingBytes() { + return getMaxBatchBytes() > 0; + } + + private long getMaxBatchBytes() { + return batchingSettings.getRequestByteThreshold(); + } + + private List add(OutstandingPublish outstandingPublish) { + List batchesToSend = new ArrayList<>(); + // Check if the next message makes the current batch exceed the max batch byte size. + if (!isEmpty() + && hasBatchingBytes() + && getBatchedBytes() + outstandingPublish.messageSize >= getMaxBatchBytes()) { + batchesToSend.add(popOutstandingBatch()); + } + + messages.add(outstandingPublish); + batchedBytes += outstandingPublish.messageSize; + + // Border case: If the message to send is greater or equals to the max batch size then send it + // immediately. + // Alternatively if after adding the message we have reached the batch max messages then we + // have a batch to send. + // Note that exceeding {@link Publisher#getApiMaxRequestBytes()} will result in failed + // publishes without compression and may yet fail if a request is not sufficiently compressed. + if ((hasBatchingBytes() && getBatchedBytes() >= getMaxBatchBytes()) + || getMessagesCount() == batchingSettings.getElementCountThreshold()) { + batchesToSend.add(popOutstandingBatch()); + } + + return batchesToSend; + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PublisherInterface.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PublisherInterface.java new file mode 100644 index 000000000000..2a9d25b92453 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PublisherInterface.java @@ -0,0 +1,55 @@ +/* + * Copyright 2020 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.ApiFuture; +import com.google.pubsub.v1.PubsubMessage; + +/** + * An interface for a Cloud Pub/Sub publisher. + */ +public interface PublisherInterface { + /** + * Schedules the publishing of a message. The future will be returned with the message ID on + * success or an exception on failure. + * + *

Some implementations of this method may block in the downcall until allowed by flow control. + * + *

Example of publishing a message. + * + *

{@code
+   * String message = "my_message";
+   * ByteString data = ByteString.copyFromUtf8(message);
+   * PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build();
+   * ApiFuture messageIdFuture = publisher.publish(pubsubMessage);
+   * ApiFutures.addCallback(messageIdFuture, new ApiFutureCallback() {
+   *   public void onSuccess(String messageId) {
+   *     System.out.println("published with message id: " + messageId);
+   *   }
+   *
+   *   public void onFailure(Throwable t) {
+   *     System.out.println("failed to publish: " + t);
+   *   }
+   * }, MoreExecutors.directExecutor());
+   * }
+ * + * @param message the message to publish. + * @return the message ID wrapped in a future. + */ + ApiFuture publish(PubsubMessage message); +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PubsubMessageWrapper.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PubsubMessageWrapper.java new file mode 100644 index 000000000000..19864a26f5a1 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/PubsubMessageWrapper.java @@ -0,0 +1,422 @@ +/* + * 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.TopicName; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.StatusCode; +import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; +import io.opentelemetry.context.Context; +import io.opentelemetry.context.propagation.TextMapGetter; +import io.opentelemetry.context.propagation.TextMapSetter; + +/** + * A wrapper class for a {@link PubsubMessage} object that handles creation and tracking of + * OpenTelemetry {@link Span} objects for different operations that occur during publishing. + */ +public class PubsubMessageWrapper { + private PubsubMessage message; + + private final TopicName topicName; + private final SubscriptionName subscriptionName; + + // Attributes set only for messages received from a streaming pull response. + private final String ackId; + private final int deliveryAttempt; + + private static final String PUBLISH_START_EVENT = "publish start"; + private static final String PUBLISH_END_EVENT = "publish end"; + + private static final String MODACK_START_EVENT = "modack start"; + private static final String MODACK_END_EVENT = "modack end"; + private static final String NACK_START_EVENT = "nack start"; + private static final String NACK_END_EVENT = "nack end"; + private static final String ACK_START_EVENT = "ack start"; + private static final String ACK_END_EVENT = "ack end"; + + private static final String GOOGCLIENT_PREFIX = "googclient_"; + + private static final String MESSAGING_MESSAGE_ID_ATTR_KEY = "messaging.message.id"; + private static final String MESSAGE_RESULT_ATTR_KEY = "messaging.gcp_pubsub.result"; + + private Span publisherSpan; + private Span publishFlowControlSpan; + private Span publishBatchingSpan; + + private Span subscriberSpan; + private Span subscribeConcurrencyControlSpan; + private Span subscribeSchedulerSpan; + private Span subscribeProcessSpan; + + private PubsubMessageWrapper(Builder builder) { + this.message = builder.message; + this.topicName = builder.topicName; + this.subscriptionName = builder.subscriptionName; + this.ackId = builder.ackId; + this.deliveryAttempt = builder.deliveryAttempt; + } + + static Builder newBuilder(PubsubMessage message, TopicName topicName) { + return new Builder(message, topicName); + } + + static Builder newBuilder( + PubsubMessage message, SubscriptionName subscriptionName, String ackId, int deliveryAttempt) { + return new Builder(message, subscriptionName, ackId, deliveryAttempt); + } + + /** Returns the PubsubMessage associated with this wrapper. */ + PubsubMessage getPubsubMessage() { + return message; + } + + void setPubsubMessage(PubsubMessage message) { + this.message = message; + } + + /** Returns the TopicName for this wrapper as a string. */ + String getTopicName() { + if (topicName != null) { + return topicName.getTopic(); + } + return ""; + } + + String getTopicProject() { + if (topicName != null) { + return topicName.getProject(); + } + return ""; + } + + /** Returns the SubscriptionName for this wrapper as a string. */ + String getSubscriptionName() { + if (subscriptionName != null) { + return subscriptionName.getSubscription(); + } + return ""; + } + + String getSubscriptionProject() { + if (subscriptionName != null) { + return subscriptionName.getProject(); + } + return ""; + } + + String getMessageId() { + return message.getMessageId(); + } + + String getAckId() { + return ackId; + } + + int getDataSize() { + return message.getData().size(); + } + + int getSerializedSize() { + return message.getSerializedSize(); + } + + String getOrderingKey() { + return message.getOrderingKey(); + } + + int getDeliveryAttempt() { + return deliveryAttempt; + } + + Span getPublisherSpan() { + return publisherSpan; + } + + void setPublisherSpan(Span span) { + this.publisherSpan = span; + } + + void setPublishFlowControlSpan(Span span) { + this.publishFlowControlSpan = span; + } + + void setPublishBatchingSpan(Span span) { + this.publishBatchingSpan = span; + } + + Span getSubscriberSpan() { + return subscriberSpan; + } + + void setSubscriberSpan(Span span) { + this.subscriberSpan = span; + } + + void setSubscribeConcurrencyControlSpan(Span span) { + this.subscribeConcurrencyControlSpan = span; + } + + void setSubscribeSchedulerSpan(Span span) { + this.subscribeSchedulerSpan = span; + } + + void setSubscribeProcessSpan(Span span) { + this.subscribeProcessSpan = span; + } + + /** Creates a publish start event that is tied to the publish RPC span time. */ + void addPublishStartEvent() { + if (publisherSpan != null) { + publisherSpan.addEvent(PUBLISH_START_EVENT); + } + } + + /** + * Sets the message ID attribute in the publisher parent span. This is called after the publish + * RPC returns with a message ID. + */ + void setPublisherMessageIdSpanAttribute(String messageId) { + if (publisherSpan != null) { + publisherSpan.setAttribute(MESSAGING_MESSAGE_ID_ATTR_KEY, messageId); + } + } + + /** Ends the publisher parent span if it exists. */ + void endPublisherSpan() { + if (publisherSpan != null) { + publisherSpan.addEvent(PUBLISH_END_EVENT); + publisherSpan.end(); + } + } + + /** Ends the publish flow control span if it exists. */ + void endPublishFlowControlSpan() { + if (publishFlowControlSpan != null) { + publishFlowControlSpan.end(); + } + } + + /** Ends the publish batching span if it exists. */ + void endPublishBatchingSpan() { + if (publishBatchingSpan != null) { + publishBatchingSpan.end(); + } + } + + /** + * Sets an error status and records an exception when an exception is thrown during flow control. + */ + void setPublishFlowControlSpanException(Throwable t) { + if (publishFlowControlSpan != null) { + publishFlowControlSpan.setStatus( + StatusCode.ERROR, "Exception thrown during publish flow control."); + publishFlowControlSpan.recordException(t); + endAllPublishSpans(); + } + } + + /** + * Creates start and end events for ModAcks, Nacks, and Acks that are tied to the corresponding + * RPC span start and end times. + */ + void addModAckStartEvent() { + if (subscriberSpan != null) { + subscriberSpan.addEvent(MODACK_START_EVENT); + } + } + + void addModAckEndEvent() { + if (subscriberSpan != null) { + subscriberSpan.addEvent(MODACK_END_EVENT); + } + } + + void addNackStartEvent() { + if (subscriberSpan != null) { + subscriberSpan.addEvent(NACK_START_EVENT); + } + } + + void addNackEndEvent() { + if (subscriberSpan != null) { + subscriberSpan.addEvent(NACK_END_EVENT); + } + } + + void addAckStartEvent() { + if (subscriberSpan != null) { + subscriberSpan.addEvent(ACK_START_EVENT); + } + } + + void addAckEndEvent() { + if (subscriberSpan != null) { + subscriberSpan.addEvent(ACK_END_EVENT); + } + } + + /** Ends the subscriber parent span if exists. */ + void endSubscriberSpan() { + if (subscriberSpan != null) { + subscriberSpan.end(); + } + } + + /** Ends the subscribe concurreny control span if exists. */ + void endSubscribeConcurrencyControlSpan() { + if (subscribeConcurrencyControlSpan != null) { + subscribeConcurrencyControlSpan.end(); + } + } + + /** Ends the subscribe scheduler span if exists. */ + void endSubscribeSchedulerSpan() { + if (subscribeSchedulerSpan != null) { + subscribeSchedulerSpan.end(); + } + } + + /** + * Ends the subscribe process span if it exists, creates an event with the appropriate result, and + * sets the result on the parent subscriber span. + */ + void endSubscribeProcessSpan(String action) { + if (subscribeProcessSpan != null) { + subscribeProcessSpan.addEvent(action + " called"); + subscribeProcessSpan.end(); + subscriberSpan.setAttribute(MESSAGE_RESULT_ATTR_KEY, action); + } + } + + /** Sets an exception on the subscriber span during Ack/ModAck/Nack failures */ + void setSubscriberSpanException(Throwable t, String exception) { + if (subscriberSpan != null) { + subscriberSpan.setStatus(StatusCode.ERROR, exception); + subscriberSpan.recordException(t); + endAllSubscribeSpans(); + } + } + + /** Sets result of the parent subscriber span to expired and ends its. */ + void setSubscriberSpanExpirationResult() { + if (subscriberSpan != null) { + subscriberSpan.setAttribute(MESSAGE_RESULT_ATTR_KEY, "expired"); + endSubscriberSpan(); + } + } + + /** + * Sets an error status and records an exception when an exception is thrown subscriber + * concurrency control. + */ + void setSubscribeConcurrencyControlSpanException(Throwable t) { + if (subscribeConcurrencyControlSpan != null) { + subscribeConcurrencyControlSpan.setStatus( + StatusCode.ERROR, "Exception thrown during subscribe concurrency control."); + subscribeConcurrencyControlSpan.recordException(t); + endAllSubscribeSpans(); + } + } + + /** Ends all publisher-side spans associated with this message wrapper. */ + private void endAllPublishSpans() { + endPublishFlowControlSpan(); + endPublishBatchingSpan(); + endPublisherSpan(); + } + + /** Ends all subscriber-side spans associated with this message wrapper. */ + private void endAllSubscribeSpans() { + endSubscribeConcurrencyControlSpan(); + endSubscribeSchedulerSpan(); + endSubscriberSpan(); + } + + /** + * Injects the span context into the attributes of a Pub/Sub message for propagation to the + * subscriber client. + */ + void injectSpanContext() { + TextMapSetter injectMessageAttributes = + new TextMapSetter() { + @Override + public void set(PubsubMessageWrapper carrier, String key, String value) { + PubsubMessage newMessage = + PubsubMessage.newBuilder(carrier.message) + .putAttributes(GOOGCLIENT_PREFIX + key, value) + .build(); + carrier.message = newMessage; + } + }; + W3CTraceContextPropagator.getInstance() + .inject(Context.current().with(publisherSpan), this, injectMessageAttributes); + } + + /** + * Extracts the span context from the attributes of a Pub/Sub message and creates the parent + * subscriber span using that context. + */ + Context extractSpanContext(Attributes attributes) { + TextMapGetter extractMessageAttributes = + new TextMapGetter() { + @Override + public String get(PubsubMessageWrapper carrier, String key) { + return carrier.message.getAttributesOrDefault(GOOGCLIENT_PREFIX + key, ""); + } + + public Iterable keys(PubsubMessageWrapper carrier) { + return carrier.message.getAttributesMap().keySet(); + } + }; + Context context = + W3CTraceContextPropagator.getInstance() + .extract(Context.current(), this, extractMessageAttributes); + return context; + } + + /** Builder of {@link PubsubMessageWrapper PubsubMessageWrapper}. */ + static final class Builder { + private PubsubMessage message = null; + private TopicName topicName = null; + private SubscriptionName subscriptionName = null; + private String ackId = null; + private int deliveryAttempt = 0; + + public Builder(PubsubMessage message, TopicName topicName) { + this.message = message; + this.topicName = topicName; + } + + public Builder( + PubsubMessage message, + SubscriptionName subscriptionName, + String ackId, + int deliveryAttempt) { + this.message = message; + this.subscriptionName = subscriptionName; + this.ackId = ackId; + this.deliveryAttempt = deliveryAttempt; + } + + public PubsubMessageWrapper build() { + return new PubsubMessageWrapper(this); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SchemaServiceClient.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SchemaServiceClient.java new file mode 100644 index 000000000000..74f1e9f1f71b --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SchemaServiceClient.java @@ -0,0 +1,2046 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutures; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.paging.AbstractFixedSizeCollection; +import com.google.api.gax.paging.AbstractPage; +import com.google.api.gax.paging.AbstractPagedListResponse; +import com.google.api.gax.rpc.PageContext; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.cloud.pubsub.v1.stub.SchemaServiceStub; +import com.google.cloud.pubsub.v1.stub.SchemaServiceStubSettings; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.CommitSchemaRequest; +import com.google.pubsub.v1.CreateSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRevisionRequest; +import com.google.pubsub.v1.GetSchemaRequest; +import com.google.pubsub.v1.ListSchemaRevisionsRequest; +import com.google.pubsub.v1.ListSchemaRevisionsResponse; +import com.google.pubsub.v1.ListSchemasRequest; +import com.google.pubsub.v1.ListSchemasResponse; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.RollbackSchemaRequest; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.SchemaName; +import com.google.pubsub.v1.ValidateMessageRequest; +import com.google.pubsub.v1.ValidateMessageResponse; +import com.google.pubsub.v1.ValidateSchemaRequest; +import com.google.pubsub.v1.ValidateSchemaResponse; +import java.io.IOException; +import java.util.List; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Service Description: Service for doing schema-related operations. + * + *

This class provides the ability to make remote calls to the backing service through method + * calls that map to API methods. Sample code to get started: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ *   ProjectName parent = ProjectName.of("[PROJECT]");
+ *   Schema schema = Schema.newBuilder().build();
+ *   String schemaId = "schemaId-697673060";
+ *   Schema response = schemaServiceClient.createSchema(parent, schema, schemaId);
+ * }
+ * }
+ * + *

Note: close() needs to be called on the SchemaServiceClient object to clean up resources such + * as threads. In the example above, try-with-resources is used, which automatically calls close(). + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Methods
MethodDescriptionMethod Variants

CreateSchema

Creates a schema.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • createSchema(CreateSchemaRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • createSchema(ProjectName parent, Schema schema, String schemaId) + *

  • createSchema(String parent, Schema schema, String schemaId) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • createSchemaCallable() + *

+ *

GetSchema

Gets a schema.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • getSchema(GetSchemaRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • getSchema(SchemaName name) + *

  • getSchema(String name) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • getSchemaCallable() + *

+ *

ListSchemas

Lists schemas in a project.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • listSchemas(ListSchemasRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • listSchemas(ProjectName parent) + *

  • listSchemas(String parent) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • listSchemasPagedCallable() + *

  • listSchemasCallable() + *

+ *

ListSchemaRevisions

Lists all schema revisions for the named schema.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • listSchemaRevisions(ListSchemaRevisionsRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • listSchemaRevisions(SchemaName name) + *

  • listSchemaRevisions(String name) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • listSchemaRevisionsPagedCallable() + *

  • listSchemaRevisionsCallable() + *

+ *

CommitSchema

Commits a new schema revision to an existing schema.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • commitSchema(CommitSchemaRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • commitSchema(SchemaName name, Schema schema) + *

  • commitSchema(String name, Schema schema) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • commitSchemaCallable() + *

+ *

RollbackSchema

Creates a new schema revision that is a copy of the provided revision_id.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • rollbackSchema(RollbackSchemaRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • rollbackSchema(SchemaName name, String revisionId) + *

  • rollbackSchema(String name, String revisionId) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • rollbackSchemaCallable() + *

+ *

DeleteSchemaRevision

Deletes a specific schema revision.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • deleteSchemaRevision(DeleteSchemaRevisionRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • deleteSchemaRevision(SchemaName name, String revisionId) + *

  • deleteSchemaRevision(String name, String revisionId) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • deleteSchemaRevisionCallable() + *

+ *

DeleteSchema

Deletes a schema.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • deleteSchema(DeleteSchemaRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • deleteSchema(SchemaName name) + *

  • deleteSchema(String name) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • deleteSchemaCallable() + *

+ *

ValidateSchema

Validates a schema.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • validateSchema(ValidateSchemaRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • validateSchema(ProjectName parent, Schema schema) + *

  • validateSchema(String parent, Schema schema) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • validateSchemaCallable() + *

+ *

ValidateMessage

Validates a message against a schema.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • validateMessage(ValidateMessageRequest request) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • validateMessageCallable() + *

+ *

SetIamPolicy

Sets the access control policy on the specified resource. Replacesany existing policy. + *

Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • setIamPolicy(SetIamPolicyRequest request) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • setIamPolicyCallable() + *

+ *

GetIamPolicy

Gets the access control policy for a resource. Returns an empty policyif the resource exists and does not have a policy set.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • getIamPolicy(GetIamPolicyRequest request) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • getIamPolicyCallable() + *

+ *

TestIamPermissions

Returns permissions that a caller has on the specified resource. If theresource does not exist, this will return an empty set ofpermissions, not a `NOT_FOUND` error. + *

Note: This operation is designed to be used for buildingpermission-aware UIs and command-line tools, not for authorizationchecking. This operation may "fail open" without warning.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • testIamPermissions(TestIamPermissionsRequest request) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • testIamPermissionsCallable() + *

+ *
+ * + *

See the individual methods for example code. + * + *

Many parameters require resource names to be formatted in a particular way. To assist with + * these names, this class includes a format method for each type of name, and additionally a parse + * method to extract the individual identifiers contained within names that are returned. + * + *

This class can be customized by passing in a custom instance of SchemaServiceSettings to + * create(). For example: + * + *

To customize credentials: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SchemaServiceSettings schemaServiceSettings =
+ *     SchemaServiceSettings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))
+ *         .build();
+ * SchemaServiceClient schemaServiceClient = SchemaServiceClient.create(schemaServiceSettings);
+ * }
+ * + *

To customize the endpoint: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SchemaServiceSettings schemaServiceSettings =
+ *     SchemaServiceSettings.newBuilder().setEndpoint(myEndpoint).build();
+ * SchemaServiceClient schemaServiceClient = SchemaServiceClient.create(schemaServiceSettings);
+ * }
+ * + *

To use REST (HTTP1.1/JSON) transport (instead of gRPC) for sending and receiving requests over + * the wire: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SchemaServiceSettings schemaServiceSettings =
+ *     SchemaServiceSettings.newHttpJsonBuilder().build();
+ * SchemaServiceClient schemaServiceClient = SchemaServiceClient.create(schemaServiceSettings);
+ * }
+ * + *

Please refer to the GitHub repository's samples for more quickstart code snippets. + */ +@Generated("by gapic-generator-java") +public class SchemaServiceClient implements BackgroundResource { + private final SchemaServiceSettings settings; + private final SchemaServiceStub stub; + + /** Constructs an instance of SchemaServiceClient with default settings. */ + public static final SchemaServiceClient create() throws IOException { + return create(SchemaServiceSettings.newBuilder().build()); + } + + /** + * Constructs an instance of SchemaServiceClient, using the given settings. The channels are + * created based on the settings passed in, or defaults for any settings that are not set. + */ + public static final SchemaServiceClient create(SchemaServiceSettings settings) + throws IOException { + return new SchemaServiceClient(settings); + } + + /** + * Constructs an instance of SchemaServiceClient, using the given stub for making calls. This is + * for advanced usage - prefer using create(SchemaServiceSettings). + */ + public static final SchemaServiceClient create(SchemaServiceStub stub) { + return new SchemaServiceClient(stub); + } + + /** + * Constructs an instance of SchemaServiceClient, using the given settings. This is protected so + * that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected SchemaServiceClient(SchemaServiceSettings settings) throws IOException { + this.settings = settings; + this.stub = ((SchemaServiceStubSettings) settings.getStubSettings()).createStub(); + } + + protected SchemaServiceClient(SchemaServiceStub stub) { + this.settings = null; + this.stub = stub; + } + + public final SchemaServiceSettings getSettings() { + return settings; + } + + public SchemaServiceStub getStub() { + return stub; + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   Schema schema = Schema.newBuilder().build();
+   *   String schemaId = "schemaId-697673060";
+   *   Schema response = schemaServiceClient.createSchema(parent, schema, schemaId);
+   * }
+   * }
+ * + * @param parent Required. The name of the project in which to create the schema. Format is + * `projects/{project-id}`. + * @param schema Required. The schema object to create. + *

This schema's `name` parameter is ignored. The schema object returned by CreateSchema + * will have a `name` made using the given `parent` and `schema_id`. + * @param schemaId The ID to use for the schema, which will become the final component of the + * schema's resource name. + *

See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for resource name + * constraints. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema createSchema(ProjectName parent, Schema schema, String schemaId) { + CreateSchemaRequest request = + CreateSchemaRequest.newBuilder() + .setParent(parent == null ? null : parent.toString()) + .setSchema(schema) + .setSchemaId(schemaId) + .build(); + return createSchema(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   String parent = ProjectName.of("[PROJECT]").toString();
+   *   Schema schema = Schema.newBuilder().build();
+   *   String schemaId = "schemaId-697673060";
+   *   Schema response = schemaServiceClient.createSchema(parent, schema, schemaId);
+   * }
+   * }
+ * + * @param parent Required. The name of the project in which to create the schema. Format is + * `projects/{project-id}`. + * @param schema Required. The schema object to create. + *

This schema's `name` parameter is ignored. The schema object returned by CreateSchema + * will have a `name` made using the given `parent` and `schema_id`. + * @param schemaId The ID to use for the schema, which will become the final component of the + * schema's resource name. + *

See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for resource name + * constraints. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema createSchema(String parent, Schema schema, String schemaId) { + CreateSchemaRequest request = + CreateSchemaRequest.newBuilder() + .setParent(parent) + .setSchema(schema) + .setSchemaId(schemaId) + .build(); + return createSchema(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   CreateSchemaRequest request =
+   *       CreateSchemaRequest.newBuilder()
+   *           .setParent(ProjectName.of("[PROJECT]").toString())
+   *           .setSchema(Schema.newBuilder().build())
+   *           .setSchemaId("schemaId-697673060")
+   *           .build();
+   *   Schema response = schemaServiceClient.createSchema(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema createSchema(CreateSchemaRequest request) { + return createSchemaCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   CreateSchemaRequest request =
+   *       CreateSchemaRequest.newBuilder()
+   *           .setParent(ProjectName.of("[PROJECT]").toString())
+   *           .setSchema(Schema.newBuilder().build())
+   *           .setSchemaId("schemaId-697673060")
+   *           .build();
+   *   ApiFuture future = schemaServiceClient.createSchemaCallable().futureCall(request);
+   *   // Do something.
+   *   Schema response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable createSchemaCallable() { + return stub.createSchemaCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]");
+   *   Schema response = schemaServiceClient.getSchema(name);
+   * }
+   * }
+ * + * @param name Required. The name of the schema to get. Format is + * `projects/{project}/schemas/{schema}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema getSchema(SchemaName name) { + GetSchemaRequest request = + GetSchemaRequest.newBuilder().setName(name == null ? null : name.toString()).build(); + return getSchema(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   String name = SchemaName.of("[PROJECT]", "[SCHEMA]").toString();
+   *   Schema response = schemaServiceClient.getSchema(name);
+   * }
+   * }
+ * + * @param name Required. The name of the schema to get. Format is + * `projects/{project}/schemas/{schema}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema getSchema(String name) { + GetSchemaRequest request = GetSchemaRequest.newBuilder().setName(name).build(); + return getSchema(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   GetSchemaRequest request =
+   *       GetSchemaRequest.newBuilder()
+   *           .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setView(SchemaView.forNumber(0))
+   *           .build();
+   *   Schema response = schemaServiceClient.getSchema(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema getSchema(GetSchemaRequest request) { + return getSchemaCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   GetSchemaRequest request =
+   *       GetSchemaRequest.newBuilder()
+   *           .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setView(SchemaView.forNumber(0))
+   *           .build();
+   *   ApiFuture future = schemaServiceClient.getSchemaCallable().futureCall(request);
+   *   // Do something.
+   *   Schema response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable getSchemaCallable() { + return stub.getSchemaCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists schemas in a project. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   for (Schema element : schemaServiceClient.listSchemas(parent).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param parent Required. The name of the project in which to list schemas. Format is + * `projects/{project-id}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListSchemasPagedResponse listSchemas(ProjectName parent) { + ListSchemasRequest request = + ListSchemasRequest.newBuilder() + .setParent(parent == null ? null : parent.toString()) + .build(); + return listSchemas(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists schemas in a project. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   String parent = ProjectName.of("[PROJECT]").toString();
+   *   for (Schema element : schemaServiceClient.listSchemas(parent).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param parent Required. The name of the project in which to list schemas. Format is + * `projects/{project-id}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListSchemasPagedResponse listSchemas(String parent) { + ListSchemasRequest request = ListSchemasRequest.newBuilder().setParent(parent).build(); + return listSchemas(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists schemas in a project. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   ListSchemasRequest request =
+   *       ListSchemasRequest.newBuilder()
+   *           .setParent(ProjectName.of("[PROJECT]").toString())
+   *           .setView(SchemaView.forNumber(0))
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   for (Schema element : schemaServiceClient.listSchemas(request).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListSchemasPagedResponse listSchemas(ListSchemasRequest request) { + return listSchemasPagedCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists schemas in a project. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   ListSchemasRequest request =
+   *       ListSchemasRequest.newBuilder()
+   *           .setParent(ProjectName.of("[PROJECT]").toString())
+   *           .setView(SchemaView.forNumber(0))
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   ApiFuture future = schemaServiceClient.listSchemasPagedCallable().futureCall(request);
+   *   // Do something.
+   *   for (Schema element : future.get().iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable + listSchemasPagedCallable() { + return stub.listSchemasPagedCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists schemas in a project. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   ListSchemasRequest request =
+   *       ListSchemasRequest.newBuilder()
+   *           .setParent(ProjectName.of("[PROJECT]").toString())
+   *           .setView(SchemaView.forNumber(0))
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   while (true) {
+   *     ListSchemasResponse response = schemaServiceClient.listSchemasCallable().call(request);
+   *     for (Schema element : response.getSchemasList()) {
+   *       // doThingsWith(element);
+   *     }
+   *     String nextPageToken = response.getNextPageToken();
+   *     if (!Strings.isNullOrEmpty(nextPageToken)) {
+   *       request = request.toBuilder().setPageToken(nextPageToken).build();
+   *     } else {
+   *       break;
+   *     }
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable listSchemasCallable() { + return stub.listSchemasCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists all schema revisions for the named schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]");
+   *   for (Schema element : schemaServiceClient.listSchemaRevisions(name).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param name Required. The name of the schema to list revisions for. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListSchemaRevisionsPagedResponse listSchemaRevisions(SchemaName name) { + ListSchemaRevisionsRequest request = + ListSchemaRevisionsRequest.newBuilder() + .setName(name == null ? null : name.toString()) + .build(); + return listSchemaRevisions(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists all schema revisions for the named schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   String name = SchemaName.of("[PROJECT]", "[SCHEMA]").toString();
+   *   for (Schema element : schemaServiceClient.listSchemaRevisions(name).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param name Required. The name of the schema to list revisions for. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListSchemaRevisionsPagedResponse listSchemaRevisions(String name) { + ListSchemaRevisionsRequest request = + ListSchemaRevisionsRequest.newBuilder().setName(name).build(); + return listSchemaRevisions(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists all schema revisions for the named schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   ListSchemaRevisionsRequest request =
+   *       ListSchemaRevisionsRequest.newBuilder()
+   *           .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setView(SchemaView.forNumber(0))
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   for (Schema element : schemaServiceClient.listSchemaRevisions(request).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListSchemaRevisionsPagedResponse listSchemaRevisions( + ListSchemaRevisionsRequest request) { + return listSchemaRevisionsPagedCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists all schema revisions for the named schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   ListSchemaRevisionsRequest request =
+   *       ListSchemaRevisionsRequest.newBuilder()
+   *           .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setView(SchemaView.forNumber(0))
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   ApiFuture future =
+   *       schemaServiceClient.listSchemaRevisionsPagedCallable().futureCall(request);
+   *   // Do something.
+   *   for (Schema element : future.get().iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable + listSchemaRevisionsPagedCallable() { + return stub.listSchemaRevisionsPagedCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists all schema revisions for the named schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   ListSchemaRevisionsRequest request =
+   *       ListSchemaRevisionsRequest.newBuilder()
+   *           .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setView(SchemaView.forNumber(0))
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   while (true) {
+   *     ListSchemaRevisionsResponse response =
+   *         schemaServiceClient.listSchemaRevisionsCallable().call(request);
+   *     for (Schema element : response.getSchemasList()) {
+   *       // doThingsWith(element);
+   *     }
+   *     String nextPageToken = response.getNextPageToken();
+   *     if (!Strings.isNullOrEmpty(nextPageToken)) {
+   *       request = request.toBuilder().setPageToken(nextPageToken).build();
+   *     } else {
+   *       break;
+   *     }
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable + listSchemaRevisionsCallable() { + return stub.listSchemaRevisionsCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Commits a new schema revision to an existing schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]");
+   *   Schema schema = Schema.newBuilder().build();
+   *   Schema response = schemaServiceClient.commitSchema(name, schema);
+   * }
+   * }
+ * + * @param name Required. The name of the schema we are revising. Format is + * `projects/{project}/schemas/{schema}`. + * @param schema Required. The schema revision to commit. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema commitSchema(SchemaName name, Schema schema) { + CommitSchemaRequest request = + CommitSchemaRequest.newBuilder() + .setName(name == null ? null : name.toString()) + .setSchema(schema) + .build(); + return commitSchema(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Commits a new schema revision to an existing schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   String name = SchemaName.of("[PROJECT]", "[SCHEMA]").toString();
+   *   Schema schema = Schema.newBuilder().build();
+   *   Schema response = schemaServiceClient.commitSchema(name, schema);
+   * }
+   * }
+ * + * @param name Required. The name of the schema we are revising. Format is + * `projects/{project}/schemas/{schema}`. + * @param schema Required. The schema revision to commit. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema commitSchema(String name, Schema schema) { + CommitSchemaRequest request = + CommitSchemaRequest.newBuilder().setName(name).setSchema(schema).build(); + return commitSchema(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Commits a new schema revision to an existing schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   CommitSchemaRequest request =
+   *       CommitSchemaRequest.newBuilder()
+   *           .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setSchema(Schema.newBuilder().build())
+   *           .build();
+   *   Schema response = schemaServiceClient.commitSchema(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema commitSchema(CommitSchemaRequest request) { + return commitSchemaCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Commits a new schema revision to an existing schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   CommitSchemaRequest request =
+   *       CommitSchemaRequest.newBuilder()
+   *           .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setSchema(Schema.newBuilder().build())
+   *           .build();
+   *   ApiFuture future = schemaServiceClient.commitSchemaCallable().futureCall(request);
+   *   // Do something.
+   *   Schema response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable commitSchemaCallable() { + return stub.commitSchemaCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a new schema revision that is a copy of the provided revision_id. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]");
+   *   String revisionId = "revisionId-1507445162";
+   *   Schema response = schemaServiceClient.rollbackSchema(name, revisionId);
+   * }
+   * }
+ * + * @param name Required. The schema being rolled back with revision id. + * @param revisionId Required. The revision ID to roll back to. It must be a revision of the same + * schema. + *

Example: c7cfa2a8 + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema rollbackSchema(SchemaName name, String revisionId) { + RollbackSchemaRequest request = + RollbackSchemaRequest.newBuilder() + .setName(name == null ? null : name.toString()) + .setRevisionId(revisionId) + .build(); + return rollbackSchema(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a new schema revision that is a copy of the provided revision_id. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   String name = SchemaName.of("[PROJECT]", "[SCHEMA]").toString();
+   *   String revisionId = "revisionId-1507445162";
+   *   Schema response = schemaServiceClient.rollbackSchema(name, revisionId);
+   * }
+   * }
+ * + * @param name Required. The schema being rolled back with revision id. + * @param revisionId Required. The revision ID to roll back to. It must be a revision of the same + * schema. + *

Example: c7cfa2a8 + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema rollbackSchema(String name, String revisionId) { + RollbackSchemaRequest request = + RollbackSchemaRequest.newBuilder().setName(name).setRevisionId(revisionId).build(); + return rollbackSchema(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a new schema revision that is a copy of the provided revision_id. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   RollbackSchemaRequest request =
+   *       RollbackSchemaRequest.newBuilder()
+   *           .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setRevisionId("revisionId-1507445162")
+   *           .build();
+   *   Schema response = schemaServiceClient.rollbackSchema(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema rollbackSchema(RollbackSchemaRequest request) { + return rollbackSchemaCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a new schema revision that is a copy of the provided revision_id. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   RollbackSchemaRequest request =
+   *       RollbackSchemaRequest.newBuilder()
+   *           .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setRevisionId("revisionId-1507445162")
+   *           .build();
+   *   ApiFuture future = schemaServiceClient.rollbackSchemaCallable().futureCall(request);
+   *   // Do something.
+   *   Schema response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable rollbackSchemaCallable() { + return stub.rollbackSchemaCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes a specific schema revision. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]");
+   *   String revisionId = "revisionId-1507445162";
+   *   Schema response = schemaServiceClient.deleteSchemaRevision(name, revisionId);
+   * }
+   * }
+ * + * @param name Required. The name of the schema revision to be deleted, with a revision ID + * explicitly included. + *

Example: `projects/123/schemas/my-schema{@literal @}c7cfa2a8` + * @param revisionId Optional. This field is deprecated and should not be used for specifying the + * revision ID. The revision ID should be specified via the `name` parameter. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema deleteSchemaRevision(SchemaName name, String revisionId) { + DeleteSchemaRevisionRequest request = + DeleteSchemaRevisionRequest.newBuilder() + .setName(name == null ? null : name.toString()) + .setRevisionId(revisionId) + .build(); + return deleteSchemaRevision(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes a specific schema revision. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   String name = SchemaName.of("[PROJECT]", "[SCHEMA]").toString();
+   *   String revisionId = "revisionId-1507445162";
+   *   Schema response = schemaServiceClient.deleteSchemaRevision(name, revisionId);
+   * }
+   * }
+ * + * @param name Required. The name of the schema revision to be deleted, with a revision ID + * explicitly included. + *

Example: `projects/123/schemas/my-schema{@literal @}c7cfa2a8` + * @param revisionId Optional. This field is deprecated and should not be used for specifying the + * revision ID. The revision ID should be specified via the `name` parameter. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema deleteSchemaRevision(String name, String revisionId) { + DeleteSchemaRevisionRequest request = + DeleteSchemaRevisionRequest.newBuilder().setName(name).setRevisionId(revisionId).build(); + return deleteSchemaRevision(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes a specific schema revision. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   DeleteSchemaRevisionRequest request =
+   *       DeleteSchemaRevisionRequest.newBuilder()
+   *           .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setRevisionId("revisionId-1507445162")
+   *           .build();
+   *   Schema response = schemaServiceClient.deleteSchemaRevision(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Schema deleteSchemaRevision(DeleteSchemaRevisionRequest request) { + return deleteSchemaRevisionCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes a specific schema revision. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   DeleteSchemaRevisionRequest request =
+   *       DeleteSchemaRevisionRequest.newBuilder()
+   *           .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setRevisionId("revisionId-1507445162")
+   *           .build();
+   *   ApiFuture future =
+   *       schemaServiceClient.deleteSchemaRevisionCallable().futureCall(request);
+   *   // Do something.
+   *   Schema response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable deleteSchemaRevisionCallable() { + return stub.deleteSchemaRevisionCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]");
+   *   schemaServiceClient.deleteSchema(name);
+   * }
+   * }
+ * + * @param name Required. Name of the schema to delete. Format is + * `projects/{project}/schemas/{schema}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deleteSchema(SchemaName name) { + DeleteSchemaRequest request = + DeleteSchemaRequest.newBuilder().setName(name == null ? null : name.toString()).build(); + deleteSchema(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   String name = SchemaName.of("[PROJECT]", "[SCHEMA]").toString();
+   *   schemaServiceClient.deleteSchema(name);
+   * }
+   * }
+ * + * @param name Required. Name of the schema to delete. Format is + * `projects/{project}/schemas/{schema}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deleteSchema(String name) { + DeleteSchemaRequest request = DeleteSchemaRequest.newBuilder().setName(name).build(); + deleteSchema(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   DeleteSchemaRequest request =
+   *       DeleteSchemaRequest.newBuilder()
+   *           .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .build();
+   *   schemaServiceClient.deleteSchema(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deleteSchema(DeleteSchemaRequest request) { + deleteSchemaCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   DeleteSchemaRequest request =
+   *       DeleteSchemaRequest.newBuilder()
+   *           .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .build();
+   *   ApiFuture future = schemaServiceClient.deleteSchemaCallable().futureCall(request);
+   *   // Do something.
+   *   future.get();
+   * }
+   * }
+ */ + public final UnaryCallable deleteSchemaCallable() { + return stub.deleteSchemaCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Validates a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   ProjectName parent = ProjectName.of("[PROJECT]");
+   *   Schema schema = Schema.newBuilder().build();
+   *   ValidateSchemaResponse response = schemaServiceClient.validateSchema(parent, schema);
+   * }
+   * }
+ * + * @param parent Required. The name of the project in which to validate schemas. Format is + * `projects/{project-id}`. + * @param schema Required. The schema object to validate. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ValidateSchemaResponse validateSchema(ProjectName parent, Schema schema) { + ValidateSchemaRequest request = + ValidateSchemaRequest.newBuilder() + .setParent(parent == null ? null : parent.toString()) + .setSchema(schema) + .build(); + return validateSchema(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Validates a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   String parent = ProjectName.of("[PROJECT]").toString();
+   *   Schema schema = Schema.newBuilder().build();
+   *   ValidateSchemaResponse response = schemaServiceClient.validateSchema(parent, schema);
+   * }
+   * }
+ * + * @param parent Required. The name of the project in which to validate schemas. Format is + * `projects/{project-id}`. + * @param schema Required. The schema object to validate. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ValidateSchemaResponse validateSchema(String parent, Schema schema) { + ValidateSchemaRequest request = + ValidateSchemaRequest.newBuilder().setParent(parent).setSchema(schema).build(); + return validateSchema(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Validates a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   ValidateSchemaRequest request =
+   *       ValidateSchemaRequest.newBuilder()
+   *           .setParent(ProjectName.of("[PROJECT]").toString())
+   *           .setSchema(Schema.newBuilder().build())
+   *           .build();
+   *   ValidateSchemaResponse response = schemaServiceClient.validateSchema(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ValidateSchemaResponse validateSchema(ValidateSchemaRequest request) { + return validateSchemaCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Validates a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   ValidateSchemaRequest request =
+   *       ValidateSchemaRequest.newBuilder()
+   *           .setParent(ProjectName.of("[PROJECT]").toString())
+   *           .setSchema(Schema.newBuilder().build())
+   *           .build();
+   *   ApiFuture future =
+   *       schemaServiceClient.validateSchemaCallable().futureCall(request);
+   *   // Do something.
+   *   ValidateSchemaResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable + validateSchemaCallable() { + return stub.validateSchemaCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Validates a message against a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   ValidateMessageRequest request =
+   *       ValidateMessageRequest.newBuilder()
+   *           .setParent(ProjectName.of("[PROJECT]").toString())
+   *           .setMessage(ByteString.EMPTY)
+   *           .setEncoding(Encoding.forNumber(0))
+   *           .build();
+   *   ValidateMessageResponse response = schemaServiceClient.validateMessage(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ValidateMessageResponse validateMessage(ValidateMessageRequest request) { + return validateMessageCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Validates a message against a schema. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   ValidateMessageRequest request =
+   *       ValidateMessageRequest.newBuilder()
+   *           .setParent(ProjectName.of("[PROJECT]").toString())
+   *           .setMessage(ByteString.EMPTY)
+   *           .setEncoding(Encoding.forNumber(0))
+   *           .build();
+   *   ApiFuture future =
+   *       schemaServiceClient.validateMessageCallable().futureCall(request);
+   *   // Do something.
+   *   ValidateMessageResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable + validateMessageCallable() { + return stub.validateMessageCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Sets the access control policy on the specified resource. Replacesany existing policy. + * + *

Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   SetIamPolicyRequest request =
+   *       SetIamPolicyRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setPolicy(Policy.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   Policy response = schemaServiceClient.setIamPolicy(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Policy setIamPolicy(SetIamPolicyRequest request) { + return setIamPolicyCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Sets the access control policy on the specified resource. Replacesany existing policy. + * + *

Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   SetIamPolicyRequest request =
+   *       SetIamPolicyRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setPolicy(Policy.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   ApiFuture future = schemaServiceClient.setIamPolicyCallable().futureCall(request);
+   *   // Do something.
+   *   Policy response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable setIamPolicyCallable() { + return stub.setIamPolicyCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the access control policy for a resource. Returns an empty policyif the resource exists + * and does not have a policy set. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   GetIamPolicyRequest request =
+   *       GetIamPolicyRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setOptions(GetPolicyOptions.newBuilder().build())
+   *           .build();
+   *   Policy response = schemaServiceClient.getIamPolicy(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Policy getIamPolicy(GetIamPolicyRequest request) { + return getIamPolicyCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the access control policy for a resource. Returns an empty policyif the resource exists + * and does not have a policy set. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   GetIamPolicyRequest request =
+   *       GetIamPolicyRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setOptions(GetPolicyOptions.newBuilder().build())
+   *           .build();
+   *   ApiFuture future = schemaServiceClient.getIamPolicyCallable().futureCall(request);
+   *   // Do something.
+   *   Policy response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable getIamPolicyCallable() { + return stub.getIamPolicyCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Returns permissions that a caller has on the specified resource. If theresource does not exist, + * this will return an empty set ofpermissions, not a `NOT_FOUND` error. + * + *

Note: This operation is designed to be used for buildingpermission-aware UIs and + * command-line tools, not for authorizationchecking. This operation may "fail open" without + * warning. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   TestIamPermissionsRequest request =
+   *       TestIamPermissionsRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .addAllPermissions(new ArrayList())
+   *           .build();
+   *   TestIamPermissionsResponse response = schemaServiceClient.testIamPermissions(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final TestIamPermissionsResponse testIamPermissions(TestIamPermissionsRequest request) { + return testIamPermissionsCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Returns permissions that a caller has on the specified resource. If theresource does not exist, + * this will return an empty set ofpermissions, not a `NOT_FOUND` error. + * + *

Note: This operation is designed to be used for buildingpermission-aware UIs and + * command-line tools, not for authorizationchecking. This operation may "fail open" without + * warning. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+   *   TestIamPermissionsRequest request =
+   *       TestIamPermissionsRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .addAllPermissions(new ArrayList())
+   *           .build();
+   *   ApiFuture future =
+   *       schemaServiceClient.testIamPermissionsCallable().futureCall(request);
+   *   // Do something.
+   *   TestIamPermissionsResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable + testIamPermissionsCallable() { + return stub.testIamPermissionsCallable(); + } + + @Override + public final void close() { + stub.close(); + } + + @Override + public void shutdown() { + stub.shutdown(); + } + + @Override + public boolean isShutdown() { + return stub.isShutdown(); + } + + @Override + public boolean isTerminated() { + return stub.isTerminated(); + } + + @Override + public void shutdownNow() { + stub.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return stub.awaitTermination(duration, unit); + } + + public static class ListSchemasPagedResponse + extends AbstractPagedListResponse< + ListSchemasRequest, + ListSchemasResponse, + Schema, + ListSchemasPage, + ListSchemasFixedSizeCollection> { + + public static ApiFuture createAsync( + PageContext context, + ApiFuture futureResponse) { + ApiFuture futurePage = + ListSchemasPage.createEmptyPage().createPageAsync(context, futureResponse); + return ApiFutures.transform( + futurePage, input -> new ListSchemasPagedResponse(input), MoreExecutors.directExecutor()); + } + + private ListSchemasPagedResponse(ListSchemasPage page) { + super(page, ListSchemasFixedSizeCollection.createEmptyCollection()); + } + } + + public static class ListSchemasPage + extends AbstractPage { + + private ListSchemasPage( + PageContext context, + ListSchemasResponse response) { + super(context, response); + } + + private static ListSchemasPage createEmptyPage() { + return new ListSchemasPage(null, null); + } + + @Override + protected ListSchemasPage createPage( + PageContext context, + ListSchemasResponse response) { + return new ListSchemasPage(context, response); + } + + @Override + public ApiFuture createPageAsync( + PageContext context, + ApiFuture futureResponse) { + return super.createPageAsync(context, futureResponse); + } + } + + public static class ListSchemasFixedSizeCollection + extends AbstractFixedSizeCollection< + ListSchemasRequest, + ListSchemasResponse, + Schema, + ListSchemasPage, + ListSchemasFixedSizeCollection> { + + private ListSchemasFixedSizeCollection(List pages, int collectionSize) { + super(pages, collectionSize); + } + + private static ListSchemasFixedSizeCollection createEmptyCollection() { + return new ListSchemasFixedSizeCollection(null, 0); + } + + @Override + protected ListSchemasFixedSizeCollection createCollection( + List pages, int collectionSize) { + return new ListSchemasFixedSizeCollection(pages, collectionSize); + } + } + + public static class ListSchemaRevisionsPagedResponse + extends AbstractPagedListResponse< + ListSchemaRevisionsRequest, + ListSchemaRevisionsResponse, + Schema, + ListSchemaRevisionsPage, + ListSchemaRevisionsFixedSizeCollection> { + + public static ApiFuture createAsync( + PageContext context, + ApiFuture futureResponse) { + ApiFuture futurePage = + ListSchemaRevisionsPage.createEmptyPage().createPageAsync(context, futureResponse); + return ApiFutures.transform( + futurePage, + input -> new ListSchemaRevisionsPagedResponse(input), + MoreExecutors.directExecutor()); + } + + private ListSchemaRevisionsPagedResponse(ListSchemaRevisionsPage page) { + super(page, ListSchemaRevisionsFixedSizeCollection.createEmptyCollection()); + } + } + + public static class ListSchemaRevisionsPage + extends AbstractPage< + ListSchemaRevisionsRequest, + ListSchemaRevisionsResponse, + Schema, + ListSchemaRevisionsPage> { + + private ListSchemaRevisionsPage( + PageContext context, + ListSchemaRevisionsResponse response) { + super(context, response); + } + + private static ListSchemaRevisionsPage createEmptyPage() { + return new ListSchemaRevisionsPage(null, null); + } + + @Override + protected ListSchemaRevisionsPage createPage( + PageContext context, + ListSchemaRevisionsResponse response) { + return new ListSchemaRevisionsPage(context, response); + } + + @Override + public ApiFuture createPageAsync( + PageContext context, + ApiFuture futureResponse) { + return super.createPageAsync(context, futureResponse); + } + } + + public static class ListSchemaRevisionsFixedSizeCollection + extends AbstractFixedSizeCollection< + ListSchemaRevisionsRequest, + ListSchemaRevisionsResponse, + Schema, + ListSchemaRevisionsPage, + ListSchemaRevisionsFixedSizeCollection> { + + private ListSchemaRevisionsFixedSizeCollection( + List pages, int collectionSize) { + super(pages, collectionSize); + } + + private static ListSchemaRevisionsFixedSizeCollection createEmptyCollection() { + return new ListSchemaRevisionsFixedSizeCollection(null, 0); + } + + @Override + protected ListSchemaRevisionsFixedSizeCollection createCollection( + List pages, int collectionSize) { + return new ListSchemaRevisionsFixedSizeCollection(pages, collectionSize); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SchemaServiceSettings.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SchemaServiceSettings.java new file mode 100644 index 000000000000..44585d85c7f5 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SchemaServiceSettings.java @@ -0,0 +1,374 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemaRevisionsPagedResponse; +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemasPagedResponse; + +import com.google.api.core.ApiFunction; +import com.google.api.core.BetaApi; +import com.google.api.gax.core.GoogleCredentialsProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.ClientSettings; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.cloud.pubsub.v1.stub.SchemaServiceStubSettings; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.CommitSchemaRequest; +import com.google.pubsub.v1.CreateSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRevisionRequest; +import com.google.pubsub.v1.GetSchemaRequest; +import com.google.pubsub.v1.ListSchemaRevisionsRequest; +import com.google.pubsub.v1.ListSchemaRevisionsResponse; +import com.google.pubsub.v1.ListSchemasRequest; +import com.google.pubsub.v1.ListSchemasResponse; +import com.google.pubsub.v1.RollbackSchemaRequest; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.ValidateMessageRequest; +import com.google.pubsub.v1.ValidateMessageResponse; +import com.google.pubsub.v1.ValidateSchemaRequest; +import com.google.pubsub.v1.ValidateSchemaResponse; +import java.io.IOException; +import java.util.List; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Settings class to configure an instance of {@link SchemaServiceClient}. + * + *

The default instance has everything set to sensible defaults: + * + *

    + *
  • The default service address (pubsub.googleapis.com) and default port (443) are used. + *
  • Credentials are acquired automatically through Application Default Credentials. + *
  • Retries are configured for idempotent methods but not for non-idempotent methods. + *
+ * + *

The builder of this class is recursive, so contained classes are themselves builders. When + * build() is called, the tree of builders is called to create the complete settings object. + * + *

For example, to set the + * [RetrySettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.retrying.RetrySettings) + * of createSchema: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SchemaServiceSettings.Builder schemaServiceSettingsBuilder = SchemaServiceSettings.newBuilder();
+ * schemaServiceSettingsBuilder
+ *     .createSchemaSettings()
+ *     .setRetrySettings(
+ *         schemaServiceSettingsBuilder
+ *             .createSchemaSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setInitialRetryDelayDuration(Duration.ofSeconds(1))
+ *             .setInitialRpcTimeoutDuration(Duration.ofSeconds(5))
+ *             .setMaxAttempts(5)
+ *             .setMaxRetryDelayDuration(Duration.ofSeconds(30))
+ *             .setMaxRpcTimeoutDuration(Duration.ofSeconds(60))
+ *             .setRetryDelayMultiplier(1.3)
+ *             .setRpcTimeoutMultiplier(1.5)
+ *             .setTotalTimeoutDuration(Duration.ofSeconds(300))
+ *             .build());
+ * SchemaServiceSettings schemaServiceSettings = schemaServiceSettingsBuilder.build();
+ * }
+ * + * Please refer to the [Client Side Retry + * Guide](https://docs.cloud.google.com/java/docs/client-retries) for additional support in setting + * retries. + */ +@Generated("by gapic-generator-java") +public class SchemaServiceSettings extends ClientSettings { + + /** Returns the object with the settings used for calls to createSchema. */ + public UnaryCallSettings createSchemaSettings() { + return ((SchemaServiceStubSettings) getStubSettings()).createSchemaSettings(); + } + + /** Returns the object with the settings used for calls to getSchema. */ + public UnaryCallSettings getSchemaSettings() { + return ((SchemaServiceStubSettings) getStubSettings()).getSchemaSettings(); + } + + /** Returns the object with the settings used for calls to listSchemas. */ + public PagedCallSettings + listSchemasSettings() { + return ((SchemaServiceStubSettings) getStubSettings()).listSchemasSettings(); + } + + /** Returns the object with the settings used for calls to listSchemaRevisions. */ + public PagedCallSettings< + ListSchemaRevisionsRequest, ListSchemaRevisionsResponse, ListSchemaRevisionsPagedResponse> + listSchemaRevisionsSettings() { + return ((SchemaServiceStubSettings) getStubSettings()).listSchemaRevisionsSettings(); + } + + /** Returns the object with the settings used for calls to commitSchema. */ + public UnaryCallSettings commitSchemaSettings() { + return ((SchemaServiceStubSettings) getStubSettings()).commitSchemaSettings(); + } + + /** Returns the object with the settings used for calls to rollbackSchema. */ + public UnaryCallSettings rollbackSchemaSettings() { + return ((SchemaServiceStubSettings) getStubSettings()).rollbackSchemaSettings(); + } + + /** Returns the object with the settings used for calls to deleteSchemaRevision. */ + public UnaryCallSettings deleteSchemaRevisionSettings() { + return ((SchemaServiceStubSettings) getStubSettings()).deleteSchemaRevisionSettings(); + } + + /** Returns the object with the settings used for calls to deleteSchema. */ + public UnaryCallSettings deleteSchemaSettings() { + return ((SchemaServiceStubSettings) getStubSettings()).deleteSchemaSettings(); + } + + /** Returns the object with the settings used for calls to validateSchema. */ + public UnaryCallSettings validateSchemaSettings() { + return ((SchemaServiceStubSettings) getStubSettings()).validateSchemaSettings(); + } + + /** Returns the object with the settings used for calls to validateMessage. */ + public UnaryCallSettings + validateMessageSettings() { + return ((SchemaServiceStubSettings) getStubSettings()).validateMessageSettings(); + } + + /** Returns the object with the settings used for calls to setIamPolicy. */ + public UnaryCallSettings setIamPolicySettings() { + return ((SchemaServiceStubSettings) getStubSettings()).setIamPolicySettings(); + } + + /** Returns the object with the settings used for calls to getIamPolicy. */ + public UnaryCallSettings getIamPolicySettings() { + return ((SchemaServiceStubSettings) getStubSettings()).getIamPolicySettings(); + } + + /** Returns the object with the settings used for calls to testIamPermissions. */ + public UnaryCallSettings + testIamPermissionsSettings() { + return ((SchemaServiceStubSettings) getStubSettings()).testIamPermissionsSettings(); + } + + public static final SchemaServiceSettings create(SchemaServiceStubSettings stub) + throws IOException { + return new SchemaServiceSettings.Builder(stub.toBuilder()).build(); + } + + /** Returns a builder for the default ExecutorProvider for this service. */ + public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { + return SchemaServiceStubSettings.defaultExecutorProviderBuilder(); + } + + /** Returns the default service endpoint. */ + public static String getDefaultEndpoint() { + return SchemaServiceStubSettings.getDefaultEndpoint(); + } + + /** Returns the default service scopes. */ + public static List getDefaultServiceScopes() { + return SchemaServiceStubSettings.getDefaultServiceScopes(); + } + + /** Returns a builder for the default credentials for this service. */ + public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { + return SchemaServiceStubSettings.defaultCredentialsProviderBuilder(); + } + + /** Returns a builder for the default gRPC ChannelProvider for this service. */ + public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { + return SchemaServiceStubSettings.defaultGrpcTransportProviderBuilder(); + } + + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return SchemaServiceStubSettings.defaultHttpJsonTransportProviderBuilder(); + } + + public static TransportChannelProvider defaultTransportChannelProvider() { + return SchemaServiceStubSettings.defaultTransportChannelProvider(); + } + + public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + return SchemaServiceStubSettings.defaultApiClientHeaderProviderBuilder(); + } + + /** Returns a new gRPC builder for this class. */ + public static Builder newBuilder() { + return Builder.createDefault(); + } + + /** Returns a new REST builder for this class. */ + public static Builder newHttpJsonBuilder() { + return Builder.createHttpJsonDefault(); + } + + /** Returns a new builder for this class. */ + public static Builder newBuilder(ClientContext clientContext) { + return new Builder(clientContext); + } + + /** Returns a builder containing all the values of this settings class. */ + public Builder toBuilder() { + return new Builder(this); + } + + protected SchemaServiceSettings(Builder settingsBuilder) throws IOException { + super(settingsBuilder); + } + + /** Builder for SchemaServiceSettings. */ + public static class Builder extends ClientSettings.Builder { + + protected Builder() throws IOException { + this(((ClientContext) null)); + } + + protected Builder(ClientContext clientContext) { + super(SchemaServiceStubSettings.newBuilder(clientContext)); + } + + protected Builder(SchemaServiceSettings settings) { + super(settings.getStubSettings().toBuilder()); + } + + protected Builder(SchemaServiceStubSettings.Builder stubSettings) { + super(stubSettings); + } + + private static Builder createDefault() { + return new Builder(SchemaServiceStubSettings.newBuilder()); + } + + private static Builder createHttpJsonDefault() { + return new Builder(SchemaServiceStubSettings.newHttpJsonBuilder()); + } + + public SchemaServiceStubSettings.Builder getStubSettingsBuilder() { + return ((SchemaServiceStubSettings.Builder) getStubSettings()); + } + + /** + * Applies the given settings updater function to all of the unary API methods in this service. + * + *

Note: This method does not support applying settings to streaming methods. + */ + public Builder applyToAllUnaryMethods( + ApiFunction, Void> settingsUpdater) { + super.applyToAllUnaryMethods( + getStubSettingsBuilder().unaryMethodSettingsBuilders(), settingsUpdater); + return this; + } + + /** Returns the builder for the settings used for calls to createSchema. */ + public UnaryCallSettings.Builder createSchemaSettings() { + return getStubSettingsBuilder().createSchemaSettings(); + } + + /** Returns the builder for the settings used for calls to getSchema. */ + public UnaryCallSettings.Builder getSchemaSettings() { + return getStubSettingsBuilder().getSchemaSettings(); + } + + /** Returns the builder for the settings used for calls to listSchemas. */ + public PagedCallSettings.Builder< + ListSchemasRequest, ListSchemasResponse, ListSchemasPagedResponse> + listSchemasSettings() { + return getStubSettingsBuilder().listSchemasSettings(); + } + + /** Returns the builder for the settings used for calls to listSchemaRevisions. */ + public PagedCallSettings.Builder< + ListSchemaRevisionsRequest, + ListSchemaRevisionsResponse, + ListSchemaRevisionsPagedResponse> + listSchemaRevisionsSettings() { + return getStubSettingsBuilder().listSchemaRevisionsSettings(); + } + + /** Returns the builder for the settings used for calls to commitSchema. */ + public UnaryCallSettings.Builder commitSchemaSettings() { + return getStubSettingsBuilder().commitSchemaSettings(); + } + + /** Returns the builder for the settings used for calls to rollbackSchema. */ + public UnaryCallSettings.Builder rollbackSchemaSettings() { + return getStubSettingsBuilder().rollbackSchemaSettings(); + } + + /** Returns the builder for the settings used for calls to deleteSchemaRevision. */ + public UnaryCallSettings.Builder + deleteSchemaRevisionSettings() { + return getStubSettingsBuilder().deleteSchemaRevisionSettings(); + } + + /** Returns the builder for the settings used for calls to deleteSchema. */ + public UnaryCallSettings.Builder deleteSchemaSettings() { + return getStubSettingsBuilder().deleteSchemaSettings(); + } + + /** Returns the builder for the settings used for calls to validateSchema. */ + public UnaryCallSettings.Builder + validateSchemaSettings() { + return getStubSettingsBuilder().validateSchemaSettings(); + } + + /** Returns the builder for the settings used for calls to validateMessage. */ + public UnaryCallSettings.Builder + validateMessageSettings() { + return getStubSettingsBuilder().validateMessageSettings(); + } + + /** Returns the builder for the settings used for calls to setIamPolicy. */ + public UnaryCallSettings.Builder setIamPolicySettings() { + return getStubSettingsBuilder().setIamPolicySettings(); + } + + /** Returns the builder for the settings used for calls to getIamPolicy. */ + public UnaryCallSettings.Builder getIamPolicySettings() { + return getStubSettingsBuilder().getIamPolicySettings(); + } + + /** Returns the builder for the settings used for calls to testIamPermissions. */ + public UnaryCallSettings.Builder + testIamPermissionsSettings() { + return getStubSettingsBuilder().testIamPermissionsSettings(); + } + + @Override + public SchemaServiceSettings build() throws IOException { + return new SchemaServiceSettings(this); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SequentialExecutorService.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SequentialExecutorService.java new file mode 100644 index 000000000000..4866e6be4b53 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SequentialExecutorService.java @@ -0,0 +1,272 @@ +/* + * Copyright 2019 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.common.util.concurrent.MoreExecutors.directExecutor; + +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutureCallback; +import com.google.api.core.ApiFutures; +import com.google.api.core.BetaApi; +import com.google.api.core.SettableApiFuture; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Map; +import java.util.Queue; +import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.CancellationException; +import java.util.concurrent.Executor; + +interface CancellableRunnable extends Runnable { + void cancel(Throwable e); +} + +/** + * An executor service that runs the tasks with the same key sequentially. The tasks with the same + * key will be run only when its predecessor has been completed while tasks with different keys can + * be run in parallel. + */ +final class SequentialExecutorService { + + // This class is not directly usable. + private SequentialExecutorService() {} + + /** + * This Executor takes a serial stream of string keys and {@code Runnable} tasks, and runs the + * tasks with the same key sequentially. Tasks with the same key will be run only when its + * predecessor has been completed while tasks with different keys can be run in parallel. + */ + private abstract static class SequentialExecutor { + // Maps keys to tasks. + protected final Map> tasksByKey; + protected final Executor executor; + + private SequentialExecutor(Executor executor) { + this.executor = executor; + this.tasksByKey = new HashMap<>(); + } + + boolean hasTasksInflight(String key) { + synchronized (tasksByKey) { + return tasksByKey.containsKey(key); + } + } + + protected void execute(final String key, R task) { + synchronized (tasksByKey) { + Queue newTasks = tasksByKey.get(key); + // If this key is already being handled, add it to the queue and return. + if (newTasks != null) { + newTasks.add(task); + return; + } else { + newTasks = new LinkedList<>(); + newTasks.add(task); + tasksByKey.put(key, newTasks); + } + } + + callNextTaskAsync(key); + } + + protected void callNextTaskAsync(final String key) { + boolean executeTask = true; + synchronized (tasksByKey) { + Queue tasks = tasksByKey.get(key); + if (tasks != null && tasks.isEmpty()) { + // Only remove the Queue after all tasks were completed + tasksByKey.remove(key); + executeTask = false; + } + } + if (executeTask) { + executor.execute( + new Runnable() { + @Override + public void run() { + R task = null; + synchronized (tasksByKey) { + Queue tasks = tasksByKey.get(key); + if (tasks != null && !tasks.isEmpty()) { + task = tasks.poll(); + } + } + if (task != null) { + task.run(); + } + } + }); + } + } + } + + @BetaApi + static class AutoExecutor extends SequentialExecutor { + AutoExecutor(Executor executor) { + super(executor); + } + + /** Runs synchronous {@code Runnable} tasks sequentially. */ + void submit(final String key, final Runnable task) { + super.execute( + key, + new Runnable() { + @Override + public void run() { + try { + task.run(); + } finally { + callNextTaskAsync(key); + } + } + }); + } + } + + /** + * Runs asynchronous {@code Callable} tasks sequentially for the same key. If one of the tasks + * fails, other tasks with the same key that have not been executed will be cancelled. + */ + @BetaApi + static class CallbackExecutor extends SequentialExecutor { + static CancellationException CANCELLATION_EXCEPTION = + new CancellationException( + "Execution cancelled because executing previous runnable failed."); + + private final Set keysWithErrors = Collections.synchronizedSet(new HashSet()); + + CallbackExecutor(Executor executor) { + super(executor); + } + + /** + * Runs asynchronous {@code Callable} tasks sequentially. If one of the tasks fails, other tasks + * with the same key that have not been executed will be cancelled. + * + *

This method does the following in a chain: + * + *

    + *
  1. Creates an `ApiFuture` that can be used for tracking progress. + *
  2. Creates a `CancellableRunnable` out of the `Callable` + *
  3. Adds the `CancellableRunnable` to the task queue + *
  4. Once the task is ready to be run, it will execute the `Callable` + *
  5. When the `Callable` completes one of two things happens: + *
      + *
    1. On success: + *
        + *
      1. Complete the `ApiFuture` by setting the return value. + *
      2. Call the next task. + *
      + *
    2. On Failure: + *
        + *
      1. Fail the `ApiFuture` by setting the exception. + *
      2. Cancel all tasks in the queue. + *
      + *
    + *
+ * + * @param key The key for the task queue + * @param callable The thing to run + * @param The return type for the `Callable`'s `ApiFuture`. + * @return an `ApiFuture` for tracking. + */ + ApiFuture submit(final String key, final Callable> callable) { + // Step 1: create a future for the user + final SettableApiFuture future = SettableApiFuture.create(); + + if (keysWithErrors.contains(key)) { + future.setException(CANCELLATION_EXCEPTION); + return future; + } + + // Step 2: create the CancellableRunnable + // Step 3: add the task to queue via `execute` + CancellableRunnable task = + new CancellableRunnable() { + private boolean cancelled = false; + + @Override + public void run() { + // the task was cancelled + if (cancelled) { + return; + } + + try { + // Step 4: call the `Callable` + ApiFutureCallback callback = + new ApiFutureCallback() { + // Step 5.1: on success + @Override + public void onSuccess(T msg) { + callNextTaskAsync(key); + future.set(msg); + } + + // Step 5.2: on failure + @Override + public void onFailure(Throwable e) { + future.setException(e); + cancelQueuedTasks(key, CANCELLATION_EXCEPTION); + } + }; + ApiFutures.addCallback(callable.call(), callback, directExecutor()); + } catch (Exception e) { + cancel(e); + } + } + + @Override + public void cancel(Throwable e) { + this.cancelled = true; + future.setException(e); + } + }; + execute(key, task); + return future; + } + + boolean keyHasError(String key) { + return keysWithErrors.contains(key); + } + + void resumePublish(String key) { + keysWithErrors.remove(key); + } + + void stopPublish(String key) { + keysWithErrors.add(key); + } + + /** Cancels every task in the queue associated with {@code key}. */ + private void cancelQueuedTasks(final String key, Throwable e) { + keysWithErrors.add(key); + synchronized (tasksByKey) { + final Queue tasks = tasksByKey.get(key); + if (tasks != null) { + while (!tasks.isEmpty()) { + tasks.poll().cancel(e); + } + tasksByKey.remove(key); + } + } + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/StatusUtil.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/StatusUtil.java new file mode 100644 index 000000000000..56c19306d1a0 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/StatusUtil.java @@ -0,0 +1,68 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.gax.rpc.ApiException; +import io.grpc.Status; + +/** Utilities for handling gRPC {@link Status}. */ +final class StatusUtil { + private StatusUtil() { + // Static class, not instantiable. + } + + static AckResponse getFailedAckResponse(Throwable t) { + if (!(t instanceof ApiException)) { + return AckResponse.OTHER; + } + + ApiException apiException = (ApiException) t; + AckResponse failedAckResponse; + switch (apiException.getStatusCode().getCode()) { + case FAILED_PRECONDITION: + failedAckResponse = AckResponse.FAILED_PRECONDITION; + break; + case PERMISSION_DENIED: + failedAckResponse = AckResponse.PERMISSION_DENIED; + break; + default: + failedAckResponse = AckResponse.OTHER; + } + return failedAckResponse; + } + + static boolean isRetryable(Throwable error) { + if (!(error instanceof ApiException)) { + return true; + } + ApiException apiException = (ApiException) error; + switch (apiException.getStatusCode().getCode()) { + case DEADLINE_EXCEEDED: + case INTERNAL: + case CANCELLED: + case RESOURCE_EXHAUSTED: + case ABORTED: + case UNKNOWN: + return true; + case UNAVAILABLE: + // TODO(pongad): check that ApiException propagate message properly. + return !apiException.getMessage().contains("Server shutdownNow invoked"); + default: + return false; + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnection.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnection.java new file mode 100644 index 000000000000..24c580b6ce84 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnection.java @@ -0,0 +1,1053 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.common.util.concurrent.MoreExecutors.directExecutor; + +import com.google.api.core.AbstractApiService; +import com.google.api.core.ApiClock; +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutureCallback; +import com.google.api.core.ApiFutures; +import com.google.api.core.SettableApiFuture; +import com.google.api.gax.batching.FlowControlSettings; +import com.google.api.gax.batching.FlowController; +import com.google.api.gax.core.Distribution; +import com.google.api.gax.grpc.GrpcCallContext; +import com.google.api.gax.grpc.GrpcStatusCode; +import com.google.api.gax.rpc.ApiException; +import com.google.api.gax.rpc.ApiExceptionFactory; +import com.google.api.gax.rpc.ClientStream; +import com.google.api.gax.rpc.ResponseObserver; +import com.google.api.gax.rpc.StreamController; +import com.google.cloud.pubsub.v1.MessageDispatcher.AckProcessor; +import com.google.cloud.pubsub.v1.stub.SubscriberStub; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.protobuf.Any; +import com.google.protobuf.Empty; +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.ModifyAckDeadlineRequest; +import com.google.pubsub.v1.StreamingPullRequest; +import com.google.pubsub.v1.StreamingPullResponse; +import com.google.pubsub.v1.SubscriptionName; +import com.google.rpc.ErrorInfo; +import io.grpc.Status; +import io.grpc.protobuf.StatusProto; +import io.opentelemetry.api.trace.Span; +import java.time.Duration; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executor; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; + +/** Implementation of {@link AckProcessor} based on Cloud Pub/Sub streaming pull. */ +final class StreamingSubscriberConnection extends AbstractApiService implements AckProcessor { + private static final Logger logger = + Logger.getLogger(StreamingSubscriberConnection.class.getName()); + private LoggingUtil loggingUtil = new LoggingUtil(); + + private static final Duration INITIAL_CHANNEL_RECONNECT_BACKOFF = Duration.ofMillis(100); + private static final Duration MAX_CHANNEL_RECONNECT_BACKOFF = Duration.ofSeconds(10); + + private static final long INITIAL_ACK_OPERATIONS_RECONNECT_BACKOFF_MILLIS = 100; + private static final long MAX_ACK_OPERATIONS_RECONNECT_BACKOFF_MILLIS = + Duration.ofSeconds(10).toMillis(); + private static final int MAX_PER_REQUEST_CHANGES = 1000; + + private final String PERMANENT_FAILURE_INVALID_ACK_ID_METADATA = + "PERMANENT_FAILURE_INVALID_ACK_ID"; + private final String TRANSIENT_FAILURE_METADATA_PREFIX = "TRANSIENT_"; + + private Duration inititalStreamAckDeadline; + + private final Map> streamMetadata; + + private final SubscriberStub subscriberStub; + private final int channelAffinity; + private final long protocolVersion; + private final String subscription; + private final SubscriptionName subscriptionNameObject; + private final ScheduledExecutorService systemExecutor; + private final ApiClock clock; + private final MessageDispatcher messageDispatcher; + + private final FlowControlSettings flowControlSettings; + private final boolean useLegacyFlowControl; + + // Keeps track of requests without closed futures + private final Set pendingRequests = ConcurrentHashMap.newKeySet(); + + private final AtomicLong channelReconnectBackoffMillis = + new AtomicLong(INITIAL_CHANNEL_RECONNECT_BACKOFF.toMillis()); + private final Waiter ackOperationsWaiter = new Waiter(); + + private final Lock lock = new ReentrantLock(); + private ClientStream clientStream; + + private AtomicBoolean exactlyOnceDeliveryEnabled = new AtomicBoolean(false); + + /** + * The same clientId is used across all streaming pull connections that are created. This is + * intentional, as it indicates to the server that any guarantees made for a stream that + * disconnected will be made for the stream that is created to replace it. + */ + private final String clientId = UUID.randomUUID().toString(); + + private final boolean enableOpenTelemetryTracing; + private OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(null, false); + private final SubscriberShutdownSettings subscriberShutdownSettings; + + private final boolean enableKeepalive; + private static final long KEEP_ALIVE_SUPPORT_VERSION = 1; + private static final Duration CLIENT_PING_INTERVAL = Duration.ofSeconds(30); + private ScheduledFuture pingSchedulerHandle; + + private static final Duration SERVER_MONITOR_INTERVAL = Duration.ofSeconds(10); + private static final Duration SERVER_PING_TIMEOUT_DURATION = Duration.ofSeconds(15); + private final AtomicLong lastServerResponseTime; + private final AtomicLong lastClientPingTime; + private ScheduledFuture serverMonitorHandle; + + private StreamingSubscriberConnection(Builder builder) { + subscription = builder.subscription; + subscriptionNameObject = SubscriptionName.parse(builder.subscription); + systemExecutor = builder.systemExecutor; + clock = builder.clock; + + // We need to set the default stream ack deadline on the initial request, this will be + // updated by modack requests in the message dispatcher + if (builder.maxDurationPerAckExtensionDefaultUsed) { + inititalStreamAckDeadline = Subscriber.STREAM_ACK_DEADLINE_DEFAULT; + } else if (builder.maxDurationPerAckExtension.compareTo(Subscriber.MIN_STREAM_ACK_DEADLINE) + < 0) { + // We will not be able to extend more than the default minimum + inititalStreamAckDeadline = Subscriber.MIN_STREAM_ACK_DEADLINE; + } else if (builder.maxDurationPerAckExtension.compareTo(Subscriber.MAX_STREAM_ACK_DEADLINE) + > 0) { + // Will not be able to extend past the max + inititalStreamAckDeadline = Subscriber.MAX_STREAM_ACK_DEADLINE; + } else { + inititalStreamAckDeadline = builder.maxDurationPerAckExtension; + } + + streamMetadata = + ImmutableMap.of("x-goog-request-params", ImmutableList.of("subscription=" + subscription)); + + subscriberStub = builder.subscriberStub; + channelAffinity = builder.channelAffinity; + protocolVersion = builder.protocolVersion; + + MessageDispatcher.Builder messageDispatcherBuilder; + if (builder.receiver != null) { + messageDispatcherBuilder = MessageDispatcher.newBuilder(builder.receiver); + } else { + messageDispatcherBuilder = MessageDispatcher.newBuilder(builder.receiverWithAckResponse); + } + + enableOpenTelemetryTracing = builder.enableOpenTelemetryTracing; + if (builder.tracer != null) { + tracer = builder.tracer; + } + this.subscriberShutdownSettings = builder.subscriberShutdownSettings; + + messageDispatcher = + messageDispatcherBuilder + .setAckProcessor(this) + .setAckExpirationPadding(builder.ackExpirationPadding) + .setMaxAckExtensionPeriod(builder.maxAckExtensionPeriod) + .setMinDurationPerAckExtension(builder.minDurationPerAckExtension) + .setMinDurationPerAckExtensionDefaultUsed(builder.minDurationPerAckExtensionDefaultUsed) + .setMaxDurationPerAckExtension(builder.maxDurationPerAckExtension) + .setMaxDurationPerAckExtensionDefaultUsed(builder.maxDurationPerAckExtensionDefaultUsed) + .setAckLatencyDistribution(builder.ackLatencyDistribution) + .setFlowController(builder.flowController) + .setExecutor(builder.executor) + .setSystemExecutor(builder.systemExecutor) + .setApiClock(builder.clock) + .setSubscriptionName(subscription) + .setEnableOpenTelemetryTracing(enableOpenTelemetryTracing) + .setTracer(tracer) + .setSubscriberShutdownSettings(subscriberShutdownSettings) + .build(); + + flowControlSettings = builder.flowControlSettings; + useLegacyFlowControl = builder.useLegacyFlowControl; + enableKeepalive = protocolVersion >= KEEP_ALIVE_SUPPORT_VERSION; + lastServerResponseTime = new AtomicLong(clock.nanoTime()); + lastClientPingTime = new AtomicLong(-1L); + } + + public StreamingSubscriberConnection setExactlyOnceDeliveryEnabled( + boolean isExactlyOnceDeliveryEnabled) { + exactlyOnceDeliveryEnabled.set(isExactlyOnceDeliveryEnabled); + return this; + } + + public boolean getExactlyOnceDeliveryEnabled() { + return exactlyOnceDeliveryEnabled.get(); + } + + @Override + protected void doStart() { + logger.config("Starting subscriber."); + loggingUtil.logEvent( + LoggingUtil.SubSystem.SUBSCRIBER_STREAMS, Level.FINE, "Opening stream.", ""); + messageDispatcher.start(); + initialize(); + notifyStarted(); + } + + @Override + protected void doStop() { + loggingUtil.logEvent( + LoggingUtil.SubSystem.SUBSCRIBER_STREAMS, Level.FINE, "Closing stream.", ""); + lock.lock(); + try { + clientStream.closeSendWithError(Status.CANCELLED.asException()); + } finally { + lock.unlock(); + } + + if (enableKeepalive) { + stopClientPinger(); + stopServerMonitor(); + } + + runShutdown(); + notifyStopped(); + } + + private void runShutdown() { + java.time.Duration timeout = subscriberShutdownSettings.getTimeout(); + if (timeout.isZero()) { + return; + } + + messageDispatcher.stop(); + if (timeout.isNegative()) { + ackOperationsWaiter.waitComplete(); + } else { + boolean completedWait = ackOperationsWaiter.tryWait(timeout.toMillis(), clock); + if (!completedWait) { + logger.log( + Level.WARNING, "Timeout exceeded while waiting for ACK/NACK operations to complete."); + } + } + } + + private class StreamingPullResponseObserver implements ResponseObserver { + + final SettableApiFuture errorFuture; + + /** + * When a batch finsihes processing, we want to request one more batch from the server. But by + * the time this happens, our stream might have already errored, and new stream created. We + * don't want to request more batches from the new stream -- that might pull more messages than + * the user can deal with -- so we save the request observer this response observer is "paired + * with". If the stream has already errored, requesting more messages is a no-op. + */ + StreamController thisController; + + StreamingPullResponseObserver(SettableApiFuture errorFuture) { + this.errorFuture = errorFuture; + } + + @Override + public void onStart(StreamController controller) { + thisController = controller; + thisController.disableAutoInboundFlowControl(); + thisController.request(1); + } + + @Override + public void onResponse(StreamingPullResponse response) { + if (enableKeepalive) { + lastServerResponseTime.set(clock.nanoTime()); + } + + channelReconnectBackoffMillis.set(INITIAL_CHANNEL_RECONNECT_BACKOFF.toMillis()); + + boolean exactlyOnceDeliveryEnabledResponse = + response.getSubscriptionProperties().getExactlyOnceDeliveryEnabled(); + boolean messageOrderingEnabledResponse = + response.getSubscriptionProperties().getMessageOrderingEnabled(); + + setExactlyOnceDeliveryEnabled(exactlyOnceDeliveryEnabledResponse); + messageDispatcher.setExactlyOnceDeliveryEnabled(exactlyOnceDeliveryEnabledResponse); + messageDispatcher.setMessageOrderingEnabled(messageOrderingEnabledResponse); + messageDispatcher.processReceivedMessages(response.getReceivedMessagesList()); + + // Only request more if we're not shutdown. + // If errorFuture is done, the stream has either failed or hung up, + // and we don't need to request. + if (isAlive() && !errorFuture.isDone()) { + lock.lock(); + try { + thisController.request(1); + } catch (Exception e) { + logger.log(Level.WARNING, "cannot request more messages", e); + } finally { + lock.unlock(); + } + } + } + + @Override + public void onError(Throwable t) { + if (enableKeepalive) { + stopClientPinger(); + stopServerMonitor(); + } + errorFuture.setException(t); + } + + @Override + public void onComplete() { + if (enableKeepalive) { + stopClientPinger(); + stopServerMonitor(); + } + logger.fine("Streaming pull terminated successfully!"); + errorFuture.set(null); + } + } + + private void initialize() { + final SettableApiFuture errorFuture = SettableApiFuture.create(); + + final ResponseObserver responseObserver = + new StreamingPullResponseObserver(errorFuture); + + ClientStream initClientStream = + subscriberStub + .streamingPullCallable() + .splitCall( + responseObserver, + GrpcCallContext.createDefault() + .withChannelAffinity(channelAffinity) + .withExtraHeaders(streamMetadata)); + + logger.log(Level.FINER, "Initializing stream to subscription {0}", subscription); + // We need to set streaming ack deadline, but it's not useful since we'll modack to send receipt + // anyway. Set to some big-ish value in case we modack late. + initClientStream.send( + StreamingPullRequest.newBuilder() + .setSubscription(subscription) + .setStreamAckDeadlineSeconds(Math.toIntExact(inititalStreamAckDeadline.getSeconds())) + .setClientId(clientId) + .setMaxOutstandingMessages( + this.useLegacyFlowControl + ? 0 + : valueOrZero(flowControlSettings.getMaxOutstandingElementCount())) + .setMaxOutstandingBytes( + this.useLegacyFlowControl + ? 0 + : valueOrZero(flowControlSettings.getMaxOutstandingRequestBytes())) + .setProtocolVersion(protocolVersion) + .build()); + + /** + * Must make sure we do this after sending the subscription name and deadline. Otherwise, some + * other thread might use this stream to do something else before we could send the first + * request. + */ + lock.lock(); + try { + this.clientStream = initClientStream; + } finally { + lock.unlock(); + } + + if (enableKeepalive) { + lastServerResponseTime.set(clock.nanoTime()); + lastClientPingTime.set(-1L); + startClientPinger(); + startServerMonitor(); + } + + ApiFutures.addCallback( + errorFuture, + new ApiFutureCallback() { + @Override + public void onSuccess(@Nullable Void result) { + if (!isAlive()) { + return; + } + channelReconnectBackoffMillis.set(INITIAL_CHANNEL_RECONNECT_BACKOFF.toMillis()); + // The stream was closed. And any case we want to reopen it to continue receiving + // messages. + initialize(); + } + + @Override + public void onFailure(Throwable cause) { + if (enableKeepalive) { + stopClientPinger(); + stopServerMonitor(); + } + if (!isAlive()) { + // we don't care about subscription failures when we're no longer running. + logger.log(Level.FINE, "pull failure after service no longer running", cause); + return; + } + if (!StatusUtil.isRetryable(cause)) { + ApiException gaxException = + ApiExceptionFactory.createException( + cause, GrpcStatusCode.of(Status.fromThrowable(cause).getCode()), false); + logger.log(Level.SEVERE, "terminated streaming with exception", gaxException); + runShutdown(); + setFailureFutureOutstandingMessages(cause); + notifyFailed(gaxException); + return; + } + logger.log(Level.FINE, "stream closed with retryable exception; will reconnect", cause); + long backoffMillis = channelReconnectBackoffMillis.get(); + long newBackoffMillis = + Math.min(backoffMillis * 2, MAX_CHANNEL_RECONNECT_BACKOFF.toMillis()); + channelReconnectBackoffMillis.set(newBackoffMillis); + + systemExecutor.schedule( + new Runnable() { + @Override + public void run() { + initialize(); + } + }, + backoffMillis, + TimeUnit.MILLISECONDS); + } + }, + MoreExecutors.directExecutor()); + } + + private Long valueOrZero(Long value) { + return value != null ? value : 0; + } + + private boolean isAlive() { + State state = state(); // Read the state only once. + return state == State.RUNNING || state == State.STARTING; + } + + private void startClientPinger() { + if (pingSchedulerHandle != null) { + pingSchedulerHandle.cancel(false); + } + + pingSchedulerHandle = + systemExecutor.scheduleAtFixedRate( + () -> { + try { + lock.lock(); + try { + if (clientStream != null && isAlive()) { + clientStream.send(StreamingPullRequest.newBuilder().build()); + lastClientPingTime.set(clock.nanoTime()); + logger.log(Level.FINEST, "Sent client keepalive ping"); + } + } finally { + lock.unlock(); + } + } catch (Exception e) { + logger.log(Level.FINE, "Error sending client keepalive ping", e); + } + }, + 0, + CLIENT_PING_INTERVAL.getSeconds(), + TimeUnit.SECONDS); + } + + private void stopClientPinger() { + if (pingSchedulerHandle != null) { + pingSchedulerHandle.cancel(false); + pingSchedulerHandle = null; + } + } + + private void startServerMonitor() { + if (serverMonitorHandle != null) { + serverMonitorHandle.cancel(false); + } + + serverMonitorHandle = + systemExecutor.scheduleAtFixedRate( + () -> { + try { + if (!isAlive()) { + return; + } + + long now = clock.nanoTime(); + long lastResponse = lastServerResponseTime.get(); + long lastPing = lastClientPingTime.get(); + + if (lastPing <= lastResponse) { + return; + } + + Duration elapsedSincePing = Duration.ofNanos(now - lastPing); + if (elapsedSincePing.compareTo(SERVER_PING_TIMEOUT_DURATION) < 0) { + return; + } + + logger.log( + Level.INFO, + "No response from server for {0} seconds since last ping. Closing stream.", + elapsedSincePing.getSeconds()); + + lock.lock(); + try { + if (clientStream != null) { + clientStream.closeSendWithError( + Status.UNAVAILABLE + .withDescription("Keepalive timeout with server") + .asException()); + } + } finally { + lock.unlock(); + } + stopServerMonitor(); + } catch (Exception e) { + logger.log(Level.FINE, "Error in server keepalive monitor", e); + } + }, + SERVER_MONITOR_INTERVAL.getSeconds(), + SERVER_MONITOR_INTERVAL.getSeconds(), + TimeUnit.SECONDS); + } + + private void stopServerMonitor() { + if (serverMonitorHandle != null) { + serverMonitorHandle.cancel(false); + serverMonitorHandle = null; + } + } + + public void setResponseOutstandingMessages(AckResponse ackResponse) { + // We will close the futures with ackResponse - if there are multiple references to the same + // future they will be handled appropriately + logger.log( + Level.WARNING, "Setting response: {0} on outstanding messages", ackResponse.toString()); + for (AckRequestData ackRequestData : pendingRequests) { + ackRequestData.setResponse(ackResponse, false); + } + + // Clear our pending requests + pendingRequests.clear(); + } + + private void setFailureFutureOutstandingMessages(Throwable t) { + AckResponse ackResponse; + + if (getExactlyOnceDeliveryEnabled()) { + ackResponse = StatusUtil.getFailedAckResponse(t); + } else { + // We should set success regardless if ExactlyOnceDelivery is not enabled + ackResponse = AckResponse.SUCCESSFUL; + } + + setResponseOutstandingMessages(ackResponse); + } + + @Override + public void sendAckOperations(List ackRequestDataList) { + sendAckOperations(ackRequestDataList, INITIAL_ACK_OPERATIONS_RECONNECT_BACKOFF_MILLIS); + } + + @Override + public void sendModackOperations(List modackRequestDataList) { + sendModackOperations(modackRequestDataList, INITIAL_ACK_OPERATIONS_RECONNECT_BACKOFF_MILLIS); + } + + private void sendAckOperations( + List ackRequestDataList, long currentBackoffMillis) { + int pendingOperations = 0; + for (List ackRequestDataInRequestList : + Lists.partition(ackRequestDataList, MAX_PER_REQUEST_CHANGES)) { + List ackIdsInRequest = new ArrayList<>(); + List messagesInRequest = new ArrayList<>(); + for (AckRequestData ackRequestData : ackRequestDataInRequestList) { + ackIdsInRequest.add(ackRequestData.getAckId()); + messagesInRequest.add(ackRequestData.getMessageWrapper()); + if (ackRequestData.hasMessageFuture()) { + // Add to our pending requests if we care about the response + pendingRequests.add(ackRequestData); + } + } + // Creates an Ack span to be passed to the callback + Span rpcSpan = + tracer.startSubscribeRpcSpan(subscriptionNameObject, "ack", messagesInRequest, 0, false); + ApiFutureCallback callback = + getCallback(ackRequestDataInRequestList, 0, false, currentBackoffMillis, rpcSpan); + ApiFuture ackFuture = + subscriberStub + .acknowledgeCallable() + .futureCall( + AcknowledgeRequest.newBuilder() + .setSubscription(subscription) + .addAllAckIds(ackIdsInRequest) + .build()); + ApiFutures.addCallback(ackFuture, callback, getCallbackExecutor()); + pendingOperations++; + } + ackOperationsWaiter.incrementPendingCount(pendingOperations); + } + + private void sendModackOperations( + List modackRequestDataList, long currentBackoffMillis) { + // Send modacks + int pendingOperations = 0; + for (ModackRequestData modackRequestData : modackRequestDataList) { + for (List ackRequestDataInRequestList : + Lists.partition(modackRequestData.getAckRequestData(), MAX_PER_REQUEST_CHANGES)) { + List ackIdsInRequest = new ArrayList<>(); + List messagesInRequest = new ArrayList<>(); + for (AckRequestData ackRequestData : ackRequestDataInRequestList) { + ackIdsInRequest.add(ackRequestData.getAckId()); + messagesInRequest.add(ackRequestData.getMessageWrapper()); + if (ackRequestData.hasMessageFuture()) { + // Add to our pending requests if we care about the response + pendingRequests.add(ackRequestData); + } + } + int deadlineExtensionSeconds = modackRequestData.getDeadlineExtensionSeconds(); + String rpcOperation = deadlineExtensionSeconds == 0 ? "nack" : "modack"; + // Creates either a ModAck span or a Nack span depending on the given ack deadline + Span rpcSpan = + tracer.startSubscribeRpcSpan( + subscriptionNameObject, + rpcOperation, + messagesInRequest, + deadlineExtensionSeconds, + modackRequestData.getIsReceiptModack()); + ApiFutureCallback callback = + getCallback( + ackRequestDataInRequestList, + deadlineExtensionSeconds, + true, + currentBackoffMillis, + rpcSpan); + ApiFuture modackFuture = + subscriberStub + .modifyAckDeadlineCallable() + .futureCall( + ModifyAckDeadlineRequest.newBuilder() + .setSubscription(subscription) + .addAllAckIds(ackIdsInRequest) + .setAckDeadlineSeconds(modackRequestData.getDeadlineExtensionSeconds()) + .build()); + ApiFutures.addCallback(modackFuture, callback, getCallbackExecutor()); + pendingOperations++; + } + } + ackOperationsWaiter.incrementPendingCount(pendingOperations); + } + + private Map getMetadataMapFromThrowable(Throwable t) + throws InvalidProtocolBufferException { + // This converts a Throwable (from a "OK" grpc response) to a map of metadata + // will be of the format: + // { + // "ACK-ID-1": "PERMANENT_*", + // "ACK-ID-2": "TRANSIENT_*" + // } + com.google.rpc.Status status = StatusProto.fromThrowable(t); + Map metadataMap = new HashMap<>(); + if (status != null) { + for (Any any : status.getDetailsList()) { + if (any.is(ErrorInfo.class)) { + ErrorInfo errorInfo = any.unpack(ErrorInfo.class); + metadataMap = errorInfo.getMetadataMap(); + } + } + } + return metadataMap; + } + + private ApiFutureCallback getCallback( + List ackRequestDataList, + int deadlineExtensionSeconds, + boolean isModack, + long currentBackoffMillis, + Span rpcSpan) { + // This callback handles retries, and sets message futures + + // Check if ack or nack + boolean setResponseOnSuccess = (!isModack || (deadlineExtensionSeconds == 0)) ? true : false; + + boolean rpcSpanSampled = rpcSpan == null ? false : rpcSpan.getSpanContext().isSampled(); + + return new ApiFutureCallback() { + @Override + public void onSuccess(Empty empty) { + ackOperationsWaiter.incrementPendingCount(-1); + + tracer.endSubscribeRpcSpan(rpcSpan); + + for (AckRequestData ackRequestData : ackRequestDataList) { + // If we are in NACK_IMMEDIATELY shutdown mode, we will set failures on acks/nack so that + // an error is surfaced if the user + // manually acks or nacks in their callback. + if (setResponseOnSuccess + && getExactlyOnceDeliveryEnabled() + && messageDispatcher.getNackImmediatelyShutdownInProgress()) { + ackRequestData.setResponse(AckResponse.OTHER, setResponseOnSuccess); + messageDispatcher.notifyAckFailed(ackRequestData); + } else { + ackRequestData.setResponse(AckResponse.SUCCESSFUL, setResponseOnSuccess); + messageDispatcher.notifyAckSuccess(ackRequestData); + } + // Remove from our pending operations + pendingRequests.remove(ackRequestData); + tracer.addEndRpcEvent( + ackRequestData.getMessageWrapper(), + rpcSpanSampled, + isModack, + deadlineExtensionSeconds); + if (!isModack || deadlineExtensionSeconds == 0) { + tracer.endSubscriberSpan(ackRequestData.getMessageWrapper()); + } + } + } + + @Override + public void onFailure(Throwable t) { + // Remove from our pending operations + ackOperationsWaiter.incrementPendingCount(-1); + + Level level = isAlive() ? Level.WARNING : Level.FINER; + logger.log(level, "failed to send operations", t); + + tracer.setSubscribeRpcSpanException(rpcSpan, isModack, deadlineExtensionSeconds, t); + + if (!getExactlyOnceDeliveryEnabled()) { + if (enableOpenTelemetryTracing) { + for (AckRequestData ackRequestData : ackRequestDataList) { + tracer.addEndRpcEvent( + ackRequestData.getMessageWrapper(), + rpcSpanSampled, + isModack, + deadlineExtensionSeconds); + if (!isModack || deadlineExtensionSeconds == 0) { + tracer.endSubscriberSpan(ackRequestData.getMessageWrapper()); + } + } + } + return; + } + List ackRequestDataArrayRetryList = new ArrayList<>(); + try { + Map metadataMap = getMetadataMapFromThrowable(t); + if (metadataMap.isEmpty()) { + String operation = isModack ? "ModifyAckDeadline" : "Acknowledge"; + if (!StatusUtil.isRetryable(t)) { + logger.log(Level.WARNING, "Un-retryable error on " + operation, t); + ackRequestDataList.forEach( + ackRequestData -> { + AckResponse failedAckResponse = StatusUtil.getFailedAckResponse(t); + ackRequestData.setResponse(failedAckResponse, setResponseOnSuccess); + messageDispatcher.notifyAckFailed(ackRequestData); + tracer.addEndRpcEvent( + ackRequestData.getMessageWrapper(), + rpcSpanSampled, + isModack, + deadlineExtensionSeconds); + tracer.setSubscriberSpanException( + ackRequestData.getMessageWrapper(), t, "Error with no metadata map"); + ackRequestData + .getMessageWrapper() + .setSubscriberSpanException(t, "Error with no metadata map"); + pendingRequests.remove(ackRequestData); + }); + } else { + logger.log(Level.INFO, "Retryable error on " + operation + ", will resend", t); + ackRequestDataArrayRetryList.addAll(ackRequestDataList); + ackRequestDataList.forEach( + ackRequestData -> { + pendingRequests.remove(ackRequestData); + }); + } + } else { + ackRequestDataList.forEach( + ackRequestData -> { + String ackId = ackRequestData.getAckId(); + if (metadataMap.containsKey(ackId)) { + // An error occured + String errorMessage = metadataMap.get(ackId); + if (errorMessage.startsWith(TRANSIENT_FAILURE_METADATA_PREFIX)) { + // Retry all "TRANSIENT_*" error messages - do not set message future + logger.log(Level.INFO, "Transient error message, will resend", errorMessage); + ackRequestDataArrayRetryList.add(ackRequestData); + } else if (errorMessage.equals(PERMANENT_FAILURE_INVALID_ACK_ID_METADATA)) { + // Permanent failure + logger.log( + Level.INFO, + "Permanent error invalid ack id message, will not resend", + errorMessage); + ackRequestData.setResponse(AckResponse.INVALID, setResponseOnSuccess); + messageDispatcher.notifyAckFailed(ackRequestData); + tracer.addEndRpcEvent( + ackRequestData.getMessageWrapper(), + rpcSpanSampled, + isModack, + deadlineExtensionSeconds); + tracer.setSubscriberSpanException( + ackRequestData.getMessageWrapper(), t, "Invalid ack ID"); + } else { + logger.log( + Level.INFO, "Unknown error message, will not resend", errorMessage); + ackRequestData.setResponse(AckResponse.OTHER, setResponseOnSuccess); + messageDispatcher.notifyAckFailed(ackRequestData); + tracer.addEndRpcEvent( + ackRequestData.getMessageWrapper(), + rpcSpanSampled, + isModack, + deadlineExtensionSeconds); + tracer.setSubscriberSpanException( + ackRequestData.getMessageWrapper(), t, "Unknown error message"); + ackRequestData + .getMessageWrapper() + .setSubscriberSpanException(t, "Unknown error message"); + } + } else { + ackRequestData.setResponse(AckResponse.SUCCESSFUL, setResponseOnSuccess); + messageDispatcher.notifyAckSuccess(ackRequestData); + tracer.endSubscriberSpan(ackRequestData.getMessageWrapper()); + tracer.addEndRpcEvent( + ackRequestData.getMessageWrapper(), + rpcSpanSampled, + isModack, + deadlineExtensionSeconds); + } + // Remove from our pending + pendingRequests.remove(ackRequestData); + }); + } + } catch (InvalidProtocolBufferException e) { + // If we fail to parse out the errorInfo, we should retry all + logger.log( + Level.WARNING, "Exception occurred when parsing throwable {0} for errorInfo", t); + ackRequestDataArrayRetryList.addAll(ackRequestDataList); + } + + // Handle retries + if (!ackRequestDataArrayRetryList.isEmpty()) { + long newBackoffMillis = + Math.min(currentBackoffMillis * 2, MAX_ACK_OPERATIONS_RECONNECT_BACKOFF_MILLIS); + systemExecutor.schedule( + new Runnable() { + @Override + public void run() { + if (isModack) { + // Create a new modackRequest with only the retries + ModackRequestData modackRequestData = + new ModackRequestData( + deadlineExtensionSeconds, ackRequestDataArrayRetryList); + sendModackOperations( + Collections.singletonList(modackRequestData), newBackoffMillis); + } else { + sendAckOperations(ackRequestDataArrayRetryList, newBackoffMillis); + } + } + }, + currentBackoffMillis, + TimeUnit.MILLISECONDS); + } + } + }; + } + + // If exactly-once is enabled, we hold a lock for the ack/modack response callback, so we want to + // avoid using the directExecutor() which runs the callback on the invoking thread. Instead, we + // want to schedule the callback to be run on a different thread. + private Executor getCallbackExecutor() { + if (!getExactlyOnceDeliveryEnabled()) { + return directExecutor(); + } + return systemExecutor; + } + + /** Builder of {@link StreamingSubscriberConnection StreamingSubscriberConnections}. */ + public static final class Builder { + private MessageReceiver receiver; + private MessageReceiverWithAckResponse receiverWithAckResponse; + private String subscription; + private Duration ackExpirationPadding; + private Duration maxAckExtensionPeriod; + private Duration minDurationPerAckExtension; + private boolean minDurationPerAckExtensionDefaultUsed; + private Duration maxDurationPerAckExtension; + private boolean maxDurationPerAckExtensionDefaultUsed; + + private Distribution ackLatencyDistribution; + private SubscriberStub subscriberStub; + private int channelAffinity; + private long protocolVersion; + private FlowController flowController; + private FlowControlSettings flowControlSettings; + private boolean useLegacyFlowControl; + private ScheduledExecutorService executor; + private ScheduledExecutorService systemExecutor; + private ApiClock clock; + + private boolean enableOpenTelemetryTracing; + private OpenTelemetryPubsubTracer tracer; + private SubscriberShutdownSettings subscriberShutdownSettings; + + protected Builder(MessageReceiver receiver) { + this.receiver = receiver; + } + + protected Builder(MessageReceiverWithAckResponse receiverWithAckResponse) { + this.receiverWithAckResponse = receiverWithAckResponse; + } + + public Builder setSubscription(String subscription) { + this.subscription = subscription; + return this; + } + + public Builder setAckExpirationPadding(Duration ackExpirationPadding) { + this.ackExpirationPadding = ackExpirationPadding; + return this; + } + + public Builder setMaxAckExtensionPeriod(Duration maxAckExtensionPeriod) { + this.maxAckExtensionPeriod = maxAckExtensionPeriod; + return this; + } + + public Builder setMinDurationPerAckExtension(Duration minDurationPerAckExtension) { + this.minDurationPerAckExtension = minDurationPerAckExtension; + return this; + } + + public Builder setMinDurationPerAckExtensionDefaultUsed( + boolean minDurationPerAckExtensionDefaultUsed) { + this.minDurationPerAckExtensionDefaultUsed = minDurationPerAckExtensionDefaultUsed; + return this; + } + + public Builder setMaxDurationPerAckExtension(Duration maxDurationPerAckExtension) { + this.maxDurationPerAckExtension = maxDurationPerAckExtension; + return this; + } + + public Builder setMaxDurationPerAckExtensionDefaultUsed( + boolean maxDurationPerAckExtensionDefaultUsed) { + this.maxDurationPerAckExtensionDefaultUsed = maxDurationPerAckExtensionDefaultUsed; + return this; + } + + public Builder setAckLatencyDistribution(Distribution ackLatencyDistribution) { + this.ackLatencyDistribution = ackLatencyDistribution; + return this; + } + + public Builder setSubscriberStub(SubscriberStub subscriberStub) { + this.subscriberStub = subscriberStub; + return this; + } + + public Builder setChannelAffinity(int channelAffinity) { + this.channelAffinity = channelAffinity; + return this; + } + + public Builder setProtocolVersion(long protocolVersion) { + this.protocolVersion = protocolVersion; + return this; + } + + public Builder setFlowController(FlowController flowController) { + this.flowController = flowController; + return this; + } + + public Builder setFlowControlSettings(FlowControlSettings flowControlSettings) { + this.flowControlSettings = flowControlSettings; + return this; + } + + public Builder setUseLegacyFlowControl(boolean useLegacyFlowControl) { + this.useLegacyFlowControl = useLegacyFlowControl; + return this; + } + + public Builder setExecutor(ScheduledExecutorService executor) { + this.executor = executor; + return this; + } + + public Builder setSystemExecutor(ScheduledExecutorService systemExecutor) { + this.systemExecutor = systemExecutor; + return this; + } + + public Builder setClock(ApiClock clock) { + this.clock = clock; + return this; + } + + public Builder setEnableOpenTelemetryTracing(boolean enableOpenTelemetryTracing) { + this.enableOpenTelemetryTracing = enableOpenTelemetryTracing; + return this; + } + + public Builder setTracer(OpenTelemetryPubsubTracer tracer) { + this.tracer = tracer; + return this; + } + + public Builder setSubscriberShutdownSettings( + SubscriberShutdownSettings subscriberShutdownSettings) { + this.subscriberShutdownSettings = subscriberShutdownSettings; + return this; + } + + public StreamingSubscriberConnection build() { + return new StreamingSubscriberConnection(this); + } + } + + public static Builder newBuilder(MessageReceiver receiver) { + return new Builder(receiver); + } + + public static Builder newBuilder(MessageReceiverWithAckResponse receiverWithAckResponse) { + return new Builder(receiverWithAckResponse); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Subscriber.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Subscriber.java new file mode 100644 index 000000000000..a2d4f3b38589 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Subscriber.java @@ -0,0 +1,840 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.api.gax.util.TimeConversionUtils.toJavaTimeDuration; + +import com.google.api.core.AbstractApiService; +import com.google.api.core.ApiClock; +import com.google.api.core.ApiService; +import com.google.api.core.BetaApi; +import com.google.api.core.CurrentMillisClock; +import com.google.api.core.InternalApi; +import com.google.api.core.ObsoleteApi; +import com.google.api.gax.batching.FlowControlSettings; +import com.google.api.gax.batching.FlowController; +import com.google.api.gax.batching.FlowController.LimitExceededBehavior; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.CredentialsProvider; +import com.google.api.gax.core.Distribution; +import com.google.api.gax.core.ExecutorAsBackgroundResource; +import com.google.api.gax.core.ExecutorProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.api.gax.rpc.HeaderProvider; +import com.google.api.gax.rpc.NoHeaderProvider; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.auth.oauth2.GoogleCredentials; +import com.google.cloud.pubsub.v1.stub.GrpcSubscriberStub; +import com.google.cloud.pubsub.v1.stub.SubscriberStub; +import com.google.cloud.pubsub.v1.stub.SubscriberStubSettings; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.Tracer; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; + +/** + * A Cloud Pub/Sub subscriber that is + * associated with a specific subscription at creation. + * + *

A {@link Subscriber} allows you to provide an implementation of a {@link MessageReceiver + * receiver} to which messages are going to be delivered as soon as they are received by the + * subscriber. The delivered messages then can be {@link AckReplyConsumer#ack() acked} or {@link + * AckReplyConsumer#nack() nacked} at will as they get processed by the receiver. Nacking a messages + * implies a later redelivery of such message. + * + *

The subscriber handles the ack management, by automatically extending the ack deadline while + * the message is being processed, to then issue the ack or nack of such message when the processing + * is done (see {@link Builder#setMaxAckExtensionPeriod(Duration)}). Note: message + * redelivery is still possible. + * + *

It also provides customizable options that control: + * + *

    + *
  • Ack deadline extension: such as the amount of time ahead to trigger the extension of + * message acknowledgement expiration. + *
  • Flow control: such as the maximum outstanding messages or maximum outstanding bytes to keep + * in memory before the receiver either ack or nack them. + *
+ * + *

{@link Subscriber} will use the credentials set on the channel, which uses application default + * credentials through {@link GoogleCredentials#getApplicationDefault} by default. + * + *

{@code Subscriber} is implemented using Guava's + * Service and provides the same methods. See Guava documentation for more + * details. + */ +public class Subscriber extends AbstractApiService implements SubscriberInterface { + private static final int THREADS_PER_CHANNEL = 5; + private static final int MAX_INBOUND_MESSAGE_SIZE = + 20 * 1024 * 1024; // 20MB API maximum message size. + + private static final int MAX_INBOUND_METADATA_SIZE = + 4 * 1024 * 1024; // 4MB API maximum metadata size + + @InternalApi + static final java.time.Duration DEFAULT_MAX_ACK_EXTENSION_PERIOD = + java.time.Duration.ofMinutes(60); + + @InternalApi + static final java.time.Duration DEFAULT_MIN_ACK_DEADLINE_EXTENSION_EXACTLY_ONCE_DELIVERY = + java.time.Duration.ofMinutes(1); + + @InternalApi + static final java.time.Duration DEFAULT_MIN_ACK_DEADLINE_EXTENSION = + java.time.Duration.ofMinutes(0); + + @InternalApi + static final java.time.Duration DEFAULT_MAX_ACK_DEADLINE_EXTENSION = + java.time.Duration.ofSeconds(0); + + @InternalApi + static final java.time.Duration MIN_STREAM_ACK_DEADLINE = java.time.Duration.ofSeconds(10); + + @InternalApi + static final java.time.Duration MAX_STREAM_ACK_DEADLINE = java.time.Duration.ofSeconds(600); + + @InternalApi + static final java.time.Duration STREAM_ACK_DEADLINE_DEFAULT = java.time.Duration.ofSeconds(60); + + @InternalApi + static final java.time.Duration STREAM_ACK_DEADLINE_EXACTLY_ONCE_DELIVERY_DEFAULT = + java.time.Duration.ofSeconds(60); + + @InternalApi + static final java.time.Duration ACK_EXPIRATION_PADDING_DEFAULT = java.time.Duration.ofSeconds(5); + + private static final Logger logger = Logger.getLogger(Subscriber.class.getName()); + + private static final String OPEN_TELEMETRY_TRACER_NAME = "com.google.cloud.pubsub.v1"; + + private final String subscriptionName; + private final FlowControlSettings flowControlSettings; + private final boolean useLegacyFlowControl; + private final java.time.Duration maxAckExtensionPeriod; + private final java.time.Duration maxDurationPerAckExtension; + private final boolean maxDurationPerAckExtensionDefaultUsed; + private final java.time.Duration minDurationPerAckExtension; + private final boolean minDurationPerAckExtensionDefaultUsed; + private final long protocolVersion = 1L; + + // The ExecutorProvider used to generate executors for processing messages. + private final ExecutorProvider executorProvider; + // An instantiation of the SystemExecutorProvider used for processing acks + // and other system actions. + @Nullable private final ScheduledExecutorService alarmsExecutor; + + private final Distribution ackLatencyDistribution = + new Distribution(Math.toIntExact(MAX_STREAM_ACK_DEADLINE.getSeconds()) + 1); + + private SubscriberStub subscriberStub; + private final SubscriberStubSettings subStubSettings; + private final FlowController flowController; + private final int numPullers; + + private final MessageReceiver receiver; + private final MessageReceiverWithAckResponse receiverWithAckResponse; + private final List streamingSubscriberConnections; + private final ApiClock clock; + private final List backgroundResources = new ArrayList<>(); + + private final boolean enableOpenTelemetryTracing; + private final OpenTelemetry openTelemetry; + private OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(null, false); + private final SubscriberShutdownSettings subscriberShutdownSettings; + + private Subscriber(Builder builder) { + receiver = builder.receiver; + receiverWithAckResponse = builder.receiverWithAckResponse; + flowControlSettings = builder.flowControlSettings; + useLegacyFlowControl = builder.useLegacyFlowControl; + subscriptionName = builder.subscription; + + maxAckExtensionPeriod = builder.maxAckExtensionPeriod; + maxDurationPerAckExtension = builder.maxDurationPerAckExtension; + maxDurationPerAckExtensionDefaultUsed = builder.maxDurationPerAckExtensionDefaultUsed; + minDurationPerAckExtension = builder.minDurationPerAckExtension; + minDurationPerAckExtensionDefaultUsed = builder.minDurationPerAckExtensionDefaultUsed; + + clock = builder.clock.isPresent() ? builder.clock.get() : CurrentMillisClock.getDefaultClock(); + + flowController = + new FlowController( + builder.flowControlSettings.toBuilder() + .setLimitExceededBehavior(LimitExceededBehavior.Block) + .build()); + + this.numPullers = builder.parallelPullCount; + + executorProvider = builder.executorProvider; + + ExecutorProvider systemExecutorProvider = builder.systemExecutorProvider; + alarmsExecutor = systemExecutorProvider.getExecutor(); + + if (systemExecutorProvider.shouldAutoClose()) { + backgroundResources.add(new ExecutorAsBackgroundResource((alarmsExecutor))); + } + + TransportChannelProvider channelProvider = builder.channelProvider; + if (channelProvider.acceptsPoolSize()) { + channelProvider = channelProvider.withPoolSize(numPullers); + } + + try { + this.subStubSettings = + SubscriberStubSettings.newBuilder() + .setExecutorProvider(systemExecutorProvider) + .setCredentialsProvider(builder.credentialsProvider) + .setTransportChannelProvider(channelProvider) + .setHeaderProvider(builder.headerProvider) + .setEndpoint(builder.endpoint) + .setUniverseDomain(builder.universeDomain) + .build(); + // TODO(pongad): what about internal header?? + } catch (Exception e) { + throw new IllegalStateException(e); + } + + this.enableOpenTelemetryTracing = builder.enableOpenTelemetryTracing; + this.openTelemetry = builder.openTelemetry; + this.subscriberShutdownSettings = builder.subscriberShutdownSettings; + if (this.openTelemetry != null && this.enableOpenTelemetryTracing) { + Tracer openTelemetryTracer = builder.openTelemetry.getTracer(OPEN_TELEMETRY_TRACER_NAME); + if (openTelemetryTracer != null) { + this.tracer = + new OpenTelemetryPubsubTracer(openTelemetryTracer, this.enableOpenTelemetryTracing); + } + } + + streamingSubscriberConnections = new ArrayList(numPullers); + + // We regularly look up the distribution for a good subscription deadline. + // So we seed the distribution with the minimum value to start with. + // Distribution is percentile-based, so this value will eventually lose importance. + ackLatencyDistribution.record(Math.toIntExact(MIN_STREAM_ACK_DEADLINE.getSeconds())); + } + + /** + * Constructs a new {@link Builder}. + * + * @param subscription Cloud Pub/Sub subscription to bind the subscriber to + * @param receiver an implementation of {@link MessageReceiver} used to process the received + * messages + */ + public static Builder newBuilder(ProjectSubscriptionName subscription, MessageReceiver receiver) { + return newBuilder(subscription.toString(), receiver); + } + + public static Builder newBuilder( + ProjectSubscriptionName subscription, MessageReceiverWithAckResponse receiver) { + return newBuilder(subscription.toString(), receiver); + } + + /** + * Constructs a new {@link Builder}. + * + * @param subscription Cloud Pub/Sub subscription to bind the subscriber to + * @param receiver an implementation of {@link MessageReceiver} used to process the received + * messages + */ + public static Builder newBuilder(String subscription, MessageReceiver receiver) { + return new Builder(subscription, receiver); + } + + public static Builder newBuilder(String subscription, MessageReceiverWithAckResponse receiver) { + return new Builder(subscription, receiver); + } + + /** Returns the delivery attempt count for a received {@link PubsubMessage} */ + public static Integer getDeliveryAttempt(PubsubMessage message) { + if (!message.containsAttributes("googclient_deliveryattempt")) { + return null; + } + return Integer.parseInt(message.getAttributesOrThrow("googclient_deliveryattempt")); + } + + /** Subscription which the subscriber is subscribed to. */ + public String getSubscriptionNameString() { + return subscriptionName; + } + + /** The flow control settings the Subscriber is configured with. */ + public FlowControlSettings getFlowControlSettings() { + return flowControlSettings; + } + + /** + * Initiates service startup and returns immediately. + * + *

Example of receiving a specific number of messages. + * + *

{@code
+   * Subscriber subscriber = Subscriber.newBuilder(subscription, receiver).build();
+   * subscriber.addListener(new Subscriber.Listener() {
+   *   public void failed(Subscriber.State from, Throwable failure) {
+   *     // Handle error.
+   *   }
+   * }, executor);
+   * subscriber.startAsync();
+   *
+   * // Wait for a stop signal.
+   * // In a server, this might be a signal to stop serving.
+   * // In this example, the signal is just a dummy Future.
+   * //
+   * // By default, Subscriber uses daemon threads (see
+   * // https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html).
+   * // Consequently, once other threads have terminated, Subscriber will not stop the JVM from
+   * // exiting.
+   * // If the Subscriber should simply run forever, either use the setExecutorProvider method in
+   * // Subscriber.Builder
+   * // to use non-daemon threads or run
+   * //   for (;;) {
+   * //     Thread.sleep(Long.MAX_VALUE);
+   * //   }
+   * // at the end of main() to previent the main thread from exiting.
+   * done.get();
+   * subscriber.stopAsync().awaitTerminated();
+   * }
+ */ + @Override + public ApiService startAsync() { + // Override only for the docs. + return super.startAsync(); + } + + @Override + protected void doStart() { + logger.log(Level.FINE, "Starting subscriber group."); + + try { + this.subscriberStub = GrpcSubscriberStub.create(subStubSettings); + } catch (IOException e) { + // doesn't matter what we throw, the Service will just catch it and fail to start. + throw new IllegalStateException(e); + } + + // When started, connections submit tasks to the executor. + // These tasks must finish before the connections can declare themselves running. + // If we have a single-thread executor and call startStreamingConnections from the + // same executor, it will deadlock: the thread will be stuck waiting for connections + // to start but cannot start the connections. + // For this reason, we spawn a dedicated thread. Starting subscriber should be rare. + new Thread( + new Runnable() { + @Override + public void run() { + try { + startStreamingConnections(); + notifyStarted(); + } catch (Throwable t) { + notifyFailed(t); + } + } + }) + .start(); + } + + @Override + protected void doStop() { + new Thread( + new Runnable() { + @Override + public void run() { + try { + runShutdown(); + notifyStopped(); + } catch (Exception e) { + notifyFailed(e); + } + } + }) + .start(); + } + + private void runShutdown() { + java.time.Duration timeout = subscriberShutdownSettings.getTimeout(); + long deadlineMillis = -1; + if (!timeout.isNegative()) { + deadlineMillis = clock.millisTime() + timeout.toMillis(); + } + + stopAllStreamingConnections(deadlineMillis); + shutdownBackgroundResources(); + subscriberStub.shutdownNow(); + } + + private void startStreamingConnections() { + synchronized (streamingSubscriberConnections) { + for (int i = 0; i < numPullers; i++) { + final ScheduledExecutorService executor = executorProvider.getExecutor(); + if (executorProvider.shouldAutoClose()) { + backgroundResources.add(new ExecutorAsBackgroundResource((executor))); + } + + StreamingSubscriberConnection.Builder streamingSubscriberConnectionBuilder; + + if (receiverWithAckResponse != null) { + streamingSubscriberConnectionBuilder = + StreamingSubscriberConnection.newBuilder(receiverWithAckResponse); + } else { + streamingSubscriberConnectionBuilder = StreamingSubscriberConnection.newBuilder(receiver); + } + + StreamingSubscriberConnection streamingSubscriberConnection = + streamingSubscriberConnectionBuilder + .setSubscription(subscriptionName) + .setAckExpirationPadding(ACK_EXPIRATION_PADDING_DEFAULT) + .setMaxAckExtensionPeriod(maxAckExtensionPeriod) + .setMinDurationPerAckExtension(minDurationPerAckExtension) + .setMinDurationPerAckExtensionDefaultUsed(minDurationPerAckExtensionDefaultUsed) + .setMaxDurationPerAckExtension(maxDurationPerAckExtension) + .setMaxDurationPerAckExtensionDefaultUsed(maxDurationPerAckExtensionDefaultUsed) + .setAckLatencyDistribution(ackLatencyDistribution) + .setSubscriberStub(subscriberStub) + .setChannelAffinity(i) + .setFlowControlSettings(flowControlSettings) + .setFlowController(flowController) + .setUseLegacyFlowControl(useLegacyFlowControl) + .setExecutor(executor) + .setSystemExecutor(alarmsExecutor) + .setClock(clock) + .setEnableOpenTelemetryTracing(enableOpenTelemetryTracing) + .setTracer(tracer) + .setSubscriberShutdownSettings(subscriberShutdownSettings) + .setProtocolVersion(protocolVersion) + .build(); + + streamingSubscriberConnections.add(streamingSubscriberConnection); + } + startConnections( + streamingSubscriberConnections, + new Listener() { + @Override + public void failed(State from, Throwable failure) { + // If a connection failed is because of a fatal error, we should fail the + // whole subscriber. + runShutdown(); + try { + notifyFailed(failure); + } catch (IllegalStateException e) { + if (isRunning()) { + throw e; + } + // It could happen that we are shutting down while some channels fail. + } + } + }); + } + } + + private void stopAllStreamingConnections(long deadlineMillis) { + stopConnections(streamingSubscriberConnections, deadlineMillis); + } + + private void shutdownBackgroundResources() { + for (BackgroundResource resource : backgroundResources) { + resource.shutdown(); + } + } + + private void startConnections( + List connections, final ApiService.Listener connectionsListener) { + for (ApiService subscriber : connections) { + subscriber.addListener(connectionsListener, alarmsExecutor); + subscriber.startAsync(); + } + for (ApiService subscriber : connections) { + subscriber.awaitRunning(); + } + } + + private void stopConnections(List connections, long deadlineMillis) { + ArrayList liveConnections; + synchronized (connections) { + liveConnections = new ArrayList(connections); + connections.clear(); + } + for (ApiService subscriber : liveConnections) { + subscriber.stopAsync(); + } + for (ApiService subscriber : liveConnections) { + try { + if (deadlineMillis < 0) { + // Wait indefinitely + subscriber.awaitTerminated(); + } else { + long remaining = deadlineMillis - clock.millisTime(); + if (remaining < 0) { + remaining = 0; + } + subscriber.awaitTerminated(remaining, java.util.concurrent.TimeUnit.MILLISECONDS); + } + } catch (Exception e) { + logger.log(Level.FINE, "Exception while waiting for a connection to terminate", e); + break; // Stop waiting for other connections. + } + } + } + + /** Builder of {@link Subscriber Subscribers}. */ + public static final class Builder { + static final FlowControlSettings DEFAULT_FLOW_CONTROL_SETTINGS = + FlowControlSettings.newBuilder() + .setMaxOutstandingElementCount(1000L) + .setMaxOutstandingRequestBytes(100L * 1024L * 1024L) // 100MB + .build(); + + private static final ExecutorProvider DEFAULT_EXECUTOR_PROVIDER = + InstantiatingExecutorProvider.newBuilder() + .setExecutorThreadCount(THREADS_PER_CHANNEL) + .build(); + private static final AtomicInteger SYSTEM_EXECUTOR_COUNTER = new AtomicInteger(); + + private String subscription; + private MessageReceiver receiver; + private MessageReceiverWithAckResponse receiverWithAckResponse; + + private java.time.Duration maxAckExtensionPeriod = DEFAULT_MAX_ACK_EXTENSION_PERIOD; + private java.time.Duration minDurationPerAckExtension = DEFAULT_MIN_ACK_DEADLINE_EXTENSION; + private boolean minDurationPerAckExtensionDefaultUsed = true; + private java.time.Duration maxDurationPerAckExtension = DEFAULT_MAX_ACK_DEADLINE_EXTENSION; + private boolean maxDurationPerAckExtensionDefaultUsed = true; + + private boolean useLegacyFlowControl = false; + private FlowControlSettings flowControlSettings = DEFAULT_FLOW_CONTROL_SETTINGS; + + private ExecutorProvider executorProvider = DEFAULT_EXECUTOR_PROVIDER; + private ExecutorProvider systemExecutorProvider = null; + private TransportChannelProvider channelProvider = + SubscriptionAdminSettings.defaultGrpcTransportProviderBuilder() + .setMaxInboundMessageSize(MAX_INBOUND_MESSAGE_SIZE) + .setMaxInboundMetadataSize(MAX_INBOUND_METADATA_SIZE) + .setKeepAliveTimeDuration(java.time.Duration.ofMinutes(5)) + .build(); + private HeaderProvider headerProvider = new NoHeaderProvider(); + private CredentialsProvider credentialsProvider = + SubscriptionAdminSettings.defaultCredentialsProviderBuilder().build(); + private Optional clock = Optional.absent(); + private int parallelPullCount = 1; + private String endpoint = null; + private String universeDomain = null; + + private boolean enableOpenTelemetryTracing = false; + private OpenTelemetry openTelemetry = null; + + private SubscriberShutdownSettings subscriberShutdownSettings = + SubscriberShutdownSettings.newBuilder().build(); + + Builder(String subscription, MessageReceiver receiver) { + this.subscription = subscription; + this.receiver = receiver; + } + + Builder(String subscription, MessageReceiverWithAckResponse receiverWithAckResponse) { + this.subscription = subscription; + this.receiverWithAckResponse = receiverWithAckResponse; + } + + /** + * {@code ChannelProvider} to use to create Channels, which must point at Cloud Pub/Sub + * endpoint. + * + *

For performance, this client benefits from having multiple channels open at once. Users + * are encouraged to provide instances of {@code ChannelProvider} that creates new channels + * instead of returning pre-initialized ones. + */ + public Builder setChannelProvider(TransportChannelProvider channelProvider) { + this.channelProvider = Preconditions.checkNotNull(channelProvider); + return this; + } + + /** + * Sets the static header provider. The header provider will be called during client + * construction only once. The headers returned by the provider will be cached and supplied as + * is for each request issued by the constructed client. Some reserved headers can be overridden + * (e.g. Content-Type) or merged with the default value (e.g. User-Agent) by the underlying + * transport layer. + * + * @param headerProvider the header provider + * @return the builder + */ + @BetaApi + public Builder setHeaderProvider(HeaderProvider headerProvider) { + this.headerProvider = Preconditions.checkNotNull(headerProvider); + return this; + } + + /** + * Sets the flow control settings. + * + *

In the example below, the {@link Subscriber} will make sure that + * + *

    + *
  • there are at most ten thousand outstanding messages, and + *
  • the combined size of outstanding messages does not exceed 1GB. + *
+ * + * "Outstanding messages" here means the messages that have already been given to {@link + * MessageReceiver} but not yet {@code acked()} or {@code nacked()}. + * + *
{@code
+     * FlowControlSettings flowControlSettings =
+     *  FlowControlSettings.newBuilder()
+     *      .setMaxOutstandingElementCount(10_000L)
+     *      .setMaxOutstandingRequestBytes(1_000_000_000L)
+     *      .build();
+     * Subscriber subscriber =
+     *     Subscriber.newBuilder(subscriptionName, receiver)
+     *         .setFlowControlSettings(flowControlSettings)
+     *         .build();
+     * }
+ */ + public Builder setFlowControlSettings(FlowControlSettings flowControlSettings) { + this.flowControlSettings = Preconditions.checkNotNull(flowControlSettings); + return this; + } + + /** + * Disables enforcing flow control settings at the Cloud PubSub server and uses the less + * accurate method of only enforcing flow control at the client side. + */ + public Builder setUseLegacyFlowControl(boolean value) { + this.useLegacyFlowControl = value; + return this; + } + + /** + * This method is obsolete. Use {@link #setMaxAckExtensionPeriodDuration(java.time.Duration)} + * instead. + */ + @ObsoleteApi("Use setMaxAckExtensionPeriodDuration(java.time.Duration) instead") + public Builder setMaxAckExtensionPeriod(org.threeten.bp.Duration maxAckExtensionPeriod) { + return setMaxAckExtensionPeriodDuration(toJavaTimeDuration(maxAckExtensionPeriod)); + } + + /** + * Set the maximum period a message ack deadline will be extended. Defaults to one hour. + * + *

It is recommended to set this value to a reasonable upper bound of the subscriber time to + * process any message. This maximum period avoids messages to be locked by a subscriber + * in cases when the ack reply is lost. + * + *

A zero duration effectively disables auto deadline extensions. + */ + public Builder setMaxAckExtensionPeriodDuration(java.time.Duration maxAckExtensionPeriod) { + Preconditions.checkArgument(maxAckExtensionPeriod.toMillis() >= 0); + this.maxAckExtensionPeriod = maxAckExtensionPeriod; + return this; + } + + /** + * This method is obsolete. Use {@link + * #setMaxDurationPerAckExtensionDuration(java.time.Duration)} instead. + */ + @ObsoleteApi("Use setMaxDurationPerAckExtensionDuration(java.time.Duration) instead") + public Builder setMaxDurationPerAckExtension( + org.threeten.bp.Duration maxDurationPerAckExtension) { + return setMaxDurationPerAckExtensionDuration(toJavaTimeDuration(maxDurationPerAckExtension)); + } + + /** + * Set the upper bound for a single mod ack extention period. + * + *

The ack deadline will continue to be extended by up to this duration until + * MaxAckExtensionPeriod is reached. Setting MaxDurationPerAckExtension bounds the maximum + * amount of time before a mesage re-delivery in the event the Subscriber fails to extend the + * deadline. + * + *

MaxDurationPerAckExtension configuration can be disabled by specifying a zero duration. + */ + public Builder setMaxDurationPerAckExtensionDuration( + java.time.Duration maxDurationPerAckExtension) { + // If a non-default min is set, make sure min is less than max + Preconditions.checkArgument( + maxDurationPerAckExtension.toMillis() >= 0 + && (this.minDurationPerAckExtensionDefaultUsed + || (this.minDurationPerAckExtension.toMillis() + < maxDurationPerAckExtension.toMillis()))); + this.maxDurationPerAckExtension = maxDurationPerAckExtension; + this.maxDurationPerAckExtensionDefaultUsed = false; + return this; + } + + /** + * This method is obsolete. Use {@link + * #setMinDurationPerAckExtensionDuration(java.time.Duration)} instead. + */ + @ObsoleteApi("Use setMinDurationPerAckExtensionDuration(java.time.Duration) instead") + public Builder setMinDurationPerAckExtension( + org.threeten.bp.Duration minDurationPerAckExtension) { + return setMinDurationPerAckExtensionDuration(toJavaTimeDuration(minDurationPerAckExtension)); + } + + /** + * Set the lower bound for a single mod ack extention period. + * + *

The ack deadline will continue to be extended by up to this duration until + * MinAckExtensionPeriod is reached. Setting MinDurationPerAckExtension bounds the minimum + * amount of time before a mesage re-delivery in the event the Subscriber fails to extend the + * deadline. + * + *

MinDurationPerAckExtension configuration can be disabled by specifying a zero duration. + */ + public Builder setMinDurationPerAckExtensionDuration( + java.time.Duration minDurationPerAckExtension) { + // If a non-default max is set, make sure min is less than max + Preconditions.checkArgument( + minDurationPerAckExtension.toMillis() >= 0 + && (this.maxDurationPerAckExtensionDefaultUsed + || (minDurationPerAckExtension.toMillis() + < this.maxDurationPerAckExtension.toMillis()))); + + this.minDurationPerAckExtension = minDurationPerAckExtension; + this.minDurationPerAckExtensionDefaultUsed = false; + return this; + } + + /** + * Gives the ability to set a custom executor. {@link ExecutorProvider#getExecutor()} will be + * called {@link Builder#parallelPullCount} times. + */ + public Builder setExecutorProvider(ExecutorProvider executorProvider) { + this.executorProvider = Preconditions.checkNotNull(executorProvider); + return this; + } + + /** {@code CredentialsProvider} to use to create Credentials to authenticate calls. */ + public Builder setCredentialsProvider(CredentialsProvider credentialsProvider) { + this.credentialsProvider = Preconditions.checkNotNull(credentialsProvider); + return this; + } + + /** + * Gives the ability to set a custom executor for managing lease extensions. If none is provided + * a shared one will be used by all {@link Subscriber} instances. + */ + public Builder setSystemExecutorProvider(ExecutorProvider executorProvider) { + this.systemExecutorProvider = Preconditions.checkNotNull(executorProvider); + return this; + } + + /** + * Sets the number of StreamingPull streams to pull messages from the subscription. Defaults to + * one. + */ + public Builder setParallelPullCount(int parallelPullCount) { + this.parallelPullCount = parallelPullCount; + return this; + } + + /** Gives the ability to override the gRPC endpoint. */ + public Builder setEndpoint(String endpoint) { + this.endpoint = endpoint; + return this; + } + + /** Gives the ability to override the universe domain. */ + public Builder setUniverseDomain(String universeDomain) { + this.universeDomain = universeDomain; + return this; + } + + /** Gives the ability to set a custom clock. */ + Builder setClock(ApiClock clock) { + this.clock = Optional.of(clock); + return this; + } + + /** + * OpenTelemetry will be enabled if setEnableOpenTelemetry is true and and instance of + * OpenTelemetry has been provied. Warning: traces are subject to change. The name and + * attributes of a span might change without notice. Only use run traces interactively. Don't + * use in automation. Running non-interactive traces can cause problems if the underlying trace + * architecture changes without notice. + */ + + /** Gives the ability to enable Open Telemetry Tracing */ + public Builder setEnableOpenTelemetryTracing(boolean enableOpenTelemetryTracing) { + this.enableOpenTelemetryTracing = enableOpenTelemetryTracing; + return this; + } + + /** Sets the instance of OpenTelemetry for the Publisher class. */ + public Builder setOpenTelemetry(OpenTelemetry openTelemetry) { + this.openTelemetry = openTelemetry; + return this; + } + + /** + * Sets the shutdown settings for the subscriber. Defaults to {@link + * SubscriberShutdownSettings#newBuilder() default settings}. + */ + @BetaApi( + "The surface for SubscriberShutdownSettings is not stable yet and may be changed in the" + + " future.") + public Builder setSubscriberShutdownSettings( + SubscriberShutdownSettings subscriberShutdownSettings) { + this.subscriberShutdownSettings = Preconditions.checkNotNull(subscriberShutdownSettings); + return this; + } + + /** Returns the default FlowControlSettings used by the client if settings are not provided. */ + public static FlowControlSettings getDefaultFlowControlSettings() { + return DEFAULT_FLOW_CONTROL_SETTINGS; + } + + public Subscriber build() { + if (systemExecutorProvider == null) { + ThreadFactory threadFactory = + new ThreadFactoryBuilder() + .setDaemon(true) + .setNameFormat("Subscriber-SE-" + SYSTEM_EXECUTOR_COUNTER.incrementAndGet() + "-%d") + .build(); + int threadCount = Math.max(6, 2 * parallelPullCount); + final ScheduledExecutorService executor = + Executors.newScheduledThreadPool(threadCount, threadFactory); + systemExecutorProvider = + new ExecutorProvider() { + @Override + public boolean shouldAutoClose() { + return true; + } + + @Override + public ScheduledExecutorService getExecutor() { + return executor; + } + }; + } + return new Subscriber(this); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberInterface.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberInterface.java new file mode 100644 index 000000000000..e97e9141f47a --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberInterface.java @@ -0,0 +1,26 @@ +/* + * Copyright 2020 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.ApiService; + +/** + * The core interface for a Cloud Pub/Sub subscriber, consisting only of + * ApiService methods. + */ +public interface SubscriberInterface extends ApiService {} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberShutdownSettings.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberShutdownSettings.java new file mode 100644 index 000000000000..efd8e10db809 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberShutdownSettings.java @@ -0,0 +1,102 @@ +/* + * Copyright 2025 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.common.base.Preconditions; +import java.time.Duration; + +/** + * Settings for configuring the shutdown behavior of a {@link Subscriber}. + * + *

This class allows customization of how the subscriber handles outstanding messages during + * shutdown, including whether to wait for processing to complete or to immediately nack messages, + * and an optional timeout for the shutdown process. + */ +public final class SubscriberShutdownSettings { + + /** Defines the behavior for handling outstanding messages during subscriber shutdown. */ + public enum ShutdownMode { + /** + * The subscriber will wait for all outstanding messages to be processed (acked or nacked by the + * user's message receiver) before completing the shutdown. + */ + WAIT_FOR_PROCESSING, + /** + * The subscriber will immediately nack all outstanding messages and attempt to shut down as + * quickly as possible. Messages delivered to the user callback but not yet acked/nacked will + * also be nacked. + */ + NACK_IMMEDIATELY + } + + private static final Duration DEFAULT_TIMEOUT = Duration.ofSeconds(-1); // Indicates no timeout + private static final ShutdownMode DEFAULT_MODE = ShutdownMode.WAIT_FOR_PROCESSING; + + private final ShutdownMode mode; + private final Duration timeout; + + private SubscriberShutdownSettings(Builder builder) { + this.mode = builder.mode; + this.timeout = builder.timeout; + } + + /** Returns the configured shutdown mode. */ + public ShutdownMode getMode() { + return mode; + } + + /** Returns the configured shutdown timeout. A negative duration indicates no timeout. */ + public Duration getTimeout() { + return timeout; + } + + /** Returns a new builder for {@code SubscriberShutdownSettings}. */ + public static Builder newBuilder() { + return new Builder(); + } + + /** Builder for {@code SubscriberShutdownSettings}. */ + public static final class Builder { + private ShutdownMode mode = DEFAULT_MODE; + private Duration timeout = DEFAULT_TIMEOUT; + + private Builder() {} + + /** Sets the shutdown mode. Defaults to {@link ShutdownMode#WAIT_FOR_PROCESSING}. */ + public Builder setMode(ShutdownMode mode) { + this.mode = Preconditions.checkNotNull(mode); + return this; + } + + /** + * Sets the shutdown timeout. Defaults to a negative duration, indicating no timeout. + * + *

A positive duration specifies the maximum time to wait for shutdown to complete. A + * duration of zero indicates an immediate, forceful shutdown. A negative duration indicates an + * indefinite wait. + */ + public Builder setTimeout(Duration timeout) { + this.timeout = Preconditions.checkNotNull(timeout); + return this; + } + + /** Builds an instance of {@code SubscriberShutdownSettings}. */ + public SubscriberShutdownSettings build() { + return new SubscriberShutdownSettings(this); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberStats.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberStats.java new file mode 100644 index 000000000000..992c1d056dd4 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberStats.java @@ -0,0 +1,78 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.auto.value.AutoValue; + +/** + * A snapshot of the subscriber statistics at the time they were requested from the {@link + * Subscriber}. + */ +@AutoValue +abstract class SubscriberStats { + + @AutoValue + // TODO: Finish implementation. + abstract static class Stats {} + + /** Number of successfully published messages. */ + abstract long getReceivedMessages(); + + /** Number of successfully published messages. */ + abstract long getAckedMessages(); + + /** Number of received messages. */ + abstract long getTotalReceivedMessages(); + + /** Number messages acked. */ + abstract long getTotalAckedMessages(); + + /** End to end latency. */ + abstract Stats getEndToEndLatency(); + + /** + * Acknowledgement latency; time in between the message has been received and then acknowledged or + * rejected. + */ + abstract Stats getAckLatency(); + + /** Number of messages for which we have auto extended its acknowledgement deadline. */ + abstract long getNumberOfAutoExtendedAckDeadlines(); + + static Builder newBuilder() { + return new AutoValue_SubscriberStats.Builder(); + } + + @AutoValue.Builder + abstract static class Builder { + abstract Builder setReceivedMessages(long value); + + abstract Builder setAckedMessages(long value); + + abstract Builder setTotalReceivedMessages(long value); + + abstract Builder setTotalAckedMessages(long value); + + abstract Builder setEndToEndLatency(Stats value); + + abstract Builder setAckLatency(Stats value); + + abstract Builder setNumberOfAutoExtendedAckDeadlines(long value); + + abstract SubscriberStats build(); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriptionAdminClient.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriptionAdminClient.java new file mode 100644 index 000000000000..26a764dab3bf --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriptionAdminClient.java @@ -0,0 +1,4197 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutures; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.paging.AbstractFixedSizeCollection; +import com.google.api.gax.paging.AbstractPage; +import com.google.api.gax.paging.AbstractPagedListResponse; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.PageContext; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.cloud.pubsub.v1.stub.SubscriberStub; +import com.google.cloud.pubsub.v1.stub.SubscriberStubSettings; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.protobuf.FieldMask; +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.CreateSnapshotRequest; +import com.google.pubsub.v1.DeleteSnapshotRequest; +import com.google.pubsub.v1.DeleteSubscriptionRequest; +import com.google.pubsub.v1.GetSnapshotRequest; +import com.google.pubsub.v1.GetSubscriptionRequest; +import com.google.pubsub.v1.ListSnapshotsRequest; +import com.google.pubsub.v1.ListSnapshotsResponse; +import com.google.pubsub.v1.ListSubscriptionsRequest; +import com.google.pubsub.v1.ListSubscriptionsResponse; +import com.google.pubsub.v1.ModifyAckDeadlineRequest; +import com.google.pubsub.v1.ModifyPushConfigRequest; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.ProjectSnapshotName; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.PullRequest; +import com.google.pubsub.v1.PullResponse; +import com.google.pubsub.v1.PushConfig; +import com.google.pubsub.v1.SeekRequest; +import com.google.pubsub.v1.SeekResponse; +import com.google.pubsub.v1.Snapshot; +import com.google.pubsub.v1.SnapshotName; +import com.google.pubsub.v1.StreamingPullRequest; +import com.google.pubsub.v1.StreamingPullResponse; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.TopicName; +import com.google.pubsub.v1.UpdateSnapshotRequest; +import com.google.pubsub.v1.UpdateSubscriptionRequest; +import java.io.IOException; +import java.util.List; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Service Description: The service that an application uses to manipulate subscriptions and to + * consume messages from a subscription via the `Pull` method or by establishing a bi-directional + * stream using the `StreamingPull` method. + * + *

This class provides the ability to make remote calls to the backing service through method + * calls that map to API methods. Sample code to get started: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ *   SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ *   TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+ *   PushConfig pushConfig = PushConfig.newBuilder().build();
+ *   int ackDeadlineSeconds = 2135351438;
+ *   Subscription response =
+ *       subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+ * }
+ * }
+ * + *

Note: close() needs to be called on the SubscriptionAdminClient object to clean up resources + * such as threads. In the example above, try-with-resources is used, which automatically calls + * close(). + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Methods
MethodDescriptionMethod Variants

CreateSubscription

Creates a subscription to a given topic. See the [resource name rules] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns `NOT_FOUND`. + *

If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic, conforming to the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is populated in the returned Subscription object. Note that for REST API requests, you must specify a name in the request.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • createSubscription(Subscription request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • createSubscription(SubscriptionName name, TopicName topic, PushConfig pushConfig, int ackDeadlineSeconds) + *

  • createSubscription(SubscriptionName name, String topic, PushConfig pushConfig, int ackDeadlineSeconds) + *

  • createSubscription(String name, TopicName topic, PushConfig pushConfig, int ackDeadlineSeconds) + *

  • createSubscription(String name, String topic, PushConfig pushConfig, int ackDeadlineSeconds) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • createSubscriptionCallable() + *

+ *

GetSubscription

Gets the configuration details of a subscription.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • getSubscription(GetSubscriptionRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • getSubscription(SubscriptionName subscription) + *

  • getSubscription(String subscription) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • getSubscriptionCallable() + *

+ *

UpdateSubscription

Updates an existing subscription by updating the fields specified in the update mask. Note that certain properties of a subscription, such as its topic, are not modifiable.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • updateSubscription(UpdateSubscriptionRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • updateSubscription(Subscription subscription, FieldMask updateMask) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • updateSubscriptionCallable() + *

+ *

ListSubscriptions

Lists matching subscriptions.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • listSubscriptions(ListSubscriptionsRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • listSubscriptions(ProjectName project) + *

  • listSubscriptions(String project) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • listSubscriptionsPagedCallable() + *

  • listSubscriptionsCallable() + *

+ *

DeleteSubscription

Deletes an existing subscription. All messages retained in the subscription are immediately dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is deleted, a new one may be created with the same name, but the new one has no association with the old subscription or its topic unless the same topic is specified.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • deleteSubscription(DeleteSubscriptionRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • deleteSubscription(SubscriptionName subscription) + *

  • deleteSubscription(String subscription) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • deleteSubscriptionCallable() + *

+ *

ModifyAckDeadline

Modifies the ack deadline for a specific message. This method is useful to indicate that more time is needed to process a message by the subscriber, or to make the message available for redelivery if the processing was interrupted. Note that this does not modify the subscription-level `ackDeadlineSeconds` used for subsequent messages.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • modifyAckDeadline(ModifyAckDeadlineRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • modifyAckDeadline(SubscriptionName subscription, List<String> ackIds, int ackDeadlineSeconds) + *

  • modifyAckDeadline(String subscription, List<String> ackIds, int ackDeadlineSeconds) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • modifyAckDeadlineCallable() + *

+ *

Acknowledge

Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages from the subscription. + *

Acknowledging a message whose ack deadline has expired may succeed, but such a message may be redelivered later. Acknowledging a message more than once will not result in an error.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • acknowledge(AcknowledgeRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • acknowledge(SubscriptionName subscription, List<String> ackIds) + *

  • acknowledge(String subscription, List<String> ackIds) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • acknowledgeCallable() + *

+ *

Pull

Pulls messages from the server.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • pull(PullRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • pull(SubscriptionName subscription, int maxMessages) + *

  • pull(String subscription, int maxMessages) + *

  • pull(SubscriptionName subscription, boolean returnImmediately, int maxMessages) + *

  • pull(String subscription, boolean returnImmediately, int maxMessages) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • pullCallable() + *

+ *

StreamingPull

Establishes a stream with the server, which sends messages down to the client. The client streams acknowledgments and ack deadline modifications back to the server. The server will close the stream and return the status on any error. The server may close the stream with status `UNAVAILABLE` to reassign server-side resources, in which case, the client should re-establish the stream. Flow control can be achieved by configuring the underlying RPC channel.

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • streamingPullCallable() + *

+ *

ModifyPushConfig

Modifies the `PushConfig` for a specified subscription. + *

This may be used to change a push subscription to a pull one (signified by an empty `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push subscription. Messages will accumulate for delivery continuously through the call regardless of changes to the `PushConfig`.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • modifyPushConfig(ModifyPushConfigRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • modifyPushConfig(SubscriptionName subscription, PushConfig pushConfig) + *

  • modifyPushConfig(String subscription, PushConfig pushConfig) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • modifyPushConfigCallable() + *

+ *

GetSnapshot

Gets the configuration details of a snapshot. Snapshots are used in [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in an existing subscription to the state captured by a snapshot.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • getSnapshot(GetSnapshotRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • getSnapshot(SnapshotName snapshot) + *

  • getSnapshot(String snapshot) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • getSnapshotCallable() + *

+ *

ListSnapshots

Lists the existing snapshots. Snapshots are used in [Seek]( https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in an existing subscription to the state captured by a snapshot.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • listSnapshots(ListSnapshotsRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • listSnapshots(ProjectName project) + *

  • listSnapshots(String project) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • listSnapshotsPagedCallable() + *

  • listSnapshotsCallable() + *

+ *

CreateSnapshot

Creates a snapshot from the requested subscription. Snapshots are used in [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in an existing subscription to the state captured by a snapshot. If the snapshot already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the `Snapshot.expire_time` field. If the name is not provided in the request, the server will assign a random name for this snapshot on the same project as the subscription, conforming to the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is populated in the returned Snapshot object. Note that for REST API requests, you must specify a name in the request.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • createSnapshot(CreateSnapshotRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • createSnapshot(SnapshotName name, SubscriptionName subscription) + *

  • createSnapshot(SnapshotName name, String subscription) + *

  • createSnapshot(String name, SubscriptionName subscription) + *

  • createSnapshot(String name, String subscription) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • createSnapshotCallable() + *

+ *

UpdateSnapshot

Updates an existing snapshot by updating the fields specified in the update mask. Snapshots are used in [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in an existing subscription to the state captured by a snapshot.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • updateSnapshot(UpdateSnapshotRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • updateSnapshot(Snapshot snapshot, FieldMask updateMask) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • updateSnapshotCallable() + *

+ *

DeleteSnapshot

Removes an existing snapshot. Snapshots are used in [Seek] (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in an existing subscription to the state captured by a snapshot. When the snapshot is deleted, all messages retained in the snapshot are immediately dropped. After a snapshot is deleted, a new one may be created with the same name, but the new one has no association with the old snapshot or its subscription, unless the same subscription is specified.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • deleteSnapshot(DeleteSnapshotRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • deleteSnapshot(SnapshotName snapshot) + *

  • deleteSnapshot(String snapshot) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • deleteSnapshotCallable() + *

+ *

Seek

Seeks an existing subscription to a point in time or to a given snapshot, whichever is provided in the request. Snapshots are used in [Seek] (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in an existing subscription to the state captured by a snapshot. Note that both the subscription and the snapshot must be on the same topic.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • seek(SeekRequest request) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • seekCallable() + *

+ *

SetIamPolicy

Sets the access control policy on the specified resource. Replacesany existing policy. + *

Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • setIamPolicy(SetIamPolicyRequest request) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • setIamPolicyCallable() + *

+ *

GetIamPolicy

Gets the access control policy for a resource. Returns an empty policyif the resource exists and does not have a policy set.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • getIamPolicy(GetIamPolicyRequest request) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • getIamPolicyCallable() + *

+ *

TestIamPermissions

Returns permissions that a caller has on the specified resource. If theresource does not exist, this will return an empty set ofpermissions, not a `NOT_FOUND` error. + *

Note: This operation is designed to be used for buildingpermission-aware UIs and command-line tools, not for authorizationchecking. This operation may "fail open" without warning.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • testIamPermissions(TestIamPermissionsRequest request) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • testIamPermissionsCallable() + *

+ *
+ * + *

See the individual methods for example code. + * + *

Many parameters require resource names to be formatted in a particular way. To assist with + * these names, this class includes a format method for each type of name, and additionally a parse + * method to extract the individual identifiers contained within names that are returned. + * + *

This class can be customized by passing in a custom instance of SubscriptionAdminSettings to + * create(). For example: + * + *

To customize credentials: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SubscriptionAdminSettings subscriptionAdminSettings =
+ *     SubscriptionAdminSettings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))
+ *         .build();
+ * SubscriptionAdminClient subscriptionAdminClient =
+ *     SubscriptionAdminClient.create(subscriptionAdminSettings);
+ * }
+ * + *

To customize the endpoint: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SubscriptionAdminSettings subscriptionAdminSettings =
+ *     SubscriptionAdminSettings.newBuilder().setEndpoint(myEndpoint).build();
+ * SubscriptionAdminClient subscriptionAdminClient =
+ *     SubscriptionAdminClient.create(subscriptionAdminSettings);
+ * }
+ * + *

To use REST (HTTP1.1/JSON) transport (instead of gRPC) for sending and receiving requests over + * the wire: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SubscriptionAdminSettings subscriptionAdminSettings =
+ *     SubscriptionAdminSettings.newHttpJsonBuilder().build();
+ * SubscriptionAdminClient subscriptionAdminClient =
+ *     SubscriptionAdminClient.create(subscriptionAdminSettings);
+ * }
+ * + *

Please refer to the GitHub repository's samples for more quickstart code snippets. + */ +@Generated("by gapic-generator-java") +public class SubscriptionAdminClient implements BackgroundResource { + private final SubscriptionAdminSettings settings; + private final SubscriberStub stub; + + /** Constructs an instance of SubscriptionAdminClient with default settings. */ + public static final SubscriptionAdminClient create() throws IOException { + return create(SubscriptionAdminSettings.newBuilder().build()); + } + + /** + * Constructs an instance of SubscriptionAdminClient, using the given settings. The channels are + * created based on the settings passed in, or defaults for any settings that are not set. + */ + public static final SubscriptionAdminClient create(SubscriptionAdminSettings settings) + throws IOException { + return new SubscriptionAdminClient(settings); + } + + /** + * Constructs an instance of SubscriptionAdminClient, using the given stub for making calls. This + * is for advanced usage - prefer using create(SubscriptionAdminSettings). + */ + public static final SubscriptionAdminClient create(SubscriberStub stub) { + return new SubscriptionAdminClient(stub); + } + + /** + * Constructs an instance of SubscriptionAdminClient, using the given settings. This is protected + * so that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected SubscriptionAdminClient(SubscriptionAdminSettings settings) throws IOException { + this.settings = settings; + this.stub = ((SubscriberStubSettings) settings.getStubSettings()).createStub(); + } + + protected SubscriptionAdminClient(SubscriberStub stub) { + this.settings = null; + this.stub = stub; + } + + public final SubscriptionAdminSettings getSettings() { + return settings; + } + + public SubscriberStub getStub() { + return stub; + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a subscription to a given topic. See the [resource name rules] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription + * already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns + * `NOT_FOUND`. + * + *

If the name is not provided in the request, the server will assign a random name for this + * subscription on the same project as the topic, conforming to the [resource name format] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is + * populated in the returned Subscription object. Note that for REST API requests, you must + * specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+   *   PushConfig pushConfig = PushConfig.newBuilder().build();
+   *   int ackDeadlineSeconds = 2135351438;
+   *   Subscription response =
+   *       subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+   * }
+   * }
+ * + * @param name Required. Identifier. The name of the subscription. It must have the format + * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a + * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores + * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3 + * and 255 characters in length, and it must not start with `"goog"`. + * @param topic Required. The name of the topic from which this subscription is receiving + * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be + * `_deleted-topic_` if the topic has been deleted. + * @param pushConfig Optional. If push delivery is used with this subscription, this field is used + * to configure it. + * @param ackDeadlineSeconds Optional. The approximate amount of time (on a best-effort basis) + * Pub/Sub waits for the subscriber to acknowledge receipt before resending the message. In + * the interval after the message is delivered and before it is acknowledged, it is considered + * to be _outstanding_. During that time period, the message will not be redelivered (on a + * best-effort basis). + *

For pull subscriptions, this value is used as the initial value for the ack deadline. To + * override this value for a given message, call `ModifyAckDeadline` with the corresponding + * `ack_id` if using non-streaming pull or send the `ack_id` in a + * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline + * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds + * (10 minutes). If this parameter is 0, a default value of 10 seconds is used. + *

For push delivery, this value is also used to set the request timeout for the call to + * the push endpoint. + *

If the subscriber never acknowledges the message, the Pub/Sub system will eventually + * redeliver the message. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Subscription createSubscription( + SubscriptionName name, TopicName topic, PushConfig pushConfig, int ackDeadlineSeconds) { + Subscription request = + Subscription.newBuilder() + .setName(name == null ? null : name.toString()) + .setTopic(topic == null ? null : topic.toString()) + .setPushConfig(pushConfig) + .setAckDeadlineSeconds(ackDeadlineSeconds) + .build(); + return createSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a subscription to a given topic. See the [resource name rules] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription + * already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns + * `NOT_FOUND`. + * + *

If the name is not provided in the request, the server will assign a random name for this + * subscription on the same project as the topic, conforming to the [resource name format] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is + * populated in the returned Subscription object. Note that for REST API requests, you must + * specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   String topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString();
+   *   PushConfig pushConfig = PushConfig.newBuilder().build();
+   *   int ackDeadlineSeconds = 2135351438;
+   *   Subscription response =
+   *       subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+   * }
+   * }
+ * + * @param name Required. Identifier. The name of the subscription. It must have the format + * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a + * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores + * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3 + * and 255 characters in length, and it must not start with `"goog"`. + * @param topic Required. The name of the topic from which this subscription is receiving + * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be + * `_deleted-topic_` if the topic has been deleted. + * @param pushConfig Optional. If push delivery is used with this subscription, this field is used + * to configure it. + * @param ackDeadlineSeconds Optional. The approximate amount of time (on a best-effort basis) + * Pub/Sub waits for the subscriber to acknowledge receipt before resending the message. In + * the interval after the message is delivered and before it is acknowledged, it is considered + * to be _outstanding_. During that time period, the message will not be redelivered (on a + * best-effort basis). + *

For pull subscriptions, this value is used as the initial value for the ack deadline. To + * override this value for a given message, call `ModifyAckDeadline` with the corresponding + * `ack_id` if using non-streaming pull or send the `ack_id` in a + * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline + * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds + * (10 minutes). If this parameter is 0, a default value of 10 seconds is used. + *

For push delivery, this value is also used to set the request timeout for the call to + * the push endpoint. + *

If the subscriber never acknowledges the message, the Pub/Sub system will eventually + * redeliver the message. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Subscription createSubscription( + SubscriptionName name, String topic, PushConfig pushConfig, int ackDeadlineSeconds) { + Subscription request = + Subscription.newBuilder() + .setName(name == null ? null : name.toString()) + .setTopic(topic) + .setPushConfig(pushConfig) + .setAckDeadlineSeconds(ackDeadlineSeconds) + .build(); + return createSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a subscription to a given topic. See the [resource name rules] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription + * already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns + * `NOT_FOUND`. + * + *

If the name is not provided in the request, the server will assign a random name for this + * subscription on the same project as the topic, conforming to the [resource name format] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is + * populated in the returned Subscription object. Note that for REST API requests, you must + * specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+   *   TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+   *   PushConfig pushConfig = PushConfig.newBuilder().build();
+   *   int ackDeadlineSeconds = 2135351438;
+   *   Subscription response =
+   *       subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+   * }
+   * }
+ * + * @param name Required. Identifier. The name of the subscription. It must have the format + * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a + * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores + * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3 + * and 255 characters in length, and it must not start with `"goog"`. + * @param topic Required. The name of the topic from which this subscription is receiving + * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be + * `_deleted-topic_` if the topic has been deleted. + * @param pushConfig Optional. If push delivery is used with this subscription, this field is used + * to configure it. + * @param ackDeadlineSeconds Optional. The approximate amount of time (on a best-effort basis) + * Pub/Sub waits for the subscriber to acknowledge receipt before resending the message. In + * the interval after the message is delivered and before it is acknowledged, it is considered + * to be _outstanding_. During that time period, the message will not be redelivered (on a + * best-effort basis). + *

For pull subscriptions, this value is used as the initial value for the ack deadline. To + * override this value for a given message, call `ModifyAckDeadline` with the corresponding + * `ack_id` if using non-streaming pull or send the `ack_id` in a + * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline + * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds + * (10 minutes). If this parameter is 0, a default value of 10 seconds is used. + *

For push delivery, this value is also used to set the request timeout for the call to + * the push endpoint. + *

If the subscriber never acknowledges the message, the Pub/Sub system will eventually + * redeliver the message. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Subscription createSubscription( + String name, TopicName topic, PushConfig pushConfig, int ackDeadlineSeconds) { + Subscription request = + Subscription.newBuilder() + .setName(name) + .setTopic(topic == null ? null : topic.toString()) + .setPushConfig(pushConfig) + .setAckDeadlineSeconds(ackDeadlineSeconds) + .build(); + return createSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a subscription to a given topic. See the [resource name rules] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription + * already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns + * `NOT_FOUND`. + * + *

If the name is not provided in the request, the server will assign a random name for this + * subscription on the same project as the topic, conforming to the [resource name format] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is + * populated in the returned Subscription object. Note that for REST API requests, you must + * specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+   *   String topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString();
+   *   PushConfig pushConfig = PushConfig.newBuilder().build();
+   *   int ackDeadlineSeconds = 2135351438;
+   *   Subscription response =
+   *       subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+   * }
+   * }
+ * + * @param name Required. Identifier. The name of the subscription. It must have the format + * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a + * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores + * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3 + * and 255 characters in length, and it must not start with `"goog"`. + * @param topic Required. The name of the topic from which this subscription is receiving + * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be + * `_deleted-topic_` if the topic has been deleted. + * @param pushConfig Optional. If push delivery is used with this subscription, this field is used + * to configure it. + * @param ackDeadlineSeconds Optional. The approximate amount of time (on a best-effort basis) + * Pub/Sub waits for the subscriber to acknowledge receipt before resending the message. In + * the interval after the message is delivered and before it is acknowledged, it is considered + * to be _outstanding_. During that time period, the message will not be redelivered (on a + * best-effort basis). + *

For pull subscriptions, this value is used as the initial value for the ack deadline. To + * override this value for a given message, call `ModifyAckDeadline` with the corresponding + * `ack_id` if using non-streaming pull or send the `ack_id` in a + * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline + * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds + * (10 minutes). If this parameter is 0, a default value of 10 seconds is used. + *

For push delivery, this value is also used to set the request timeout for the call to + * the push endpoint. + *

If the subscriber never acknowledges the message, the Pub/Sub system will eventually + * redeliver the message. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Subscription createSubscription( + String name, String topic, PushConfig pushConfig, int ackDeadlineSeconds) { + Subscription request = + Subscription.newBuilder() + .setName(name) + .setTopic(topic) + .setPushConfig(pushConfig) + .setAckDeadlineSeconds(ackDeadlineSeconds) + .build(); + return createSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a subscription to a given topic. See the [resource name rules] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription + * already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns + * `NOT_FOUND`. + * + *

If the name is not provided in the request, the server will assign a random name for this + * subscription on the same project as the topic, conforming to the [resource name format] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is + * populated in the returned Subscription object. Note that for REST API requests, you must + * specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   Subscription request =
+   *       Subscription.newBuilder()
+   *           .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .setPushConfig(PushConfig.newBuilder().build())
+   *           .setBigqueryConfig(BigQueryConfig.newBuilder().build())
+   *           .setCloudStorageConfig(CloudStorageConfig.newBuilder().build())
+   *           .setBigtableConfig(BigtableConfig.newBuilder().build())
+   *           .setAckDeadlineSeconds(2135351438)
+   *           .setRetainAckedMessages(true)
+   *           .setMessageRetentionDuration(Duration.newBuilder().build())
+   *           .putAllLabels(new HashMap())
+   *           .setEnableMessageOrdering(true)
+   *           .setExpirationPolicy(ExpirationPolicy.newBuilder().build())
+   *           .setFilter("filter-1274492040")
+   *           .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build())
+   *           .setRetryPolicy(RetryPolicy.newBuilder().build())
+   *           .setDetached(true)
+   *           .setEnableExactlyOnceDelivery(true)
+   *           .setTopicMessageRetentionDuration(Duration.newBuilder().build())
+   *           .setAnalyticsHubSubscriptionInfo(
+   *               Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build())
+   *           .addAllMessageTransforms(new ArrayList())
+   *           .putAllTags(new HashMap())
+   *           .build();
+   *   Subscription response = subscriptionAdminClient.createSubscription(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Subscription createSubscription(Subscription request) { + return createSubscriptionCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Creates a subscription to a given topic. See the <a + * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name + * rules</a>. If the subscription already exists, returns `ALREADY_EXISTS`. If the + * corresponding topic doesn't exist, returns `NOT_FOUND`. + * + *

If the name is not provided in the request, the server will assign a random name for this + * subscription on the same project as the topic, conforming to the [resource name + * format](https://cloud.google.com/pubsub/docs/admin#resource_names). The generated name is + * populated in the returned Subscription object. Note that for REST API requests, you must + * specify a name in the request. + * + *

Sample code: + * + *


+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSubscriptionName name = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   ProjectTopicName topic = ProjectTopicName.of("[PROJECT]", "[TOPIC]");
+   *   PushConfig pushConfig = PushConfig.newBuilder().build();
+   *   int ackDeadlineSeconds = 0;
+   *   Subscription response = subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+   * }
+   * 
+ * + * @param name Required. The name of the subscription. It must have the format + * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a + * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores + * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3 + * and 255 characters in length, and it must not start with `"goog"`. + * @param topic Required. The name of the topic from which this subscription is receiving + * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be + * `_deleted-topic_` if the topic has been deleted. + * @param pushConfig If push delivery is used with this subscription, this field is used to + * configure it. An empty `pushConfig` signifies that the subscriber will pull and ack + * messages using API methods. + * @param ackDeadlineSeconds The approximate amount of time (on a best-effort basis) Pub/Sub waits + * for the subscriber to acknowledge receipt before resending the message. In the interval + * after the message is delivered and before it is acknowledged, it is considered to be + * <i>outstanding</i>. During that time period, the message will not be + * redelivered (on a best-effort basis). + *

For pull subscriptions, this value is used as the initial value for the ack deadline. To + * override this value for a given message, call `ModifyAckDeadline` with the corresponding + * `ack_id` if using non-streaming pull or send the `ack_id` in a + * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline + * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds + * (10 minutes). If this parameter is 0, a default value of 10 seconds is used. + *

For push delivery, this value is also used to set the request timeout for the call to + * the push endpoint. + *

If the subscriber never acknowledges the message, the Pub/Sub system will eventually + * redeliver the message. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #createSubscription(SubscriptionName, TopicName, PushConfig, int)} + * instead. + */ + @Deprecated + public final Subscription createSubscription( + ProjectSubscriptionName name, + ProjectTopicName topic, + PushConfig pushConfig, + int ackDeadlineSeconds) { + Subscription request = + Subscription.newBuilder() + .setName(name == null ? null : name.toString()) + .setTopic(topic == null ? null : topic.toString()) + .setPushConfig(pushConfig) + .setAckDeadlineSeconds(ackDeadlineSeconds) + .build(); + return createSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a subscription to a given topic. See the [resource name rules] + * (https://cloud.google.com/pubsub/docs/admin#resource_names). If the subscription already + * exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns + * `NOT_FOUND`. + * + *

If the name is not provided in the request, the server will assign a random name for this + * subscription on the same project as the topic, conforming to the [resource name format] + * (https://cloud.google.com/pubsub/docs/admin#resource_names). The generated name is populated in + * the returned Subscription object. Note that for REST API requests, you must specify a name in + * the request. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSubscriptionName name = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   String topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString();
+   *   PushConfig pushConfig = PushConfig.newBuilder().build();
+   *   int ackDeadlineSeconds = 2135351438;
+   *   Subscription response =
+   *       subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+   * }
+   * }
+ * + * @param name Required. The name of the subscription. It must have the format + * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a + * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores + * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3 + * and 255 characters in length, and it must not start with `"goog"`. + * @param topic Required. The name of the topic from which this subscription is receiving + * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be + * `_deleted-topic_` if the topic has been deleted. + * @param pushConfig If push delivery is used with this subscription, this field is used to + * configure it. An empty `pushConfig` signifies that the subscriber will pull and ack + * messages using API methods. + * @param ackDeadlineSeconds The approximate amount of time (on a best-effort basis) Pub/Sub waits + * for the subscriber to acknowledge receipt before resending the message. In the interval + * after the message is delivered and before it is acknowledged, it is considered to be + * <i>outstanding</i>. During that time period, the message will not be + * redelivered (on a best-effort basis). + *

For pull subscriptions, this value is used as the initial value for the ack deadline. To + * override this value for a given message, call `ModifyAckDeadline` with the corresponding + * `ack_id` if using non-streaming pull or send the `ack_id` in a + * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline + * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds + * (10 minutes). If this parameter is 0, a default value of 10 seconds is used. + *

For push delivery, this value is also used to set the request timeout for the call to + * the push endpoint. + *

If the subscriber never acknowledges the message, the Pub/Sub system will eventually + * redeliver the message. + * @deprecated Use {@link #createSubscription(SubscriptionName, String, PushConfig, int)} instead. + */ + @Deprecated + public final Subscription createSubscription( + ProjectSubscriptionName name, String topic, PushConfig pushConfig, int ackDeadlineSeconds) { + Subscription request = + Subscription.newBuilder() + .setName(name == null ? null : name.toString()) + .setTopic(topic) + .setPushConfig(pushConfig) + .setAckDeadlineSeconds(ackDeadlineSeconds) + .build(); + return createSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a subscription to a given topic. See the [resource name rules] + * (https://cloud.google.com/pubsub/docs/admin#resource_names). If the subscription already + * exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns + * `NOT_FOUND`. + * + *

If the name is not provided in the request, the server will assign a random name for this + * subscription on the same project as the topic, conforming to the [resource name format] + * (https://cloud.google.com/pubsub/docs/admin#resource_names). The generated name is populated in + * the returned Subscription object. Note that for REST API requests, you must specify a name in + * the request. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSubscriptionName name = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+   *   PushConfig pushConfig = PushConfig.newBuilder().build();
+   *   int ackDeadlineSeconds = 2135351438;
+   *   Subscription response =
+   *       subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+   * }
+   * }
+ * + * @param name Required. The name of the subscription. It must have the format + * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a + * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores + * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3 + * and 255 characters in length, and it must not start with `"goog"`. + * @param topic Required. The name of the topic from which this subscription is receiving + * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be + * `_deleted-topic_` if the topic has been deleted. + * @param pushConfig If push delivery is used with this subscription, this field is used to + * configure it. An empty `pushConfig` signifies that the subscriber will pull and ack + * messages using API methods. + * @param ackDeadlineSeconds The approximate amount of time (on a best-effort basis) Pub/Sub waits + * for the subscriber to acknowledge receipt before resending the message. In the interval + * after the message is delivered and before it is acknowledged, it is considered to be + * <i>outstanding</i>. During that time period, the message will not be + * redelivered (on a best-effort basis). + *

For pull subscriptions, this value is used as the initial value for the ack deadline. To + * override this value for a given message, call `ModifyAckDeadline` with the corresponding + * `ack_id` if using non-streaming pull or send the `ack_id` in a + * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline + * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds + * (10 minutes). If this parameter is 0, a default value of 10 seconds is used. + *

For push delivery, this value is also used to set the request timeout for the call to + * the push endpoint. + *

If the subscriber never acknowledges the message, the Pub/Sub system will eventually + * redeliver the message. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #createSubscription(SubscriptionName, TopicName, PushConfig, int)} + * instead. + */ + @Deprecated + public final Subscription createSubscription( + ProjectSubscriptionName name, + TopicName topic, + PushConfig pushConfig, + int ackDeadlineSeconds) { + Subscription request = + Subscription.newBuilder() + .setName(name == null ? null : name.toString()) + .setTopic(topic == null ? null : topic.toString()) + .setPushConfig(pushConfig) + .setAckDeadlineSeconds(ackDeadlineSeconds) + .build(); + return createSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a subscription to a given topic. See the [resource name rules] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription + * already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns + * `NOT_FOUND`. + * + *

If the name is not provided in the request, the server will assign a random name for this + * subscription on the same project as the topic, conforming to the [resource name format] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is + * populated in the returned Subscription object. Note that for REST API requests, you must + * specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   Subscription request =
+   *       Subscription.newBuilder()
+   *           .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .setPushConfig(PushConfig.newBuilder().build())
+   *           .setBigqueryConfig(BigQueryConfig.newBuilder().build())
+   *           .setCloudStorageConfig(CloudStorageConfig.newBuilder().build())
+   *           .setBigtableConfig(BigtableConfig.newBuilder().build())
+   *           .setAckDeadlineSeconds(2135351438)
+   *           .setRetainAckedMessages(true)
+   *           .setMessageRetentionDuration(Duration.newBuilder().build())
+   *           .putAllLabels(new HashMap())
+   *           .setEnableMessageOrdering(true)
+   *           .setExpirationPolicy(ExpirationPolicy.newBuilder().build())
+   *           .setFilter("filter-1274492040")
+   *           .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build())
+   *           .setRetryPolicy(RetryPolicy.newBuilder().build())
+   *           .setDetached(true)
+   *           .setEnableExactlyOnceDelivery(true)
+   *           .setTopicMessageRetentionDuration(Duration.newBuilder().build())
+   *           .setAnalyticsHubSubscriptionInfo(
+   *               Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build())
+   *           .addAllMessageTransforms(new ArrayList())
+   *           .putAllTags(new HashMap())
+   *           .build();
+   *   ApiFuture future =
+   *       subscriptionAdminClient.createSubscriptionCallable().futureCall(request);
+   *   // Do something.
+   *   Subscription response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable createSubscriptionCallable() { + return stub.createSubscriptionCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration details of a subscription. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   Subscription response = subscriptionAdminClient.getSubscription(subscription);
+   * }
+   * }
+ * + * @param subscription Required. The name of the subscription to get. Format is + * `projects/{project}/subscriptions/{sub}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Subscription getSubscription(SubscriptionName subscription) { + GetSubscriptionRequest request = + GetSubscriptionRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .build(); + return getSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration details of a subscription. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+   *   Subscription response = subscriptionAdminClient.getSubscription(subscription);
+   * }
+   * }
+ * + * @param subscription Required. The name of the subscription to get. Format is + * `projects/{project}/subscriptions/{sub}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Subscription getSubscription(String subscription) { + GetSubscriptionRequest request = + GetSubscriptionRequest.newBuilder().setSubscription(subscription).build(); + return getSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration details of a subscription. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   GetSubscriptionRequest request =
+   *       GetSubscriptionRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .build();
+   *   Subscription response = subscriptionAdminClient.getSubscription(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Subscription getSubscription(GetSubscriptionRequest request) { + return getSubscriptionCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration details of a subscription. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   Subscription response = subscriptionAdminClient.getSubscription(subscription);
+   * }
+   * }
+ * + * @param subscription Required. The name of the subscription to get. Format is + * `projects/{project}/subscriptions/{sub}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #getSubscription(SubscriptionName)} instead. + */ + @Deprecated + public final Subscription getSubscription(ProjectSubscriptionName subscription) { + GetSubscriptionRequest request = + GetSubscriptionRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .build(); + return getSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration details of a subscription. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   GetSubscriptionRequest request =
+   *       GetSubscriptionRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .build();
+   *   ApiFuture future =
+   *       subscriptionAdminClient.getSubscriptionCallable().futureCall(request);
+   *   // Do something.
+   *   Subscription response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable getSubscriptionCallable() { + return stub.getSubscriptionCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Updates an existing subscription by updating the fields specified in the update mask. Note that + * certain properties of a subscription, such as its topic, are not modifiable. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   Subscription subscription = Subscription.newBuilder().build();
+   *   FieldMask updateMask = FieldMask.newBuilder().build();
+   *   Subscription response = subscriptionAdminClient.updateSubscription(subscription, updateMask);
+   * }
+   * }
+ * + * @param subscription Required. The updated subscription object. + * @param updateMask Required. Indicates which fields in the provided subscription to update. Must + * be specified and non-empty. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Subscription updateSubscription(Subscription subscription, FieldMask updateMask) { + UpdateSubscriptionRequest request = + UpdateSubscriptionRequest.newBuilder() + .setSubscription(subscription) + .setUpdateMask(updateMask) + .build(); + return updateSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Updates an existing subscription by updating the fields specified in the update mask. Note that + * certain properties of a subscription, such as its topic, are not modifiable. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   UpdateSubscriptionRequest request =
+   *       UpdateSubscriptionRequest.newBuilder()
+   *           .setSubscription(Subscription.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   Subscription response = subscriptionAdminClient.updateSubscription(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Subscription updateSubscription(UpdateSubscriptionRequest request) { + return updateSubscriptionCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Updates an existing subscription by updating the fields specified in the update mask. Note that + * certain properties of a subscription, such as its topic, are not modifiable. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   UpdateSubscriptionRequest request =
+   *       UpdateSubscriptionRequest.newBuilder()
+   *           .setSubscription(Subscription.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   ApiFuture future =
+   *       subscriptionAdminClient.updateSubscriptionCallable().futureCall(request);
+   *   // Do something.
+   *   Subscription response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable updateSubscriptionCallable() { + return stub.updateSubscriptionCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists matching subscriptions. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectName project = ProjectName.of("[PROJECT]");
+   *   for (Subscription element : subscriptionAdminClient.listSubscriptions(project).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param project Required. The name of the project in which to list subscriptions. Format is + * `projects/{project-id}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListSubscriptionsPagedResponse listSubscriptions(ProjectName project) { + ListSubscriptionsRequest request = + ListSubscriptionsRequest.newBuilder() + .setProject(project == null ? null : project.toString()) + .build(); + return listSubscriptions(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists matching subscriptions. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String project = ProjectName.of("[PROJECT]").toString();
+   *   for (Subscription element : subscriptionAdminClient.listSubscriptions(project).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param project Required. The name of the project in which to list subscriptions. Format is + * `projects/{project-id}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListSubscriptionsPagedResponse listSubscriptions(String project) { + ListSubscriptionsRequest request = + ListSubscriptionsRequest.newBuilder().setProject(project).build(); + return listSubscriptions(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists matching subscriptions. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ListSubscriptionsRequest request =
+   *       ListSubscriptionsRequest.newBuilder()
+   *           .setProject(ProjectName.of("[PROJECT]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   for (Subscription element : subscriptionAdminClient.listSubscriptions(request).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListSubscriptionsPagedResponse listSubscriptions(ListSubscriptionsRequest request) { + return listSubscriptionsPagedCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists matching subscriptions. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ListSubscriptionsRequest request =
+   *       ListSubscriptionsRequest.newBuilder()
+   *           .setProject(ProjectName.of("[PROJECT]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   ApiFuture future =
+   *       subscriptionAdminClient.listSubscriptionsPagedCallable().futureCall(request);
+   *   // Do something.
+   *   for (Subscription element : future.get().iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable + listSubscriptionsPagedCallable() { + return stub.listSubscriptionsPagedCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists matching subscriptions. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ListSubscriptionsRequest request =
+   *       ListSubscriptionsRequest.newBuilder()
+   *           .setProject(ProjectName.of("[PROJECT]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   while (true) {
+   *     ListSubscriptionsResponse response =
+   *         subscriptionAdminClient.listSubscriptionsCallable().call(request);
+   *     for (Subscription element : response.getSubscriptionsList()) {
+   *       // doThingsWith(element);
+   *     }
+   *     String nextPageToken = response.getNextPageToken();
+   *     if (!Strings.isNullOrEmpty(nextPageToken)) {
+   *       request = request.toBuilder().setPageToken(nextPageToken).build();
+   *     } else {
+   *       break;
+   *     }
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable + listSubscriptionsCallable() { + return stub.listSubscriptionsCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes an existing subscription. All messages retained in the subscription are immediately + * dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is + * deleted, a new one may be created with the same name, but the new one has no association with + * the old subscription or its topic unless the same topic is specified. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   subscriptionAdminClient.deleteSubscription(subscription);
+   * }
+   * }
+ * + * @param subscription Required. The subscription to delete. Format is + * `projects/{project}/subscriptions/{sub}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deleteSubscription(SubscriptionName subscription) { + DeleteSubscriptionRequest request = + DeleteSubscriptionRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .build(); + deleteSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes an existing subscription. All messages retained in the subscription are immediately + * dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is + * deleted, a new one may be created with the same name, but the new one has no association with + * the old subscription or its topic unless the same topic is specified. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+   *   subscriptionAdminClient.deleteSubscription(subscription);
+   * }
+   * }
+ * + * @param subscription Required. The subscription to delete. Format is + * `projects/{project}/subscriptions/{sub}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deleteSubscription(String subscription) { + DeleteSubscriptionRequest request = + DeleteSubscriptionRequest.newBuilder().setSubscription(subscription).build(); + deleteSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes an existing subscription. All messages retained in the subscription are immediately + * dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is + * deleted, a new one may be created with the same name, but the new one has no association with + * the old subscription or its topic unless the same topic is specified. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   DeleteSubscriptionRequest request =
+   *       DeleteSubscriptionRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .build();
+   *   subscriptionAdminClient.deleteSubscription(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deleteSubscription(DeleteSubscriptionRequest request) { + deleteSubscriptionCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes an existing subscription. All messages retained in the subscription are immediately + * dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is + * deleted, a new one may be created with the same name, but the new one has no association with + * the old subscription or its topic unless the same topic is specified. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   subscriptionAdminClient.deleteSubscription(subscription);
+   * }
+   * }
+ * + * @param subscription Required. The subscription to delete. Format is + * `projects/{project}/subscriptions/{sub}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #deleteSubscription(SubscriptionName)} instead. + */ + @Deprecated + public final void deleteSubscription(ProjectSubscriptionName subscription) { + DeleteSubscriptionRequest request = + DeleteSubscriptionRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .build(); + deleteSubscription(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes an existing subscription. All messages retained in the subscription are immediately + * dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is + * deleted, a new one may be created with the same name, but the new one has no association with + * the old subscription or its topic unless the same topic is specified. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   DeleteSubscriptionRequest request =
+   *       DeleteSubscriptionRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .build();
+   *   ApiFuture future =
+   *       subscriptionAdminClient.deleteSubscriptionCallable().futureCall(request);
+   *   // Do something.
+   *   future.get();
+   * }
+   * }
+ */ + public final UnaryCallable deleteSubscriptionCallable() { + return stub.deleteSubscriptionCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Modifies the ack deadline for a specific message. This method is useful to indicate that more + * time is needed to process a message by the subscriber, or to make the message available for + * redelivery if the processing was interrupted. Note that this does not modify the + * subscription-level `ackDeadlineSeconds` used for subsequent messages. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   List ackIds = new ArrayList<>();
+   *   int ackDeadlineSeconds = 2135351438;
+   *   subscriptionAdminClient.modifyAckDeadline(subscription, ackIds, ackDeadlineSeconds);
+   * }
+   * }
+ * + * @param subscription Required. The name of the subscription. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param ackIds Required. List of acknowledgment IDs. + * @param ackDeadlineSeconds Required. The new ack deadline with respect to the time this request + * was sent to the Pub/Sub system. For example, if the value is 10, the new ack deadline will + * expire 10 seconds after the `ModifyAckDeadline` call was made. Specifying zero might + * immediately make the message available for delivery to another subscriber client. This + * typically results in an increase in the rate of message redeliveries (that is, duplicates). + * The minimum deadline you can specify is 0 seconds. The maximum deadline you can specify in + * a single request is 600 seconds (10 minutes). + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void modifyAckDeadline( + SubscriptionName subscription, List ackIds, int ackDeadlineSeconds) { + ModifyAckDeadlineRequest request = + ModifyAckDeadlineRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .addAllAckIds(ackIds) + .setAckDeadlineSeconds(ackDeadlineSeconds) + .build(); + modifyAckDeadline(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Modifies the ack deadline for a specific message. This method is useful to indicate that more + * time is needed to process a message by the subscriber, or to make the message available for + * redelivery if the processing was interrupted. Note that this does not modify the + * subscription-level `ackDeadlineSeconds` used for subsequent messages. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+   *   List ackIds = new ArrayList<>();
+   *   int ackDeadlineSeconds = 2135351438;
+   *   subscriptionAdminClient.modifyAckDeadline(subscription, ackIds, ackDeadlineSeconds);
+   * }
+   * }
+ * + * @param subscription Required. The name of the subscription. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param ackIds Required. List of acknowledgment IDs. + * @param ackDeadlineSeconds Required. The new ack deadline with respect to the time this request + * was sent to the Pub/Sub system. For example, if the value is 10, the new ack deadline will + * expire 10 seconds after the `ModifyAckDeadline` call was made. Specifying zero might + * immediately make the message available for delivery to another subscriber client. This + * typically results in an increase in the rate of message redeliveries (that is, duplicates). + * The minimum deadline you can specify is 0 seconds. The maximum deadline you can specify in + * a single request is 600 seconds (10 minutes). + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void modifyAckDeadline( + String subscription, List ackIds, int ackDeadlineSeconds) { + ModifyAckDeadlineRequest request = + ModifyAckDeadlineRequest.newBuilder() + .setSubscription(subscription) + .addAllAckIds(ackIds) + .setAckDeadlineSeconds(ackDeadlineSeconds) + .build(); + modifyAckDeadline(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Modifies the ack deadline for a specific message. This method is useful to indicate that more + * time is needed to process a message by the subscriber, or to make the message available for + * redelivery if the processing was interrupted. Note that this does not modify the + * subscription-level `ackDeadlineSeconds` used for subsequent messages. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ModifyAckDeadlineRequest request =
+   *       ModifyAckDeadlineRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .addAllAckIds(new ArrayList())
+   *           .setAckDeadlineSeconds(2135351438)
+   *           .build();
+   *   subscriptionAdminClient.modifyAckDeadline(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void modifyAckDeadline(ModifyAckDeadlineRequest request) { + modifyAckDeadlineCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Modifies the ack deadline for a specific message. This method is useful to indicate that more + * time is needed to process a message by the subscriber, or to make the message available for + * redelivery if the processing was interrupted. Note that this does not modify the + * subscription-level `ackDeadlineSeconds` used for subsequent messages. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   List ackIds = new ArrayList<>();
+   *   int ackDeadlineSeconds = 2135351438;
+   *   subscriptionAdminClient.modifyAckDeadline(subscription, ackIds, ackDeadlineSeconds);
+   * }
+   * }
+ * + * @param subscription Required. The name of the subscription. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param ackIds Required. List of acknowledgment IDs. + * @param ackDeadlineSeconds Required. The new ack deadline with respect to the time this request + * was sent to the Pub/Sub system. For example, if the value is 10, the new ack deadline will + * expire 10 seconds after the `ModifyAckDeadline` call was made. Specifying zero might + * immediately make the message available for delivery to another subscriber client. This + * typically results in an increase in the rate of message redeliveries (that is, duplicates). + * The minimum deadline you can specify is 0 seconds. The maximum deadline you can specify is + * 600 seconds (10 minutes). + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #modifyAckDeadline(SubscriptionName, List, int)} instead. + */ + @Deprecated + final void modifyAckDeadline( + ProjectSubscriptionName subscription, List ackIds, int ackDeadlineSeconds) { + ModifyAckDeadlineRequest request = + ModifyAckDeadlineRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .addAllAckIds(ackIds) + .setAckDeadlineSeconds(ackDeadlineSeconds) + .build(); + modifyAckDeadline(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Modifies the ack deadline for a specific message. This method is useful to indicate that more + * time is needed to process a message by the subscriber, or to make the message available for + * redelivery if the processing was interrupted. Note that this does not modify the + * subscription-level `ackDeadlineSeconds` used for subsequent messages. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ModifyAckDeadlineRequest request =
+   *       ModifyAckDeadlineRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .addAllAckIds(new ArrayList())
+   *           .setAckDeadlineSeconds(2135351438)
+   *           .build();
+   *   ApiFuture future =
+   *       subscriptionAdminClient.modifyAckDeadlineCallable().futureCall(request);
+   *   // Do something.
+   *   future.get();
+   * }
+   * }
+ */ + public final UnaryCallable modifyAckDeadlineCallable() { + return stub.modifyAckDeadlineCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The + * Pub/Sub system can remove the relevant messages from the subscription. + * + *

Acknowledging a message whose ack deadline has expired may succeed, but such a message may + * be redelivered later. Acknowledging a message more than once will not result in an error. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   List ackIds = new ArrayList<>();
+   *   subscriptionAdminClient.acknowledge(subscription, ackIds);
+   * }
+   * }
+ * + * @param subscription Required. The subscription whose message is being acknowledged. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param ackIds Required. The acknowledgment ID for the messages being acknowledged that was + * returned by the Pub/Sub system in the `Pull` response. Must not be empty. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void acknowledge(SubscriptionName subscription, List ackIds) { + AcknowledgeRequest request = + AcknowledgeRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .addAllAckIds(ackIds) + .build(); + acknowledge(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The + * Pub/Sub system can remove the relevant messages from the subscription. + * + *

Acknowledging a message whose ack deadline has expired may succeed, but such a message may + * be redelivered later. Acknowledging a message more than once will not result in an error. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+   *   List ackIds = new ArrayList<>();
+   *   subscriptionAdminClient.acknowledge(subscription, ackIds);
+   * }
+   * }
+ * + * @param subscription Required. The subscription whose message is being acknowledged. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param ackIds Required. The acknowledgment ID for the messages being acknowledged that was + * returned by the Pub/Sub system in the `Pull` response. Must not be empty. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void acknowledge(String subscription, List ackIds) { + AcknowledgeRequest request = + AcknowledgeRequest.newBuilder().setSubscription(subscription).addAllAckIds(ackIds).build(); + acknowledge(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The + * Pub/Sub system can remove the relevant messages from the subscription. + * + *

Acknowledging a message whose ack deadline has expired may succeed, but such a message may + * be redelivered later. Acknowledging a message more than once will not result in an error. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   AcknowledgeRequest request =
+   *       AcknowledgeRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .addAllAckIds(new ArrayList())
+   *           .build();
+   *   subscriptionAdminClient.acknowledge(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void acknowledge(AcknowledgeRequest request) { + acknowledgeCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The + * Pub/Sub system can remove the relevant messages from the subscription. + * + *

Acknowledging a message whose ack deadline has expired may succeed, but such a message may + * be redelivered later. Acknowledging a message more than once will not result in an error. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   List ackIds = new ArrayList<>();
+   *   subscriptionAdminClient.acknowledge(subscription, ackIds);
+   * }
+   * }
+ * + * @param subscription Required. The subscription whose message is being acknowledged. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param ackIds Required. The acknowledgment ID for the messages being acknowledged that was + * returned by the Pub/Sub system in the `Pull` response. Must not be empty. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #acknowledge(SubscriptionName, List)} instead. + */ + @Deprecated + public final void acknowledge(ProjectSubscriptionName subscription, List ackIds) { + AcknowledgeRequest request = + AcknowledgeRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .addAllAckIds(ackIds) + .build(); + acknowledge(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The + * Pub/Sub system can remove the relevant messages from the subscription. + * + *

Acknowledging a message whose ack deadline has expired may succeed, but such a message may + * be redelivered later. Acknowledging a message more than once will not result in an error. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   AcknowledgeRequest request =
+   *       AcknowledgeRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .addAllAckIds(new ArrayList())
+   *           .build();
+   *   ApiFuture future = subscriptionAdminClient.acknowledgeCallable().futureCall(request);
+   *   // Do something.
+   *   future.get();
+   * }
+   * }
+ */ + public final UnaryCallable acknowledgeCallable() { + return stub.acknowledgeCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Pulls messages from the server. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   int maxMessages = 496131527;
+   *   PullResponse response = subscriptionAdminClient.pull(subscription, maxMessages);
+   * }
+   * }
+ * + * @param subscription Required. The subscription from which messages should be pulled. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param maxMessages Required. The maximum number of messages to return for this request. Must be + * a positive integer. The Pub/Sub system may return fewer than the number specified. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PullResponse pull(SubscriptionName subscription, int maxMessages) { + PullRequest request = + PullRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .setMaxMessages(maxMessages) + .build(); + return pull(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Pulls messages from the server. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+   *   int maxMessages = 496131527;
+   *   PullResponse response = subscriptionAdminClient.pull(subscription, maxMessages);
+   * }
+   * }
+ * + * @param subscription Required. The subscription from which messages should be pulled. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param maxMessages Required. The maximum number of messages to return for this request. Must be + * a positive integer. The Pub/Sub system may return fewer than the number specified. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PullResponse pull(String subscription, int maxMessages) { + PullRequest request = + PullRequest.newBuilder().setSubscription(subscription).setMaxMessages(maxMessages).build(); + return pull(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Pulls messages from the server. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   boolean returnImmediately = true;
+   *   int maxMessages = 496131527;
+   *   PullResponse response =
+   *       subscriptionAdminClient.pull(subscription, returnImmediately, maxMessages);
+   * }
+   * }
+ * + * @param subscription Required. The subscription from which messages should be pulled. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param returnImmediately Optional. If this field set to true, the system will respond + * immediately even if it there are no messages available to return in the `Pull` response. + * Otherwise, the system may wait (for a bounded amount of time) until at least one message is + * available, rather than returning no messages. Warning: setting this field to `true` is + * discouraged because it adversely impacts the performance of `Pull` operations. We recommend + * that users do not set this field. + * @param maxMessages Required. The maximum number of messages to return for this request. Must be + * a positive integer. The Pub/Sub system may return fewer than the number specified. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PullResponse pull( + SubscriptionName subscription, boolean returnImmediately, int maxMessages) { + PullRequest request = + PullRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .setReturnImmediately(returnImmediately) + .setMaxMessages(maxMessages) + .build(); + return pull(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Pulls messages from the server. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+   *   boolean returnImmediately = true;
+   *   int maxMessages = 496131527;
+   *   PullResponse response =
+   *       subscriptionAdminClient.pull(subscription, returnImmediately, maxMessages);
+   * }
+   * }
+ * + * @param subscription Required. The subscription from which messages should be pulled. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param returnImmediately Optional. If this field set to true, the system will respond + * immediately even if it there are no messages available to return in the `Pull` response. + * Otherwise, the system may wait (for a bounded amount of time) until at least one message is + * available, rather than returning no messages. Warning: setting this field to `true` is + * discouraged because it adversely impacts the performance of `Pull` operations. We recommend + * that users do not set this field. + * @param maxMessages Required. The maximum number of messages to return for this request. Must be + * a positive integer. The Pub/Sub system may return fewer than the number specified. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PullResponse pull(String subscription, boolean returnImmediately, int maxMessages) { + PullRequest request = + PullRequest.newBuilder() + .setSubscription(subscription) + .setReturnImmediately(returnImmediately) + .setMaxMessages(maxMessages) + .build(); + return pull(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Pulls messages from the server. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   PullRequest request =
+   *       PullRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .setReturnImmediately(true)
+   *           .setMaxMessages(496131527)
+   *           .build();
+   *   PullResponse response = subscriptionAdminClient.pull(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PullResponse pull(PullRequest request) { + return pullCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Pulls messages from the server. The server may return `UNAVAILABLE` if there are too many + * concurrent pull requests pending for the given subscription. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   int maxMessages = 496131527;
+   *   PullResponse response = subscriptionAdminClient.pull(subscription, maxMessages);
+   * }
+   * }
+ * + * @param subscription Required. The subscription from which messages should be pulled. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param maxMessages Required. The maximum number of messages to return for this request. Must be + * a positive integer. The Pub/Sub system may return fewer than the number specified. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #pull(SubscriptionName, int)} instead. + */ + @Deprecated + public final PullResponse pull(ProjectSubscriptionName subscription, int maxMessages) { + PullRequest request = + PullRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .setMaxMessages(maxMessages) + .build(); + return pull(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Pulls messages from the server. The server may return `UNAVAILABLE` if there are too many + * concurrent pull requests pending for the given subscription. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   boolean returnImmediately = true;
+   *   int maxMessages = 496131527;
+   *   PullResponse response =
+   *       subscriptionAdminClient.pull(subscription, returnImmediately, maxMessages);
+   * }
+   * }
+ * + * @param subscription Required. The subscription from which messages should be pulled. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param returnImmediately Optional. If this field set to true, the system will respond + * immediately even if it there are no messages available to return in the `Pull` response. + * Otherwise, the system may wait (for a bounded amount of time) until at least one message is + * available, rather than returning no messages. Warning: setting this field to `true` is + * discouraged because it adversely impacts the performance of `Pull` operations. We recommend + * that users do not set this field. + * @param maxMessages Required. The maximum number of messages to return for this request. Must be + * a positive integer. The Pub/Sub system may return fewer than the number specified. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #pull(SubscriptionName, boolean, int)} instead. + */ + @Deprecated + final PullResponse pull( + ProjectSubscriptionName subscription, boolean returnImmediately, int maxMessages) { + PullRequest request = + PullRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .setReturnImmediately(returnImmediately) + .setMaxMessages(maxMessages) + .build(); + return pull(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Pulls messages from the server. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   PullRequest request =
+   *       PullRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .setReturnImmediately(true)
+   *           .setMaxMessages(496131527)
+   *           .build();
+   *   ApiFuture future = subscriptionAdminClient.pullCallable().futureCall(request);
+   *   // Do something.
+   *   PullResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable pullCallable() { + return stub.pullCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Establishes a stream with the server, which sends messages down to the client. The client + * streams acknowledgments and ack deadline modifications back to the server. The server will + * close the stream and return the status on any error. The server may close the stream with + * status `UNAVAILABLE` to reassign server-side resources, in which case, the client should + * re-establish the stream. Flow control can be achieved by configuring the underlying RPC + * channel. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   BidiStream bidiStream =
+   *       subscriptionAdminClient.streamingPullCallable().call();
+   *   StreamingPullRequest request =
+   *       StreamingPullRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .addAllAckIds(new ArrayList())
+   *           .addAllModifyDeadlineSeconds(new ArrayList())
+   *           .addAllModifyDeadlineAckIds(new ArrayList())
+   *           .setStreamAckDeadlineSeconds(1875467245)
+   *           .setClientId("clientId908408390")
+   *           .setMaxOutstandingMessages(-1315266996)
+   *           .setMaxOutstandingBytes(-2103098517)
+   *           .setProtocolVersion(-1161610703)
+   *           .build();
+   *   bidiStream.send(request);
+   *   for (StreamingPullResponse response : bidiStream) {
+   *     // Do something when a response is received.
+   *   }
+   * }
+   * }
+ */ + public final BidiStreamingCallable + streamingPullCallable() { + return stub.streamingPullCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Modifies the `PushConfig` for a specified subscription. + * + *

This may be used to change a push subscription to a pull one (signified by an empty + * `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push + * subscription. Messages will accumulate for delivery continuously through the call regardless of + * changes to the `PushConfig`. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   PushConfig pushConfig = PushConfig.newBuilder().build();
+   *   subscriptionAdminClient.modifyPushConfig(subscription, pushConfig);
+   * }
+   * }
+ * + * @param subscription Required. The name of the subscription. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param pushConfig Required. The push configuration for future deliveries. + *

An empty `pushConfig` indicates that the Pub/Sub system should stop pushing messages + * from the given subscription and allow messages to be pulled and acknowledged - effectively + * pausing the subscription if `Pull` or `StreamingPull` is not called. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void modifyPushConfig(SubscriptionName subscription, PushConfig pushConfig) { + ModifyPushConfigRequest request = + ModifyPushConfigRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .setPushConfig(pushConfig) + .build(); + modifyPushConfig(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Modifies the `PushConfig` for a specified subscription. + * + *

This may be used to change a push subscription to a pull one (signified by an empty + * `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push + * subscription. Messages will accumulate for delivery continuously through the call regardless of + * changes to the `PushConfig`. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+   *   PushConfig pushConfig = PushConfig.newBuilder().build();
+   *   subscriptionAdminClient.modifyPushConfig(subscription, pushConfig);
+   * }
+   * }
+ * + * @param subscription Required. The name of the subscription. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param pushConfig Required. The push configuration for future deliveries. + *

An empty `pushConfig` indicates that the Pub/Sub system should stop pushing messages + * from the given subscription and allow messages to be pulled and acknowledged - effectively + * pausing the subscription if `Pull` or `StreamingPull` is not called. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void modifyPushConfig(String subscription, PushConfig pushConfig) { + ModifyPushConfigRequest request = + ModifyPushConfigRequest.newBuilder() + .setSubscription(subscription) + .setPushConfig(pushConfig) + .build(); + modifyPushConfig(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Modifies the `PushConfig` for a specified subscription. + * + *

This may be used to change a push subscription to a pull one (signified by an empty + * `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push + * subscription. Messages will accumulate for delivery continuously through the call regardless of + * changes to the `PushConfig`. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ModifyPushConfigRequest request =
+   *       ModifyPushConfigRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .setPushConfig(PushConfig.newBuilder().build())
+   *           .build();
+   *   subscriptionAdminClient.modifyPushConfig(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void modifyPushConfig(ModifyPushConfigRequest request) { + modifyPushConfigCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Modifies the `PushConfig` for a specified subscription. + * + *

This may be used to change a push subscription to a pull one (signified by an empty + * `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push + * subscription. Messages will accumulate for delivery continuously through the call regardless of + * changes to the `PushConfig`. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   PushConfig pushConfig = PushConfig.newBuilder().build();
+   *   subscriptionAdminClient.modifyPushConfig(subscription, pushConfig);
+   * }
+   * }
+ * + * @param subscription Required. The name of the subscription. Format is + * `projects/{project}/subscriptions/{sub}`. + * @param pushConfig Required. The push configuration for future deliveries. + *

An empty `pushConfig` indicates that the Pub/Sub system should stop pushing messages + * from the given subscription and allow messages to be pulled and acknowledged - effectively + * pausing the subscription if `Pull` or `StreamingPull` is not called. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #modifyPushConfig(SubscriptionName, PushConfig)} instead. + */ + @Deprecated + public final void modifyPushConfig(ProjectSubscriptionName subscription, PushConfig pushConfig) { + ModifyPushConfigRequest request = + ModifyPushConfigRequest.newBuilder() + .setSubscription(subscription == null ? null : subscription.toString()) + .setPushConfig(pushConfig) + .build(); + modifyPushConfig(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Modifies the `PushConfig` for a specified subscription. + * + *

This may be used to change a push subscription to a pull one (signified by an empty + * `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push + * subscription. Messages will accumulate for delivery continuously through the call regardless of + * changes to the `PushConfig`. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ModifyPushConfigRequest request =
+   *       ModifyPushConfigRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .setPushConfig(PushConfig.newBuilder().build())
+   *           .build();
+   *   ApiFuture future =
+   *       subscriptionAdminClient.modifyPushConfigCallable().futureCall(request);
+   *   // Do something.
+   *   future.get();
+   * }
+   * }
+ */ + public final UnaryCallable modifyPushConfigCallable() { + return stub.modifyPushConfigCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration details of a snapshot. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SnapshotName snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+   *   Snapshot response = subscriptionAdminClient.getSnapshot(snapshot);
+   * }
+   * }
+ * + * @param snapshot Required. The name of the snapshot to get. Format is + * `projects/{project}/snapshots/{snap}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Snapshot getSnapshot(SnapshotName snapshot) { + GetSnapshotRequest request = + GetSnapshotRequest.newBuilder() + .setSnapshot(snapshot == null ? null : snapshot.toString()) + .build(); + return getSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration details of a snapshot. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString();
+   *   Snapshot response = subscriptionAdminClient.getSnapshot(snapshot);
+   * }
+   * }
+ * + * @param snapshot Required. The name of the snapshot to get. Format is + * `projects/{project}/snapshots/{snap}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Snapshot getSnapshot(String snapshot) { + GetSnapshotRequest request = GetSnapshotRequest.newBuilder().setSnapshot(snapshot).build(); + return getSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration details of a snapshot. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   GetSnapshotRequest request =
+   *       GetSnapshotRequest.newBuilder()
+   *           .setSnapshot(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString())
+   *           .build();
+   *   Snapshot response = subscriptionAdminClient.getSnapshot(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Snapshot getSnapshot(GetSnapshotRequest request) { + return getSnapshotCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration details of a snapshot. Snapshots are used in <a + * href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a> operations, which + * allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment + * state of messages in an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSnapshotName snapshot = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+   *   Snapshot response = subscriptionAdminClient.getSnapshot(snapshot);
+   * }
+   * }
+ * + * @param snapshot Required. The name of the snapshot to get. Format is + * `projects/{project}/snapshots/{snap}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use Use {@link #getSnapshot(SnapshotName)} instead. + */ + @Deprecated + public final Snapshot getSnapshot(ProjectSnapshotName snapshot) { + GetSnapshotRequest request = + GetSnapshotRequest.newBuilder() + .setSnapshot(snapshot == null ? null : snapshot.toString()) + .build(); + return getSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration details of a snapshot. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   GetSnapshotRequest request =
+   *       GetSnapshotRequest.newBuilder()
+   *           .setSnapshot(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString())
+   *           .build();
+   *   ApiFuture future =
+   *       subscriptionAdminClient.getSnapshotCallable().futureCall(request);
+   *   // Do something.
+   *   Snapshot response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable getSnapshotCallable() { + return stub.getSnapshotCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the existing snapshots. Snapshots are used in [Seek]( + * https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage + * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in + * an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectName project = ProjectName.of("[PROJECT]");
+   *   for (Snapshot element : subscriptionAdminClient.listSnapshots(project).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param project Required. The name of the project in which to list snapshots. Format is + * `projects/{project-id}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListSnapshotsPagedResponse listSnapshots(ProjectName project) { + ListSnapshotsRequest request = + ListSnapshotsRequest.newBuilder() + .setProject(project == null ? null : project.toString()) + .build(); + return listSnapshots(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the existing snapshots. Snapshots are used in [Seek]( + * https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage + * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in + * an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String project = ProjectName.of("[PROJECT]").toString();
+   *   for (Snapshot element : subscriptionAdminClient.listSnapshots(project).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param project Required. The name of the project in which to list snapshots. Format is + * `projects/{project-id}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListSnapshotsPagedResponse listSnapshots(String project) { + ListSnapshotsRequest request = ListSnapshotsRequest.newBuilder().setProject(project).build(); + return listSnapshots(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the existing snapshots. Snapshots are used in [Seek]( + * https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage + * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in + * an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ListSnapshotsRequest request =
+   *       ListSnapshotsRequest.newBuilder()
+   *           .setProject(ProjectName.of("[PROJECT]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   for (Snapshot element : subscriptionAdminClient.listSnapshots(request).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListSnapshotsPagedResponse listSnapshots(ListSnapshotsRequest request) { + return listSnapshotsPagedCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the existing snapshots. Snapshots are used in [Seek]( + * https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage + * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in + * an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ListSnapshotsRequest request =
+   *       ListSnapshotsRequest.newBuilder()
+   *           .setProject(ProjectName.of("[PROJECT]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   ApiFuture future =
+   *       subscriptionAdminClient.listSnapshotsPagedCallable().futureCall(request);
+   *   // Do something.
+   *   for (Snapshot element : future.get().iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable + listSnapshotsPagedCallable() { + return stub.listSnapshotsPagedCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the existing snapshots. Snapshots are used in [Seek]( + * https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage + * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in + * an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ListSnapshotsRequest request =
+   *       ListSnapshotsRequest.newBuilder()
+   *           .setProject(ProjectName.of("[PROJECT]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   while (true) {
+   *     ListSnapshotsResponse response =
+   *         subscriptionAdminClient.listSnapshotsCallable().call(request);
+   *     for (Snapshot element : response.getSnapshotsList()) {
+   *       // doThingsWith(element);
+   *     }
+   *     String nextPageToken = response.getNextPageToken();
+   *     if (!Strings.isNullOrEmpty(nextPageToken)) {
+   *       request = request.toBuilder().setPageToken(nextPageToken).build();
+   *     } else {
+   *       break;
+   *     }
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable listSnapshotsCallable() { + return stub.listSnapshotsCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a snapshot from the requested subscription. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. If the snapshot + * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns + * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would + * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the + * `Snapshot.expire_time` field. If the name is not provided in the request, the server will + * assign a random name for this snapshot on the same project as the subscription, conforming to + * the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). + * The generated name is populated in the returned Snapshot object. Note that for REST API + * requests, you must specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SnapshotName name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+   *   SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+   * }
+   * }
+ * + * @param name Required. User-provided name for this snapshot. If the name is not provided in the + * request, the server will assign a random name for this snapshot on the same project as the + * subscription. Note that for REST API requests, you must specify a name. See the [resource + * name rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). Format is + * `projects/{project}/snapshots/{snap}`. + * @param subscription Required. The subscription whose backlog the snapshot retains. + * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the + * subscription. More precisely, this is defined as the messages in the subscription's backlog + * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as + * well as: (b) Any messages published to the subscription's topic following the successful + * completion of the CreateSnapshot request. Format is + * `projects/{project}/subscriptions/{sub}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Snapshot createSnapshot(SnapshotName name, SubscriptionName subscription) { + CreateSnapshotRequest request = + CreateSnapshotRequest.newBuilder() + .setName(name == null ? null : name.toString()) + .setSubscription(subscription == null ? null : subscription.toString()) + .build(); + return createSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a snapshot from the requested subscription. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. If the snapshot + * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns + * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would + * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the + * `Snapshot.expire_time` field. If the name is not provided in the request, the server will + * assign a random name for this snapshot on the same project as the subscription, conforming to + * the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). + * The generated name is populated in the returned Snapshot object. Note that for REST API + * requests, you must specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SnapshotName name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+   *   String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+   *   Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+   * }
+   * }
+ * + * @param name Required. User-provided name for this snapshot. If the name is not provided in the + * request, the server will assign a random name for this snapshot on the same project as the + * subscription. Note that for REST API requests, you must specify a name. See the [resource + * name rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). Format is + * `projects/{project}/snapshots/{snap}`. + * @param subscription Required. The subscription whose backlog the snapshot retains. + * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the + * subscription. More precisely, this is defined as the messages in the subscription's backlog + * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as + * well as: (b) Any messages published to the subscription's topic following the successful + * completion of the CreateSnapshot request. Format is + * `projects/{project}/subscriptions/{sub}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Snapshot createSnapshot(SnapshotName name, String subscription) { + CreateSnapshotRequest request = + CreateSnapshotRequest.newBuilder() + .setName(name == null ? null : name.toString()) + .setSubscription(subscription) + .build(); + return createSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a snapshot from the requested subscription. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. If the snapshot + * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns + * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would + * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the + * `Snapshot.expire_time` field. If the name is not provided in the request, the server will + * assign a random name for this snapshot on the same project as the subscription, conforming to + * the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). + * The generated name is populated in the returned Snapshot object. Note that for REST API + * requests, you must specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString();
+   *   SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+   * }
+   * }
+ * + * @param name Required. User-provided name for this snapshot. If the name is not provided in the + * request, the server will assign a random name for this snapshot on the same project as the + * subscription. Note that for REST API requests, you must specify a name. See the [resource + * name rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). Format is + * `projects/{project}/snapshots/{snap}`. + * @param subscription Required. The subscription whose backlog the snapshot retains. + * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the + * subscription. More precisely, this is defined as the messages in the subscription's backlog + * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as + * well as: (b) Any messages published to the subscription's topic following the successful + * completion of the CreateSnapshot request. Format is + * `projects/{project}/subscriptions/{sub}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Snapshot createSnapshot(String name, SubscriptionName subscription) { + CreateSnapshotRequest request = + CreateSnapshotRequest.newBuilder() + .setName(name) + .setSubscription(subscription == null ? null : subscription.toString()) + .build(); + return createSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a snapshot from the requested subscription. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. If the snapshot + * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns + * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would + * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the + * `Snapshot.expire_time` field. If the name is not provided in the request, the server will + * assign a random name for this snapshot on the same project as the subscription, conforming to + * the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). + * The generated name is populated in the returned Snapshot object. Note that for REST API + * requests, you must specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString();
+   *   String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+   *   Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+   * }
+   * }
+ * + * @param name Required. User-provided name for this snapshot. If the name is not provided in the + * request, the server will assign a random name for this snapshot on the same project as the + * subscription. Note that for REST API requests, you must specify a name. See the [resource + * name rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). Format is + * `projects/{project}/snapshots/{snap}`. + * @param subscription Required. The subscription whose backlog the snapshot retains. + * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the + * subscription. More precisely, this is defined as the messages in the subscription's backlog + * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as + * well as: (b) Any messages published to the subscription's topic following the successful + * completion of the CreateSnapshot request. Format is + * `projects/{project}/subscriptions/{sub}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Snapshot createSnapshot(String name, String subscription) { + CreateSnapshotRequest request = + CreateSnapshotRequest.newBuilder().setName(name).setSubscription(subscription).build(); + return createSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a snapshot from the requested subscription. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. If the snapshot + * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns + * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would + * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the + * `Snapshot.expire_time` field. If the name is not provided in the request, the server will + * assign a random name for this snapshot on the same project as the subscription, conforming to + * the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). + * The generated name is populated in the returned Snapshot object. Note that for REST API + * requests, you must specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   CreateSnapshotRequest request =
+   *       CreateSnapshotRequest.newBuilder()
+   *           .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString())
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .putAllLabels(new HashMap())
+   *           .putAllTags(new HashMap())
+   *           .build();
+   *   Snapshot response = subscriptionAdminClient.createSnapshot(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Snapshot createSnapshot(CreateSnapshotRequest request) { + return createSnapshotCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a snapshot from the requested subscription. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. If the snapshot + * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns + * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would + * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the + * `Snapshot.expire_time` field. If the name is not provided in the request, the server will + * assign a random name for this snapshot on the same project as the subscription, conforming to + * the [resource name format] (https://cloud.google.com/pubsub/docs/admin#resource_names). The + * generated name is populated in the returned Snapshot object. Note that for REST API requests, + * you must specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSnapshotName name = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+   * }
+   * }
+ * + * @param name Required. User-provided name for this snapshot. If the name is not provided in the + * request, the server will assign a random name for this snapshot on the same project as the + * subscription. Note that for REST API requests, you must specify a name. See the <a + * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name + * rules</a>. Format is `projects/{project}/snapshots/{snap}`. + * @param subscription Required. The subscription whose backlog the snapshot retains. + * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the + * subscription. More precisely, this is defined as the messages in the subscription's backlog + * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as + * well as: (b) Any messages published to the subscription's topic following the successful + * completion of the CreateSnapshot request. Format is + * `projects/{project}/subscriptions/{sub}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use Use {@link #createSnapshot(SnapshotName, SubscriptionName)} instead. + */ + @Deprecated + public final Snapshot createSnapshot( + ProjectSnapshotName name, ProjectSubscriptionName subscription) { + CreateSnapshotRequest request = + CreateSnapshotRequest.newBuilder() + .setName(name == null ? null : name.toString()) + .setSubscription(subscription == null ? null : subscription.toString()) + .build(); + return createSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a snapshot from the requested subscription. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. If the snapshot + * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns + * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would + * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the + * `Snapshot.expire_time` field. If the name is not provided in the request, the server will + * assign a random name for this snapshot on the same project as the subscription, conforming to + * the [resource name format] (https://cloud.google.com/pubsub/docs/admin#resource_names). The + * generated name is populated in the returned Snapshot object. Note that for REST API requests, + * you must specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String name = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString();
+   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+   *   Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+   * }
+   * }
+ * + * @param name Required. User-provided name for this snapshot. If the name is not provided in the + * request, the server will assign a random name for this snapshot on the same project as the + * subscription. Note that for REST API requests, you must specify a name. See the <a + * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name + * rules</a>. Format is `projects/{project}/snapshots/{snap}`. + * @param subscription Required. The subscription whose backlog the snapshot retains. + * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the + * subscription. More precisely, this is defined as the messages in the subscription's backlog + * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as + * well as: (b) Any messages published to the subscription's topic following the successful + * completion of the CreateSnapshot request. Format is + * `projects/{project}/subscriptions/{sub}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use Use {@link #createSnapshot(String, SubscriptionName)} instead. + */ + @Deprecated + public final Snapshot createSnapshot(String name, ProjectSubscriptionName subscription) { + CreateSnapshotRequest request = + CreateSnapshotRequest.newBuilder() + .setName(name) + .setSubscription(subscription == null ? null : subscription.toString()) + .build(); + return createSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a snapshot from the requested subscription. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. If the snapshot + * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns + * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would + * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the + * `Snapshot.expire_time` field. If the name is not provided in the request, the server will + * assign a random name for this snapshot on the same project as the subscription, conforming to + * the [resource name format] (https://cloud.google.com/pubsub/docs/admin#resource_names). The + * generated name is populated in the returned Snapshot object. Note that for REST API requests, + * you must specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSnapshotName name = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+   *   String subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+   *   Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+   * }
+   * }
+ * + * @param name Required. User-provided name for this snapshot. If the name is not provided in the + * request, the server will assign a random name for this snapshot on the same project as the + * subscription. Note that for REST API requests, you must specify a name. See the <a + * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name + * rules</a>. Format is `projects/{project}/snapshots/{snap}`. + * @param subscription Required. The subscription whose backlog the snapshot retains. + * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the + * subscription. More precisely, this is defined as the messages in the subscription's backlog + * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as + * well as: (b) Any messages published to the subscription's topic following the successful + * completion of the CreateSnapshot request. Format is + * `projects/{project}/subscriptions/{sub}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use Use {@link #createSnapshot(SnapshotName, String)} instead. + */ + @Deprecated + public final Snapshot createSnapshot(ProjectSnapshotName name, String subscription) { + CreateSnapshotRequest request = + CreateSnapshotRequest.newBuilder() + .setName(name == null ? null : name.toString()) + .setSubscription(subscription) + .build(); + return createSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a snapshot from the requested subscription. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. If the snapshot + * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns + * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would + * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the + * `Snapshot.expire_time` field. If the name is not provided in the request, the server will + * assign a random name for this snapshot on the same project as the subscription, conforming to + * the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). + * The generated name is populated in the returned Snapshot object. Note that for REST API + * requests, you must specify a name in the request. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   CreateSnapshotRequest request =
+   *       CreateSnapshotRequest.newBuilder()
+   *           .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString())
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .putAllLabels(new HashMap())
+   *           .putAllTags(new HashMap())
+   *           .build();
+   *   ApiFuture future =
+   *       subscriptionAdminClient.createSnapshotCallable().futureCall(request);
+   *   // Do something.
+   *   Snapshot response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable createSnapshotCallable() { + return stub.createSnapshotCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Updates an existing snapshot by updating the fields specified in the update mask. Snapshots are + * used in [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow + * you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   Snapshot snapshot = Snapshot.newBuilder().build();
+   *   FieldMask updateMask = FieldMask.newBuilder().build();
+   *   Snapshot response = subscriptionAdminClient.updateSnapshot(snapshot, updateMask);
+   * }
+   * }
+ * + * @param snapshot Required. The updated snapshot object. + * @param updateMask Required. Indicates which fields in the provided snapshot to update. Must be + * specified and non-empty. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Snapshot updateSnapshot(Snapshot snapshot, FieldMask updateMask) { + UpdateSnapshotRequest request = + UpdateSnapshotRequest.newBuilder().setSnapshot(snapshot).setUpdateMask(updateMask).build(); + return updateSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Updates an existing snapshot by updating the fields specified in the update mask. Snapshots are + * used in [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow + * you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   UpdateSnapshotRequest request =
+   *       UpdateSnapshotRequest.newBuilder()
+   *           .setSnapshot(Snapshot.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   Snapshot response = subscriptionAdminClient.updateSnapshot(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Snapshot updateSnapshot(UpdateSnapshotRequest request) { + return updateSnapshotCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Updates an existing snapshot by updating the fields specified in the update mask. Snapshots are + * used in [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow + * you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   UpdateSnapshotRequest request =
+   *       UpdateSnapshotRequest.newBuilder()
+   *           .setSnapshot(Snapshot.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   ApiFuture future =
+   *       subscriptionAdminClient.updateSnapshotCallable().futureCall(request);
+   *   // Do something.
+   *   Snapshot response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable updateSnapshotCallable() { + return stub.updateSnapshotCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Removes an existing snapshot. Snapshots are used in [Seek] + * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage + * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in + * an existing subscription to the state captured by a snapshot. When the snapshot is deleted, all + * messages retained in the snapshot are immediately dropped. After a snapshot is deleted, a new + * one may be created with the same name, but the new one has no association with the old snapshot + * or its subscription, unless the same subscription is specified. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SnapshotName snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+   *   subscriptionAdminClient.deleteSnapshot(snapshot);
+   * }
+   * }
+ * + * @param snapshot Required. The name of the snapshot to delete. Format is + * `projects/{project}/snapshots/{snap}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deleteSnapshot(SnapshotName snapshot) { + DeleteSnapshotRequest request = + DeleteSnapshotRequest.newBuilder() + .setSnapshot(snapshot == null ? null : snapshot.toString()) + .build(); + deleteSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Removes an existing snapshot. Snapshots are used in [Seek] + * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage + * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in + * an existing subscription to the state captured by a snapshot. When the snapshot is deleted, all + * messages retained in the snapshot are immediately dropped. After a snapshot is deleted, a new + * one may be created with the same name, but the new one has no association with the old snapshot + * or its subscription, unless the same subscription is specified. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString();
+   *   subscriptionAdminClient.deleteSnapshot(snapshot);
+   * }
+   * }
+ * + * @param snapshot Required. The name of the snapshot to delete. Format is + * `projects/{project}/snapshots/{snap}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deleteSnapshot(String snapshot) { + DeleteSnapshotRequest request = + DeleteSnapshotRequest.newBuilder().setSnapshot(snapshot).build(); + deleteSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Removes an existing snapshot. Snapshots are used in [Seek] + * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage + * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in + * an existing subscription to the state captured by a snapshot. When the snapshot is deleted, all + * messages retained in the snapshot are immediately dropped. After a snapshot is deleted, a new + * one may be created with the same name, but the new one has no association with the old snapshot + * or its subscription, unless the same subscription is specified. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   DeleteSnapshotRequest request =
+   *       DeleteSnapshotRequest.newBuilder()
+   *           .setSnapshot(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString())
+   *           .build();
+   *   subscriptionAdminClient.deleteSnapshot(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deleteSnapshot(DeleteSnapshotRequest request) { + deleteSnapshotCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Removes an existing snapshot. Snapshots are used in [Seek] + * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage + * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in + * an existing subscription to the state captured by a snapshot. When the snapshot is deleted, all + * messages retained in the snapshot are immediately dropped. After a snapshot is deleted, a new + * one may be created with the same name, but the new one has no association with the old snapshot + * or its subscription, unless the same subscription is specified. + * + *

Sample code: + * + *

{@code
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   ProjectSnapshotName snapshot = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+   *   subscriptionAdminClient.deleteSnapshot(snapshot);
+   * }
+   * }
+ * + * @param snapshot Required. The name of the snapshot to delete. Format is + * `projects/{project}/snapshots/{snap}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use Use {@link #deleteSnapshot(SnapshotName)} instead. + */ + @Deprecated + public final void deleteSnapshot(ProjectSnapshotName snapshot) { + DeleteSnapshotRequest request = + DeleteSnapshotRequest.newBuilder() + .setSnapshot(snapshot == null ? null : snapshot.toString()) + .build(); + deleteSnapshot(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Removes an existing snapshot. Snapshots are used in [Seek] + * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage + * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in + * an existing subscription to the state captured by a snapshot. When the snapshot is deleted, all + * messages retained in the snapshot are immediately dropped. After a snapshot is deleted, a new + * one may be created with the same name, but the new one has no association with the old snapshot + * or its subscription, unless the same subscription is specified. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   DeleteSnapshotRequest request =
+   *       DeleteSnapshotRequest.newBuilder()
+   *           .setSnapshot(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString())
+   *           .build();
+   *   ApiFuture future =
+   *       subscriptionAdminClient.deleteSnapshotCallable().futureCall(request);
+   *   // Do something.
+   *   future.get();
+   * }
+   * }
+ */ + public final UnaryCallable deleteSnapshotCallable() { + return stub.deleteSnapshotCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Seeks an existing subscription to a point in time or to a given snapshot, whichever is provided + * in the request. Snapshots are used in [Seek] + * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage + * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in + * an existing subscription to the state captured by a snapshot. Note that both the subscription + * and the snapshot must be on the same topic. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SeekRequest request =
+   *       SeekRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .build();
+   *   SeekResponse response = subscriptionAdminClient.seek(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final SeekResponse seek(SeekRequest request) { + return seekCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Seeks an existing subscription to a point in time or to a given snapshot, whichever is provided + * in the request. Snapshots are used in [Seek] + * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage + * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in + * an existing subscription to the state captured by a snapshot. Note that both the subscription + * and the snapshot must be on the same topic. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SeekRequest request =
+   *       SeekRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .build();
+   *   ApiFuture future = subscriptionAdminClient.seekCallable().futureCall(request);
+   *   // Do something.
+   *   SeekResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable seekCallable() { + return stub.seekCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Sets the access control policy on the specified resource. Replacesany existing policy. + * + *

Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SetIamPolicyRequest request =
+   *       SetIamPolicyRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setPolicy(Policy.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   Policy response = subscriptionAdminClient.setIamPolicy(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Policy setIamPolicy(SetIamPolicyRequest request) { + return setIamPolicyCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Sets the access control policy on the specified resource. Replaces any existing policy. + * + *

Can return Public Errors: NOT_FOUND, INVALID_ARGUMENT and PERMISSION_DENIED + * + *

Sample code: + * + *


+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String formattedResource = ProjectTopicName.format("[PROJECT]", "[TOPIC]");
+   *   Policy policy = Policy.newBuilder().build();
+   *   Policy response = subscriptionAdminClient.setIamPolicy(formattedResource, policy);
+   * }
+   * 
+ * + * @param resource REQUIRED: The resource for which the policy is being specified. See the + * operation documentation for the appropriate value for this field. + * @param policy REQUIRED: The complete policy to be applied to the `resource`. The size of the + * policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud + * Platform services (such as Projects) might reject them. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #setIamPolicy(SetIamPolicyRequest)} instead. + */ + @Deprecated + public final Policy setIamPolicy(String resource, Policy policy) { + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder().setResource(resource).setPolicy(policy).build(); + return setIamPolicy(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Sets the access control policy on the specified resource. Replacesany existing policy. + * + *

Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   SetIamPolicyRequest request =
+   *       SetIamPolicyRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setPolicy(Policy.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   ApiFuture future = subscriptionAdminClient.setIamPolicyCallable().futureCall(request);
+   *   // Do something.
+   *   Policy response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable setIamPolicyCallable() { + return stub.setIamPolicyCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the access control policy for a resource. Returns an empty policyif the resource exists + * and does not have a policy set. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   GetIamPolicyRequest request =
+   *       GetIamPolicyRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setOptions(GetPolicyOptions.newBuilder().build())
+   *           .build();
+   *   Policy response = subscriptionAdminClient.getIamPolicy(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Policy getIamPolicy(GetIamPolicyRequest request) { + return getIamPolicyCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Gets the access control policy for a resource. Returns an empty policy if the resource exists + * and does not have a policy set. + * + *

Sample code: + * + *


+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String formattedResource = ProjectTopicName.format("[PROJECT]", "[TOPIC]");
+   *   Policy response = subscriptionAdminClient.getIamPolicy(formattedResource);
+   * }
+   * 
+ * + * @param resource REQUIRED: The resource for which the policy is being requested. See the + * operation documentation for the appropriate value for this field. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #getIamPolicy(GetIamPolicyRequest)} instead. + */ + @Deprecated + public final Policy getIamPolicy(String resource) { + GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder().setResource(resource).build(); + return getIamPolicy(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the access control policy for a resource. Returns an empty policyif the resource exists + * and does not have a policy set. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   GetIamPolicyRequest request =
+   *       GetIamPolicyRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setOptions(GetPolicyOptions.newBuilder().build())
+   *           .build();
+   *   ApiFuture future = subscriptionAdminClient.getIamPolicyCallable().futureCall(request);
+   *   // Do something.
+   *   Policy response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable getIamPolicyCallable() { + return stub.getIamPolicyCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Returns permissions that a caller has on the specified resource. If theresource does not exist, + * this will return an empty set ofpermissions, not a `NOT_FOUND` error. + * + *

Note: This operation is designed to be used for buildingpermission-aware UIs and + * command-line tools, not for authorizationchecking. This operation may "fail open" without + * warning. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   TestIamPermissionsRequest request =
+   *       TestIamPermissionsRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .addAllPermissions(new ArrayList())
+   *           .build();
+   *   TestIamPermissionsResponse response = subscriptionAdminClient.testIamPermissions(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final TestIamPermissionsResponse testIamPermissions(TestIamPermissionsRequest request) { + return testIamPermissionsCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Returns permissions that a caller has on the specified resource. If the resource does not + * exist, this will return an empty set of permissions, not a NOT_FOUND error. + * + *

Note: This operation is designed to be used for building permission-aware UIs and + * command-line tools, not for authorization checking. This operation may "fail open" without + * warning. + * + *

Sample code: + * + *


+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   String formattedResource = ProjectTopicName.format("[PROJECT]", "[TOPIC]");
+   *   List<String> permissions = new ArrayList<>();
+   *   TestIamPermissionsResponse response = subscriptionAdminClient.testIamPermissions(formattedResource, permissions);
+   * }
+   * 
+ * + * @param resource REQUIRED: The resource for which the policy detail is being requested. See the + * operation documentation for the appropriate value for this field. + * @param permissions The set of permissions to check for the `resource`. Permissions with + * wildcards (such as '*' or 'storage.*') are not allowed. For more information see + * [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions). + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #testIamPermissions(TestIamPermissionsRequest)} instead. + */ + @Deprecated + public final TestIamPermissionsResponse testIamPermissions( + String resource, List permissions) { + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(resource) + .addAllPermissions(permissions) + .build(); + return testIamPermissions(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Returns permissions that a caller has on the specified resource. If theresource does not exist, + * this will return an empty set ofpermissions, not a `NOT_FOUND` error. + * + *

Note: This operation is designed to be used for buildingpermission-aware UIs and + * command-line tools, not for authorizationchecking. This operation may "fail open" without + * warning. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+   *   TestIamPermissionsRequest request =
+   *       TestIamPermissionsRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .addAllPermissions(new ArrayList())
+   *           .build();
+   *   ApiFuture future =
+   *       subscriptionAdminClient.testIamPermissionsCallable().futureCall(request);
+   *   // Do something.
+   *   TestIamPermissionsResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable + testIamPermissionsCallable() { + return stub.testIamPermissionsCallable(); + } + + @Override + public final void close() { + stub.close(); + } + + @Override + public void shutdown() { + stub.shutdown(); + } + + @Override + public boolean isShutdown() { + return stub.isShutdown(); + } + + @Override + public boolean isTerminated() { + return stub.isTerminated(); + } + + @Override + public void shutdownNow() { + stub.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return stub.awaitTermination(duration, unit); + } + + public static class ListSubscriptionsPagedResponse + extends AbstractPagedListResponse< + ListSubscriptionsRequest, + ListSubscriptionsResponse, + Subscription, + ListSubscriptionsPage, + ListSubscriptionsFixedSizeCollection> { + + public static ApiFuture createAsync( + PageContext context, + ApiFuture futureResponse) { + ApiFuture futurePage = + ListSubscriptionsPage.createEmptyPage().createPageAsync(context, futureResponse); + return ApiFutures.transform( + futurePage, + input -> new ListSubscriptionsPagedResponse(input), + MoreExecutors.directExecutor()); + } + + private ListSubscriptionsPagedResponse(ListSubscriptionsPage page) { + super(page, ListSubscriptionsFixedSizeCollection.createEmptyCollection()); + } + } + + public static class ListSubscriptionsPage + extends AbstractPage< + ListSubscriptionsRequest, + ListSubscriptionsResponse, + Subscription, + ListSubscriptionsPage> { + + private ListSubscriptionsPage( + PageContext context, + ListSubscriptionsResponse response) { + super(context, response); + } + + private static ListSubscriptionsPage createEmptyPage() { + return new ListSubscriptionsPage(null, null); + } + + @Override + protected ListSubscriptionsPage createPage( + PageContext context, + ListSubscriptionsResponse response) { + return new ListSubscriptionsPage(context, response); + } + + @Override + public ApiFuture createPageAsync( + PageContext context, + ApiFuture futureResponse) { + return super.createPageAsync(context, futureResponse); + } + } + + public static class ListSubscriptionsFixedSizeCollection + extends AbstractFixedSizeCollection< + ListSubscriptionsRequest, + ListSubscriptionsResponse, + Subscription, + ListSubscriptionsPage, + ListSubscriptionsFixedSizeCollection> { + + private ListSubscriptionsFixedSizeCollection( + List pages, int collectionSize) { + super(pages, collectionSize); + } + + private static ListSubscriptionsFixedSizeCollection createEmptyCollection() { + return new ListSubscriptionsFixedSizeCollection(null, 0); + } + + @Override + protected ListSubscriptionsFixedSizeCollection createCollection( + List pages, int collectionSize) { + return new ListSubscriptionsFixedSizeCollection(pages, collectionSize); + } + } + + public static class ListSnapshotsPagedResponse + extends AbstractPagedListResponse< + ListSnapshotsRequest, + ListSnapshotsResponse, + Snapshot, + ListSnapshotsPage, + ListSnapshotsFixedSizeCollection> { + + public static ApiFuture createAsync( + PageContext context, + ApiFuture futureResponse) { + ApiFuture futurePage = + ListSnapshotsPage.createEmptyPage().createPageAsync(context, futureResponse); + return ApiFutures.transform( + futurePage, + input -> new ListSnapshotsPagedResponse(input), + MoreExecutors.directExecutor()); + } + + private ListSnapshotsPagedResponse(ListSnapshotsPage page) { + super(page, ListSnapshotsFixedSizeCollection.createEmptyCollection()); + } + } + + public static class ListSnapshotsPage + extends AbstractPage< + ListSnapshotsRequest, ListSnapshotsResponse, Snapshot, ListSnapshotsPage> { + + private ListSnapshotsPage( + PageContext context, + ListSnapshotsResponse response) { + super(context, response); + } + + private static ListSnapshotsPage createEmptyPage() { + return new ListSnapshotsPage(null, null); + } + + @Override + protected ListSnapshotsPage createPage( + PageContext context, + ListSnapshotsResponse response) { + return new ListSnapshotsPage(context, response); + } + + @Override + public ApiFuture createPageAsync( + PageContext context, + ApiFuture futureResponse) { + return super.createPageAsync(context, futureResponse); + } + } + + public static class ListSnapshotsFixedSizeCollection + extends AbstractFixedSizeCollection< + ListSnapshotsRequest, + ListSnapshotsResponse, + Snapshot, + ListSnapshotsPage, + ListSnapshotsFixedSizeCollection> { + + private ListSnapshotsFixedSizeCollection(List pages, int collectionSize) { + super(pages, collectionSize); + } + + private static ListSnapshotsFixedSizeCollection createEmptyCollection() { + return new ListSnapshotsFixedSizeCollection(null, 0); + } + + @Override + protected ListSnapshotsFixedSizeCollection createCollection( + List pages, int collectionSize) { + return new ListSnapshotsFixedSizeCollection(pages, collectionSize); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriptionAdminSettings.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriptionAdminSettings.java new file mode 100644 index 000000000000..8fe62a63f574 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriptionAdminSettings.java @@ -0,0 +1,442 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSubscriptionsPagedResponse; + +import com.google.api.core.ApiFunction; +import com.google.api.core.BetaApi; +import com.google.api.gax.core.GoogleCredentialsProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.ClientSettings; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.StreamingCallSettings; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.cloud.pubsub.v1.stub.SubscriberStubSettings; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.CreateSnapshotRequest; +import com.google.pubsub.v1.DeleteSnapshotRequest; +import com.google.pubsub.v1.DeleteSubscriptionRequest; +import com.google.pubsub.v1.GetSnapshotRequest; +import com.google.pubsub.v1.GetSubscriptionRequest; +import com.google.pubsub.v1.ListSnapshotsRequest; +import com.google.pubsub.v1.ListSnapshotsResponse; +import com.google.pubsub.v1.ListSubscriptionsRequest; +import com.google.pubsub.v1.ListSubscriptionsResponse; +import com.google.pubsub.v1.ModifyAckDeadlineRequest; +import com.google.pubsub.v1.ModifyPushConfigRequest; +import com.google.pubsub.v1.PullRequest; +import com.google.pubsub.v1.PullResponse; +import com.google.pubsub.v1.SeekRequest; +import com.google.pubsub.v1.SeekResponse; +import com.google.pubsub.v1.Snapshot; +import com.google.pubsub.v1.StreamingPullRequest; +import com.google.pubsub.v1.StreamingPullResponse; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.UpdateSnapshotRequest; +import com.google.pubsub.v1.UpdateSubscriptionRequest; +import java.io.IOException; +import java.util.List; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Settings class to configure an instance of {@link SubscriptionAdminClient}. + * + *

The default instance has everything set to sensible defaults: + * + *

    + *
  • The default service address (pubsub.googleapis.com) and default port (443) are used. + *
  • Credentials are acquired automatically through Application Default Credentials. + *
  • Retries are configured for idempotent methods but not for non-idempotent methods. + *
+ * + *

The builder of this class is recursive, so contained classes are themselves builders. When + * build() is called, the tree of builders is called to create the complete settings object. + * + *

For example, to set the + * [RetrySettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.retrying.RetrySettings) + * of createSubscription: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SubscriptionAdminSettings.Builder subscriptionAdminSettingsBuilder =
+ *     SubscriptionAdminSettings.newBuilder();
+ * subscriptionAdminSettingsBuilder
+ *     .createSubscriptionSettings()
+ *     .setRetrySettings(
+ *         subscriptionAdminSettingsBuilder
+ *             .createSubscriptionSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setInitialRetryDelayDuration(Duration.ofSeconds(1))
+ *             .setInitialRpcTimeoutDuration(Duration.ofSeconds(5))
+ *             .setMaxAttempts(5)
+ *             .setMaxRetryDelayDuration(Duration.ofSeconds(30))
+ *             .setMaxRpcTimeoutDuration(Duration.ofSeconds(60))
+ *             .setRetryDelayMultiplier(1.3)
+ *             .setRpcTimeoutMultiplier(1.5)
+ *             .setTotalTimeoutDuration(Duration.ofSeconds(300))
+ *             .build());
+ * SubscriptionAdminSettings subscriptionAdminSettings = subscriptionAdminSettingsBuilder.build();
+ * }
+ * + * Please refer to the [Client Side Retry + * Guide](https://docs.cloud.google.com/java/docs/client-retries) for additional support in setting + * retries. + */ +@Generated("by gapic-generator-java") +public class SubscriptionAdminSettings extends ClientSettings { + + /** Returns the object with the settings used for calls to createSubscription. */ + public UnaryCallSettings createSubscriptionSettings() { + return ((SubscriberStubSettings) getStubSettings()).createSubscriptionSettings(); + } + + /** Returns the object with the settings used for calls to getSubscription. */ + public UnaryCallSettings getSubscriptionSettings() { + return ((SubscriberStubSettings) getStubSettings()).getSubscriptionSettings(); + } + + /** Returns the object with the settings used for calls to updateSubscription. */ + public UnaryCallSettings updateSubscriptionSettings() { + return ((SubscriberStubSettings) getStubSettings()).updateSubscriptionSettings(); + } + + /** Returns the object with the settings used for calls to listSubscriptions. */ + public PagedCallSettings< + ListSubscriptionsRequest, ListSubscriptionsResponse, ListSubscriptionsPagedResponse> + listSubscriptionsSettings() { + return ((SubscriberStubSettings) getStubSettings()).listSubscriptionsSettings(); + } + + /** Returns the object with the settings used for calls to deleteSubscription. */ + public UnaryCallSettings deleteSubscriptionSettings() { + return ((SubscriberStubSettings) getStubSettings()).deleteSubscriptionSettings(); + } + + /** Returns the object with the settings used for calls to modifyAckDeadline. */ + public UnaryCallSettings modifyAckDeadlineSettings() { + return ((SubscriberStubSettings) getStubSettings()).modifyAckDeadlineSettings(); + } + + /** Returns the object with the settings used for calls to acknowledge. */ + public UnaryCallSettings acknowledgeSettings() { + return ((SubscriberStubSettings) getStubSettings()).acknowledgeSettings(); + } + + /** Returns the object with the settings used for calls to pull. */ + public UnaryCallSettings pullSettings() { + return ((SubscriberStubSettings) getStubSettings()).pullSettings(); + } + + /** Returns the object with the settings used for calls to streamingPull. */ + public StreamingCallSettings + streamingPullSettings() { + return ((SubscriberStubSettings) getStubSettings()).streamingPullSettings(); + } + + /** Returns the object with the settings used for calls to modifyPushConfig. */ + public UnaryCallSettings modifyPushConfigSettings() { + return ((SubscriberStubSettings) getStubSettings()).modifyPushConfigSettings(); + } + + /** Returns the object with the settings used for calls to getSnapshot. */ + public UnaryCallSettings getSnapshotSettings() { + return ((SubscriberStubSettings) getStubSettings()).getSnapshotSettings(); + } + + /** Returns the object with the settings used for calls to listSnapshots. */ + public PagedCallSettings + listSnapshotsSettings() { + return ((SubscriberStubSettings) getStubSettings()).listSnapshotsSettings(); + } + + /** Returns the object with the settings used for calls to createSnapshot. */ + public UnaryCallSettings createSnapshotSettings() { + return ((SubscriberStubSettings) getStubSettings()).createSnapshotSettings(); + } + + /** Returns the object with the settings used for calls to updateSnapshot. */ + public UnaryCallSettings updateSnapshotSettings() { + return ((SubscriberStubSettings) getStubSettings()).updateSnapshotSettings(); + } + + /** Returns the object with the settings used for calls to deleteSnapshot. */ + public UnaryCallSettings deleteSnapshotSettings() { + return ((SubscriberStubSettings) getStubSettings()).deleteSnapshotSettings(); + } + + /** Returns the object with the settings used for calls to seek. */ + public UnaryCallSettings seekSettings() { + return ((SubscriberStubSettings) getStubSettings()).seekSettings(); + } + + /** Returns the object with the settings used for calls to setIamPolicy. */ + public UnaryCallSettings setIamPolicySettings() { + return ((SubscriberStubSettings) getStubSettings()).setIamPolicySettings(); + } + + /** Returns the object with the settings used for calls to getIamPolicy. */ + public UnaryCallSettings getIamPolicySettings() { + return ((SubscriberStubSettings) getStubSettings()).getIamPolicySettings(); + } + + /** Returns the object with the settings used for calls to testIamPermissions. */ + public UnaryCallSettings + testIamPermissionsSettings() { + return ((SubscriberStubSettings) getStubSettings()).testIamPermissionsSettings(); + } + + public static final SubscriptionAdminSettings create(SubscriberStubSettings stub) + throws IOException { + return new SubscriptionAdminSettings.Builder(stub.toBuilder()).build(); + } + + /** Returns a builder for the default ExecutorProvider for this service. */ + public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { + return SubscriberStubSettings.defaultExecutorProviderBuilder(); + } + + /** Returns the default service endpoint. */ + public static String getDefaultEndpoint() { + return SubscriberStubSettings.getDefaultEndpoint(); + } + + /** Returns the default service scopes. */ + public static List getDefaultServiceScopes() { + return SubscriberStubSettings.getDefaultServiceScopes(); + } + + /** Returns a builder for the default credentials for this service. */ + public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { + return SubscriberStubSettings.defaultCredentialsProviderBuilder(); + } + + /** Returns a builder for the default gRPC ChannelProvider for this service. */ + public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { + return SubscriberStubSettings.defaultGrpcTransportProviderBuilder(); + } + + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return SubscriberStubSettings.defaultHttpJsonTransportProviderBuilder(); + } + + public static TransportChannelProvider defaultTransportChannelProvider() { + return SubscriberStubSettings.defaultTransportChannelProvider(); + } + + public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + return SubscriberStubSettings.defaultApiClientHeaderProviderBuilder(); + } + + /** Returns a new gRPC builder for this class. */ + public static Builder newBuilder() { + return Builder.createDefault(); + } + + /** Returns a new REST builder for this class. */ + public static Builder newHttpJsonBuilder() { + return Builder.createHttpJsonDefault(); + } + + /** Returns a new builder for this class. */ + public static Builder newBuilder(ClientContext clientContext) { + return new Builder(clientContext); + } + + /** Returns a builder containing all the values of this settings class. */ + public Builder toBuilder() { + return new Builder(this); + } + + protected SubscriptionAdminSettings(Builder settingsBuilder) throws IOException { + super(settingsBuilder); + } + + /** Builder for SubscriptionAdminSettings. */ + public static class Builder extends ClientSettings.Builder { + + protected Builder() throws IOException { + this(((ClientContext) null)); + } + + protected Builder(ClientContext clientContext) { + super(SubscriberStubSettings.newBuilder(clientContext)); + } + + protected Builder(SubscriptionAdminSettings settings) { + super(settings.getStubSettings().toBuilder()); + } + + protected Builder(SubscriberStubSettings.Builder stubSettings) { + super(stubSettings); + } + + private static Builder createDefault() { + return new Builder(SubscriberStubSettings.newBuilder()); + } + + private static Builder createHttpJsonDefault() { + return new Builder(SubscriberStubSettings.newHttpJsonBuilder()); + } + + public SubscriberStubSettings.Builder getStubSettingsBuilder() { + return ((SubscriberStubSettings.Builder) getStubSettings()); + } + + /** + * Applies the given settings updater function to all of the unary API methods in this service. + * + *

Note: This method does not support applying settings to streaming methods. + */ + public Builder applyToAllUnaryMethods( + ApiFunction, Void> settingsUpdater) { + super.applyToAllUnaryMethods( + getStubSettingsBuilder().unaryMethodSettingsBuilders(), settingsUpdater); + return this; + } + + /** Returns the builder for the settings used for calls to createSubscription. */ + public UnaryCallSettings.Builder createSubscriptionSettings() { + return getStubSettingsBuilder().createSubscriptionSettings(); + } + + /** Returns the builder for the settings used for calls to getSubscription. */ + public UnaryCallSettings.Builder + getSubscriptionSettings() { + return getStubSettingsBuilder().getSubscriptionSettings(); + } + + /** Returns the builder for the settings used for calls to updateSubscription. */ + public UnaryCallSettings.Builder + updateSubscriptionSettings() { + return getStubSettingsBuilder().updateSubscriptionSettings(); + } + + /** Returns the builder for the settings used for calls to listSubscriptions. */ + public PagedCallSettings.Builder< + ListSubscriptionsRequest, ListSubscriptionsResponse, ListSubscriptionsPagedResponse> + listSubscriptionsSettings() { + return getStubSettingsBuilder().listSubscriptionsSettings(); + } + + /** Returns the builder for the settings used for calls to deleteSubscription. */ + public UnaryCallSettings.Builder + deleteSubscriptionSettings() { + return getStubSettingsBuilder().deleteSubscriptionSettings(); + } + + /** Returns the builder for the settings used for calls to modifyAckDeadline. */ + public UnaryCallSettings.Builder modifyAckDeadlineSettings() { + return getStubSettingsBuilder().modifyAckDeadlineSettings(); + } + + /** Returns the builder for the settings used for calls to acknowledge. */ + public UnaryCallSettings.Builder acknowledgeSettings() { + return getStubSettingsBuilder().acknowledgeSettings(); + } + + /** Returns the builder for the settings used for calls to pull. */ + public UnaryCallSettings.Builder pullSettings() { + return getStubSettingsBuilder().pullSettings(); + } + + /** Returns the builder for the settings used for calls to streamingPull. */ + public StreamingCallSettings.Builder + streamingPullSettings() { + return getStubSettingsBuilder().streamingPullSettings(); + } + + /** Returns the builder for the settings used for calls to modifyPushConfig. */ + public UnaryCallSettings.Builder modifyPushConfigSettings() { + return getStubSettingsBuilder().modifyPushConfigSettings(); + } + + /** Returns the builder for the settings used for calls to getSnapshot. */ + public UnaryCallSettings.Builder getSnapshotSettings() { + return getStubSettingsBuilder().getSnapshotSettings(); + } + + /** Returns the builder for the settings used for calls to listSnapshots. */ + public PagedCallSettings.Builder< + ListSnapshotsRequest, ListSnapshotsResponse, ListSnapshotsPagedResponse> + listSnapshotsSettings() { + return getStubSettingsBuilder().listSnapshotsSettings(); + } + + /** Returns the builder for the settings used for calls to createSnapshot. */ + public UnaryCallSettings.Builder createSnapshotSettings() { + return getStubSettingsBuilder().createSnapshotSettings(); + } + + /** Returns the builder for the settings used for calls to updateSnapshot. */ + public UnaryCallSettings.Builder updateSnapshotSettings() { + return getStubSettingsBuilder().updateSnapshotSettings(); + } + + /** Returns the builder for the settings used for calls to deleteSnapshot. */ + public UnaryCallSettings.Builder deleteSnapshotSettings() { + return getStubSettingsBuilder().deleteSnapshotSettings(); + } + + /** Returns the builder for the settings used for calls to seek. */ + public UnaryCallSettings.Builder seekSettings() { + return getStubSettingsBuilder().seekSettings(); + } + + /** Returns the builder for the settings used for calls to setIamPolicy. */ + public UnaryCallSettings.Builder setIamPolicySettings() { + return getStubSettingsBuilder().setIamPolicySettings(); + } + + /** Returns the builder for the settings used for calls to getIamPolicy. */ + public UnaryCallSettings.Builder getIamPolicySettings() { + return getStubSettingsBuilder().getIamPolicySettings(); + } + + /** Returns the builder for the settings used for calls to testIamPermissions. */ + public UnaryCallSettings.Builder + testIamPermissionsSettings() { + return getStubSettingsBuilder().testIamPermissionsSettings(); + } + + @Override + public SubscriptionAdminSettings build() throws IOException { + return new SubscriptionAdminSettings(this); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/TopicAdminClient.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/TopicAdminClient.java new file mode 100644 index 000000000000..91dfd103e688 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/TopicAdminClient.java @@ -0,0 +1,2218 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutures; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.paging.AbstractFixedSizeCollection; +import com.google.api.gax.paging.AbstractPage; +import com.google.api.gax.paging.AbstractPagedListResponse; +import com.google.api.gax.rpc.PageContext; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.cloud.pubsub.v1.stub.PublisherStub; +import com.google.cloud.pubsub.v1.stub.PublisherStubSettings; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.protobuf.FieldMask; +import com.google.pubsub.v1.DeleteTopicRequest; +import com.google.pubsub.v1.DetachSubscriptionRequest; +import com.google.pubsub.v1.DetachSubscriptionResponse; +import com.google.pubsub.v1.GetTopicRequest; +import com.google.pubsub.v1.ListTopicSnapshotsRequest; +import com.google.pubsub.v1.ListTopicSnapshotsResponse; +import com.google.pubsub.v1.ListTopicSubscriptionsRequest; +import com.google.pubsub.v1.ListTopicSubscriptionsResponse; +import com.google.pubsub.v1.ListTopicsRequest; +import com.google.pubsub.v1.ListTopicsResponse; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.PublishRequest; +import com.google.pubsub.v1.PublishResponse; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import com.google.pubsub.v1.UpdateTopicRequest; +import java.io.IOException; +import java.util.List; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Service Description: The service that an application uses to manipulate topics, and to send + * messages to a topic. + * + *

This class provides the ability to make remote calls to the backing service through method + * calls that map to API methods. Sample code to get started: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+ *   TopicName name = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+ *   Topic response = topicAdminClient.createTopic(name);
+ * }
+ * }
+ * + *

Note: close() needs to be called on the TopicAdminClient object to clean up resources such as + * threads. In the example above, try-with-resources is used, which automatically calls close(). + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Methods
MethodDescriptionMethod Variants

CreateTopic

Creates the given topic with the given name. See the [resource name rules] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • createTopic(Topic request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • createTopic(TopicName name) + *

  • createTopic(String name) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • createTopicCallable() + *

+ *

UpdateTopic

Updates an existing topic by updating the fields specified in the update mask. Note that certain properties of a topic are not modifiable.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • updateTopic(UpdateTopicRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • updateTopic(Topic topic, FieldMask updateMask) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • updateTopicCallable() + *

+ *

Publish

Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic does not exist.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • publish(PublishRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • publish(TopicName topic, List<PubsubMessage> messages) + *

  • publish(String topic, List<PubsubMessage> messages) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • publishCallable() + *

+ *

GetTopic

Gets the configuration of a topic.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • getTopic(GetTopicRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • getTopic(TopicName topic) + *

  • getTopic(String topic) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • getTopicCallable() + *

+ *

ListTopics

Lists matching topics.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • listTopics(ListTopicsRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • listTopics(ProjectName project) + *

  • listTopics(String project) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • listTopicsPagedCallable() + *

  • listTopicsCallable() + *

+ *

ListTopicSubscriptions

Lists the names of the attached subscriptions on this topic.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • listTopicSubscriptions(ListTopicSubscriptionsRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • listTopicSubscriptions(TopicName topic) + *

  • listTopicSubscriptions(String topic) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • listTopicSubscriptionsPagedCallable() + *

  • listTopicSubscriptionsCallable() + *

+ *

ListTopicSnapshots

Lists the names of the snapshots on this topic. Snapshots are used in [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in an existing subscription to the state captured by a snapshot.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • listTopicSnapshots(ListTopicSnapshotsRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • listTopicSnapshots(TopicName topic) + *

  • listTopicSnapshots(String topic) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • listTopicSnapshotsPagedCallable() + *

  • listTopicSnapshotsCallable() + *

+ *

DeleteTopic

Deletes the topic with the given name. Returns `NOT_FOUND` if the topic does not exist. After a topic is deleted, a new topic may be created with the same name; this is an entirely new topic with none of the old configuration or subscriptions. Existing subscriptions to this topic are not deleted, but their `topic` field is set to `_deleted-topic_`.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • deleteTopic(DeleteTopicRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • deleteTopic(TopicName topic) + *

  • deleteTopic(String topic) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • deleteTopicCallable() + *

+ *

DetachSubscription

Detaches a subscription from this topic. All messages retained in the subscription are dropped. Subsequent `Pull` and `StreamingPull` requests will return FAILED_PRECONDITION. If the subscription is a push subscription, pushes to the endpoint will stop.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • detachSubscription(DetachSubscriptionRequest request) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • detachSubscriptionCallable() + *

+ *

SetIamPolicy

Sets the access control policy on the specified resource. Replacesany existing policy. + *

Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • setIamPolicy(SetIamPolicyRequest request) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • setIamPolicyCallable() + *

+ *

GetIamPolicy

Gets the access control policy for a resource. Returns an empty policyif the resource exists and does not have a policy set.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • getIamPolicy(GetIamPolicyRequest request) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • getIamPolicyCallable() + *

+ *

TestIamPermissions

Returns permissions that a caller has on the specified resource. If theresource does not exist, this will return an empty set ofpermissions, not a `NOT_FOUND` error. + *

Note: This operation is designed to be used for buildingpermission-aware UIs and command-line tools, not for authorizationchecking. This operation may "fail open" without warning.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • testIamPermissions(TestIamPermissionsRequest request) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • testIamPermissionsCallable() + *

+ *
+ * + *

See the individual methods for example code. + * + *

Many parameters require resource names to be formatted in a particular way. To assist with + * these names, this class includes a format method for each type of name, and additionally a parse + * method to extract the individual identifiers contained within names that are returned. + * + *

This class can be customized by passing in a custom instance of TopicAdminSettings to + * create(). For example: + * + *

To customize credentials: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * TopicAdminSettings topicAdminSettings =
+ *     TopicAdminSettings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))
+ *         .build();
+ * TopicAdminClient topicAdminClient = TopicAdminClient.create(topicAdminSettings);
+ * }
+ * + *

To customize the endpoint: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * TopicAdminSettings topicAdminSettings =
+ *     TopicAdminSettings.newBuilder().setEndpoint(myEndpoint).build();
+ * TopicAdminClient topicAdminClient = TopicAdminClient.create(topicAdminSettings);
+ * }
+ * + *

To use REST (HTTP1.1/JSON) transport (instead of gRPC) for sending and receiving requests over + * the wire: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * TopicAdminSettings topicAdminSettings = TopicAdminSettings.newHttpJsonBuilder().build();
+ * TopicAdminClient topicAdminClient = TopicAdminClient.create(topicAdminSettings);
+ * }
+ * + *

Please refer to the GitHub repository's samples for more quickstart code snippets. + */ +@Generated("by gapic-generator-java") +public class TopicAdminClient implements BackgroundResource { + private final TopicAdminSettings settings; + private final PublisherStub stub; + + /** Constructs an instance of TopicAdminClient with default settings. */ + public static final TopicAdminClient create() throws IOException { + return create(TopicAdminSettings.newBuilder().build()); + } + + /** + * Constructs an instance of TopicAdminClient, using the given settings. The channels are created + * based on the settings passed in, or defaults for any settings that are not set. + */ + public static final TopicAdminClient create(TopicAdminSettings settings) throws IOException { + return new TopicAdminClient(settings); + } + + /** + * Constructs an instance of TopicAdminClient, using the given stub for making calls. This is for + * advanced usage - prefer using create(TopicAdminSettings). + */ + public static final TopicAdminClient create(PublisherStub stub) { + return new TopicAdminClient(stub); + } + + /** + * Constructs an instance of TopicAdminClient, using the given settings. This is protected so that + * it is easy to make a subclass, but otherwise, the static factory methods should be preferred. + */ + protected TopicAdminClient(TopicAdminSettings settings) throws IOException { + this.settings = settings; + this.stub = ((PublisherStubSettings) settings.getStubSettings()).createStub(); + } + + protected TopicAdminClient(PublisherStub stub) { + this.settings = null; + this.stub = stub; + } + + public final TopicAdminSettings getSettings() { + return settings; + } + + public PublisherStub getStub() { + return stub; + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates the given topic with the given name. See the [resource name rules] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   TopicName name = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+   *   Topic response = topicAdminClient.createTopic(name);
+   * }
+   * }
+ * + * @param name Required. Identifier. The name of the topic. It must have the format + * `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter, and contain only + * letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), + * tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters in + * length, and it must not start with `"goog"`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Topic createTopic(TopicName name) { + Topic request = Topic.newBuilder().setName(name == null ? null : name.toString()).build(); + return createTopic(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates the given topic with the given name. See the [resource name rules] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   String name = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString();
+   *   Topic response = topicAdminClient.createTopic(name);
+   * }
+   * }
+ * + * @param name Required. Identifier. The name of the topic. It must have the format + * `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter, and contain only + * letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), + * tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters in + * length, and it must not start with `"goog"`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Topic createTopic(String name) { + Topic request = Topic.newBuilder().setName(name).build(); + return createTopic(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Creates the given topic with the given name. See the <a + * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name + * rules</a>. + * + *

Sample code: + * + *


+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ProjectTopicName name = ProjectTopicName.of("[PROJECT]", "[TOPIC]");
+   *   Topic response = topicAdminClient.createTopic(name);
+   * }
+   * 
+ * + * @param name Required. The name of the topic. It must have the format + * `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter, and contain only + * letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), + * tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters in + * length, and it must not start with `"goog"`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #createTopic(TopicName)} instead. + */ + @Deprecated + public final Topic createTopic(ProjectTopicName name) { + Topic request = Topic.newBuilder().setName(name == null ? null : name.toString()).build(); + return createTopic(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates the given topic with the given name. See the [resource name rules] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   Topic request =
+   *       Topic.newBuilder()
+   *           .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .putAllLabels(new HashMap())
+   *           .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build())
+   *           .setKmsKeyName(
+   *               CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]")
+   *                   .toString())
+   *           .setSchemaSettings(SchemaSettings.newBuilder().build())
+   *           .setSatisfiesPzs(true)
+   *           .setMessageRetentionDuration(Duration.newBuilder().build())
+   *           .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build())
+   *           .addAllMessageTransforms(new ArrayList())
+   *           .putAllTags(new HashMap())
+   *           .build();
+   *   Topic response = topicAdminClient.createTopic(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Topic createTopic(Topic request) { + return createTopicCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates the given topic with the given name. See the [resource name rules] + * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   Topic request =
+   *       Topic.newBuilder()
+   *           .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .putAllLabels(new HashMap())
+   *           .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build())
+   *           .setKmsKeyName(
+   *               CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]")
+   *                   .toString())
+   *           .setSchemaSettings(SchemaSettings.newBuilder().build())
+   *           .setSatisfiesPzs(true)
+   *           .setMessageRetentionDuration(Duration.newBuilder().build())
+   *           .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build())
+   *           .addAllMessageTransforms(new ArrayList())
+   *           .putAllTags(new HashMap())
+   *           .build();
+   *   ApiFuture future = topicAdminClient.createTopicCallable().futureCall(request);
+   *   // Do something.
+   *   Topic response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable createTopicCallable() { + return stub.createTopicCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Updates an existing topic by updating the fields specified in the update mask. Note that + * certain properties of a topic are not modifiable. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   Topic topic = Topic.newBuilder().build();
+   *   FieldMask updateMask = FieldMask.newBuilder().build();
+   *   Topic response = topicAdminClient.updateTopic(topic, updateMask);
+   * }
+   * }
+ * + * @param topic Required. The updated topic object. + * @param updateMask Required. Indicates which fields in the provided topic to update. Must be + * specified and non-empty. Note that if `update_mask` contains "message_storage_policy" but + * the `message_storage_policy` is not set in the `topic` provided above, then the updated + * value is determined by the policy configured at the project or organization level. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Topic updateTopic(Topic topic, FieldMask updateMask) { + UpdateTopicRequest request = + UpdateTopicRequest.newBuilder().setTopic(topic).setUpdateMask(updateMask).build(); + return updateTopic(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Updates an existing topic by updating the fields specified in the update mask. Note that + * certain properties of a topic are not modifiable. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   UpdateTopicRequest request =
+   *       UpdateTopicRequest.newBuilder()
+   *           .setTopic(Topic.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   Topic response = topicAdminClient.updateTopic(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Topic updateTopic(UpdateTopicRequest request) { + return updateTopicCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Updates an existing topic by updating the fields specified in the update mask. Note that + * certain properties of a topic are not modifiable. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   UpdateTopicRequest request =
+   *       UpdateTopicRequest.newBuilder()
+   *           .setTopic(Topic.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   ApiFuture future = topicAdminClient.updateTopicCallable().futureCall(request);
+   *   // Do something.
+   *   Topic response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable updateTopicCallable() { + return stub.updateTopicCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic does not exist. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+   *   List messages = new ArrayList<>();
+   *   PublishResponse response = topicAdminClient.publish(topic, messages);
+   * }
+   * }
+ * + * @param topic Required. The messages in the request will be published on this topic. Format is + * `projects/{project}/topics/{topic}`. + * @param messages Required. The messages to publish. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PublishResponse publish(TopicName topic, List messages) { + PublishRequest request = + PublishRequest.newBuilder() + .setTopic(topic == null ? null : topic.toString()) + .addAllMessages(messages) + .build(); + return publish(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic does not exist. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   String topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString();
+   *   List messages = new ArrayList<>();
+   *   PublishResponse response = topicAdminClient.publish(topic, messages);
+   * }
+   * }
+ * + * @param topic Required. The messages in the request will be published on this topic. Format is + * `projects/{project}/topics/{topic}`. + * @param messages Required. The messages to publish. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PublishResponse publish(String topic, List messages) { + PublishRequest request = + PublishRequest.newBuilder().setTopic(topic).addAllMessages(messages).build(); + return publish(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic does not exist. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   PublishRequest request =
+   *       PublishRequest.newBuilder()
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .addAllMessages(new ArrayList())
+   *           .build();
+   *   PublishResponse response = topicAdminClient.publish(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final PublishResponse publish(PublishRequest request) { + return publishCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic does not exist. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   PublishRequest request =
+   *       PublishRequest.newBuilder()
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .addAllMessages(new ArrayList())
+   *           .build();
+   *   ApiFuture future = topicAdminClient.publishCallable().futureCall(request);
+   *   // Do something.
+   *   PublishResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable publishCallable() { + return stub.publishCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration of a topic. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+   *   Topic response = topicAdminClient.getTopic(topic);
+   * }
+   * }
+ * + * @param topic Required. The name of the topic to get. Format is + * `projects/{project}/topics/{topic}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Topic getTopic(TopicName topic) { + GetTopicRequest request = + GetTopicRequest.newBuilder().setTopic(topic == null ? null : topic.toString()).build(); + return getTopic(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration of a topic. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   String topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString();
+   *   Topic response = topicAdminClient.getTopic(topic);
+   * }
+   * }
+ * + * @param topic Required. The name of the topic to get. Format is + * `projects/{project}/topics/{topic}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Topic getTopic(String topic) { + GetTopicRequest request = GetTopicRequest.newBuilder().setTopic(topic).build(); + return getTopic(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Gets the configuration of a topic. + * + *

Sample code: + * + *


+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ProjectTopicName topic = ProjectTopicName.of("[PROJECT]", "[TOPIC]");
+   *   Topic response = topicAdminClient.getTopic(topic);
+   * }
+   * 
+ * + * @param topic Required. The name of the topic to get. Format is + * `projects/{project}/topics/{topic}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #getTopic(TopicName)} instead. + */ + @Deprecated + public final Topic getTopic(ProjectTopicName topic) { + GetTopicRequest request = + GetTopicRequest.newBuilder().setTopic(topic == null ? null : topic.toString()).build(); + return getTopic(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration of a topic. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   GetTopicRequest request =
+   *       GetTopicRequest.newBuilder()
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .build();
+   *   Topic response = topicAdminClient.getTopic(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Topic getTopic(GetTopicRequest request) { + return getTopicCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the configuration of a topic. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   GetTopicRequest request =
+   *       GetTopicRequest.newBuilder()
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .build();
+   *   ApiFuture future = topicAdminClient.getTopicCallable().futureCall(request);
+   *   // Do something.
+   *   Topic response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable getTopicCallable() { + return stub.getTopicCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists matching topics. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ProjectName project = ProjectName.of("[PROJECT]");
+   *   for (Topic element : topicAdminClient.listTopics(project).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param project Required. The name of the project in which to list topics. Format is + * `projects/{project-id}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListTopicsPagedResponse listTopics(ProjectName project) { + ListTopicsRequest request = + ListTopicsRequest.newBuilder() + .setProject(project == null ? null : project.toString()) + .build(); + return listTopics(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists matching topics. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   String project = ProjectName.of("[PROJECT]").toString();
+   *   for (Topic element : topicAdminClient.listTopics(project).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param project Required. The name of the project in which to list topics. Format is + * `projects/{project-id}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListTopicsPagedResponse listTopics(String project) { + ListTopicsRequest request = ListTopicsRequest.newBuilder().setProject(project).build(); + return listTopics(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists matching topics. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ListTopicsRequest request =
+   *       ListTopicsRequest.newBuilder()
+   *           .setProject(ProjectName.of("[PROJECT]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   for (Topic element : topicAdminClient.listTopics(request).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListTopicsPagedResponse listTopics(ListTopicsRequest request) { + return listTopicsPagedCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists matching topics. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ListTopicsRequest request =
+   *       ListTopicsRequest.newBuilder()
+   *           .setProject(ProjectName.of("[PROJECT]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   ApiFuture future = topicAdminClient.listTopicsPagedCallable().futureCall(request);
+   *   // Do something.
+   *   for (Topic element : future.get().iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable listTopicsPagedCallable() { + return stub.listTopicsPagedCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists matching topics. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ListTopicsRequest request =
+   *       ListTopicsRequest.newBuilder()
+   *           .setProject(ProjectName.of("[PROJECT]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   while (true) {
+   *     ListTopicsResponse response = topicAdminClient.listTopicsCallable().call(request);
+   *     for (Topic element : response.getTopicsList()) {
+   *       // doThingsWith(element);
+   *     }
+   *     String nextPageToken = response.getNextPageToken();
+   *     if (!Strings.isNullOrEmpty(nextPageToken)) {
+   *       request = request.toBuilder().setPageToken(nextPageToken).build();
+   *     } else {
+   *       break;
+   *     }
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable listTopicsCallable() { + return stub.listTopicsCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the names of the attached subscriptions on this topic. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+   *   for (String element : topicAdminClient.listTopicSubscriptions(topic).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param topic Required. The name of the topic that subscriptions are attached to. Format is + * `projects/{project}/topics/{topic}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListTopicSubscriptionsPagedResponse listTopicSubscriptions(TopicName topic) { + ListTopicSubscriptionsRequest request = + ListTopicSubscriptionsRequest.newBuilder() + .setTopic(topic == null ? null : topic.toString()) + .build(); + return listTopicSubscriptions(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the names of the attached subscriptions on this topic. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   String topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString();
+   *   for (String element : topicAdminClient.listTopicSubscriptions(topic).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param topic Required. The name of the topic that subscriptions are attached to. Format is + * `projects/{project}/topics/{topic}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListTopicSubscriptionsPagedResponse listTopicSubscriptions(String topic) { + ListTopicSubscriptionsRequest request = + ListTopicSubscriptionsRequest.newBuilder().setTopic(topic).build(); + return listTopicSubscriptions(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Lists the names of the subscriptions on this topic. + * + *

Sample code: + * + *


+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ProjectTopicName topic = ProjectTopicName.of("[PROJECT]", "[TOPIC]");
+   *   for (ProjectSubscriptionName element : topicAdminClient.listTopicSubscriptions(topic).iterateAllAsProjectSubscriptionName()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * 
+ * + * @param topic Required. The name of the topic that subscriptions are attached to. Format is + * `projects/{project}/topics/{topic}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #listTopicSubscriptions(TopicName)} instead. + */ + @Deprecated + public final ListTopicSubscriptionsPagedResponse listTopicSubscriptions(ProjectTopicName topic) { + ListTopicSubscriptionsRequest request = + ListTopicSubscriptionsRequest.newBuilder() + .setTopic(topic == null ? null : topic.toString()) + .build(); + return listTopicSubscriptions(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the names of the attached subscriptions on this topic. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ListTopicSubscriptionsRequest request =
+   *       ListTopicSubscriptionsRequest.newBuilder()
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   for (String element : topicAdminClient.listTopicSubscriptions(request).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListTopicSubscriptionsPagedResponse listTopicSubscriptions( + ListTopicSubscriptionsRequest request) { + return listTopicSubscriptionsPagedCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the names of the attached subscriptions on this topic. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ListTopicSubscriptionsRequest request =
+   *       ListTopicSubscriptionsRequest.newBuilder()
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   ApiFuture future =
+   *       topicAdminClient.listTopicSubscriptionsPagedCallable().futureCall(request);
+   *   // Do something.
+   *   for (String element : future.get().iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable + listTopicSubscriptionsPagedCallable() { + return stub.listTopicSubscriptionsPagedCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the names of the attached subscriptions on this topic. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ListTopicSubscriptionsRequest request =
+   *       ListTopicSubscriptionsRequest.newBuilder()
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   while (true) {
+   *     ListTopicSubscriptionsResponse response =
+   *         topicAdminClient.listTopicSubscriptionsCallable().call(request);
+   *     for (String element : response.getSubscriptionsList()) {
+   *       // doThingsWith(element);
+   *     }
+   *     String nextPageToken = response.getNextPageToken();
+   *     if (!Strings.isNullOrEmpty(nextPageToken)) {
+   *       request = request.toBuilder().setPageToken(nextPageToken).build();
+   *     } else {
+   *       break;
+   *     }
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable + listTopicSubscriptionsCallable() { + return stub.listTopicSubscriptionsCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the names of the snapshots on this topic. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+   *   for (String element : topicAdminClient.listTopicSnapshots(topic).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param topic Required. The name of the topic that snapshots are attached to. Format is + * `projects/{project}/topics/{topic}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListTopicSnapshotsPagedResponse listTopicSnapshots(TopicName topic) { + ListTopicSnapshotsRequest request = + ListTopicSnapshotsRequest.newBuilder() + .setTopic(topic == null ? null : topic.toString()) + .build(); + return listTopicSnapshots(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the names of the snapshots on this topic. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   String topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString();
+   *   for (String element : topicAdminClient.listTopicSnapshots(topic).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param topic Required. The name of the topic that snapshots are attached to. Format is + * `projects/{project}/topics/{topic}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListTopicSnapshotsPagedResponse listTopicSnapshots(String topic) { + ListTopicSnapshotsRequest request = + ListTopicSnapshotsRequest.newBuilder().setTopic(topic).build(); + return listTopicSnapshots(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the names of the snapshots on this topic. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ListTopicSnapshotsRequest request =
+   *       ListTopicSnapshotsRequest.newBuilder()
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   for (String element : topicAdminClient.listTopicSnapshots(request).iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ListTopicSnapshotsPagedResponse listTopicSnapshots( + ListTopicSnapshotsRequest request) { + return listTopicSnapshotsPagedCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the names of the snapshots on this topic. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ListTopicSnapshotsRequest request =
+   *       ListTopicSnapshotsRequest.newBuilder()
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   ApiFuture future =
+   *       topicAdminClient.listTopicSnapshotsPagedCallable().futureCall(request);
+   *   // Do something.
+   *   for (String element : future.get().iterateAll()) {
+   *     // doThingsWith(element);
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable + listTopicSnapshotsPagedCallable() { + return stub.listTopicSnapshotsPagedCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Lists the names of the snapshots on this topic. Snapshots are used in + * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to + * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of + * messages in an existing subscription to the state captured by a snapshot. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ListTopicSnapshotsRequest request =
+   *       ListTopicSnapshotsRequest.newBuilder()
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .setPageSize(883849137)
+   *           .setPageToken("pageToken873572522")
+   *           .build();
+   *   while (true) {
+   *     ListTopicSnapshotsResponse response =
+   *         topicAdminClient.listTopicSnapshotsCallable().call(request);
+   *     for (String element : response.getSnapshotsList()) {
+   *       // doThingsWith(element);
+   *     }
+   *     String nextPageToken = response.getNextPageToken();
+   *     if (!Strings.isNullOrEmpty(nextPageToken)) {
+   *       request = request.toBuilder().setPageToken(nextPageToken).build();
+   *     } else {
+   *       break;
+   *     }
+   *   }
+   * }
+   * }
+ */ + public final UnaryCallable + listTopicSnapshotsCallable() { + return stub.listTopicSnapshotsCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes the topic with the given name. Returns `NOT_FOUND` if the topic does not exist. After a + * topic is deleted, a new topic may be created with the same name; this is an entirely new topic + * with none of the old configuration or subscriptions. Existing subscriptions to this topic are + * not deleted, but their `topic` field is set to `_deleted-topic_`. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+   *   topicAdminClient.deleteTopic(topic);
+   * }
+   * }
+ * + * @param topic Required. Name of the topic to delete. Format is + * `projects/{project}/topics/{topic}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deleteTopic(TopicName topic) { + DeleteTopicRequest request = + DeleteTopicRequest.newBuilder().setTopic(topic == null ? null : topic.toString()).build(); + deleteTopic(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes the topic with the given name. Returns `NOT_FOUND` if the topic does not exist. After a + * topic is deleted, a new topic may be created with the same name; this is an entirely new topic + * with none of the old configuration or subscriptions. Existing subscriptions to this topic are + * not deleted, but their `topic` field is set to `_deleted-topic_`. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   String topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString();
+   *   topicAdminClient.deleteTopic(topic);
+   * }
+   * }
+ * + * @param topic Required. Name of the topic to delete. Format is + * `projects/{project}/topics/{topic}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deleteTopic(String topic) { + DeleteTopicRequest request = DeleteTopicRequest.newBuilder().setTopic(topic).build(); + deleteTopic(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Deletes the topic with the given name. Returns `NOT_FOUND` if the topic does not exist. After a + * topic is deleted, a new topic may be created with the same name; this is an entirely new topic + * with none of the old configuration or subscriptions. Existing subscriptions to this topic are + * not deleted, but their `topic` field is set to `_deleted-topic_`. + * + *

Sample code: + * + *


+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   ProjectTopicName topic = ProjectTopicName.of("[PROJECT]", "[TOPIC]");
+   *   topicAdminClient.deleteTopic(topic);
+   * }
+   * 
+ * + * @param topic Required. Name of the topic to delete. Format is + * `projects/{project}/topics/{topic}`. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #deleteTopic(TopicName)} instead. + */ + @Deprecated + public final void deleteTopic(ProjectTopicName topic) { + DeleteTopicRequest request = + DeleteTopicRequest.newBuilder().setTopic(topic == null ? null : topic.toString()).build(); + deleteTopic(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes the topic with the given name. Returns `NOT_FOUND` if the topic does not exist. After a + * topic is deleted, a new topic may be created with the same name; this is an entirely new topic + * with none of the old configuration or subscriptions. Existing subscriptions to this topic are + * not deleted, but their `topic` field is set to `_deleted-topic_`. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   DeleteTopicRequest request =
+   *       DeleteTopicRequest.newBuilder()
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .build();
+   *   topicAdminClient.deleteTopic(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final void deleteTopic(DeleteTopicRequest request) { + deleteTopicCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Deletes the topic with the given name. Returns `NOT_FOUND` if the topic does not exist. After a + * topic is deleted, a new topic may be created with the same name; this is an entirely new topic + * with none of the old configuration or subscriptions. Existing subscriptions to this topic are + * not deleted, but their `topic` field is set to `_deleted-topic_`. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   DeleteTopicRequest request =
+   *       DeleteTopicRequest.newBuilder()
+   *           .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+   *           .build();
+   *   ApiFuture future = topicAdminClient.deleteTopicCallable().futureCall(request);
+   *   // Do something.
+   *   future.get();
+   * }
+   * }
+ */ + public final UnaryCallable deleteTopicCallable() { + return stub.deleteTopicCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Detaches a subscription from this topic. All messages retained in the subscription are dropped. + * Subsequent `Pull` and `StreamingPull` requests will return FAILED_PRECONDITION. If the + * subscription is a push subscription, pushes to the endpoint will stop. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   DetachSubscriptionRequest request =
+   *       DetachSubscriptionRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .build();
+   *   DetachSubscriptionResponse response = topicAdminClient.detachSubscription(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final DetachSubscriptionResponse detachSubscription(DetachSubscriptionRequest request) { + return detachSubscriptionCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Detaches a subscription from this topic. All messages retained in the subscription are dropped. + * Subsequent `Pull` and `StreamingPull` requests will return FAILED_PRECONDITION. If the + * subscription is a push subscription, pushes to the endpoint will stop. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   DetachSubscriptionRequest request =
+   *       DetachSubscriptionRequest.newBuilder()
+   *           .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+   *           .build();
+   *   ApiFuture future =
+   *       topicAdminClient.detachSubscriptionCallable().futureCall(request);
+   *   // Do something.
+   *   DetachSubscriptionResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable + detachSubscriptionCallable() { + return stub.detachSubscriptionCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Sets the access control policy on the specified resource. Replacesany existing policy. + * + *

Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   SetIamPolicyRequest request =
+   *       SetIamPolicyRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setPolicy(Policy.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   Policy response = topicAdminClient.setIamPolicy(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Policy setIamPolicy(SetIamPolicyRequest request) { + return setIamPolicyCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Sets the access control policy on the specified resource. Replaces any existing policy. + * + *

Can return Public Errors: NOT_FOUND, INVALID_ARGUMENT and PERMISSION_DENIED + * + *

Sample code: + * + *


+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   String formattedResource = ProjectTopicName.format("[PROJECT]", "[TOPIC]");
+   *   Policy policy = Policy.newBuilder().build();
+   *   Policy response = topicAdminClient.setIamPolicy(formattedResource, policy);
+   * }
+   * 
+ * + * @param resource REQUIRED: The resource for which the policy is being specified. See the + * operation documentation for the appropriate value for this field. + * @param policy REQUIRED: The complete policy to be applied to the `resource`. The size of the + * policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud + * Platform services (such as Projects) might reject them. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #setIamPolicy(SetIamPolicyRequest)} instead. + */ + @Deprecated + public final Policy setIamPolicy(String resource, Policy policy) { + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder().setResource(resource).setPolicy(policy).build(); + return setIamPolicy(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Sets the access control policy on the specified resource. Replacesany existing policy. + * + *

Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   SetIamPolicyRequest request =
+   *       SetIamPolicyRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setPolicy(Policy.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   ApiFuture future = topicAdminClient.setIamPolicyCallable().futureCall(request);
+   *   // Do something.
+   *   Policy response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable setIamPolicyCallable() { + return stub.setIamPolicyCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the access control policy for a resource. Returns an empty policyif the resource exists + * and does not have a policy set. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   GetIamPolicyRequest request =
+   *       GetIamPolicyRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setOptions(GetPolicyOptions.newBuilder().build())
+   *           .build();
+   *   Policy response = topicAdminClient.getIamPolicy(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Policy getIamPolicy(GetIamPolicyRequest request) { + return getIamPolicyCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Gets the access control policy for a resource. Returns an empty policy if the resource exists + * and does not have a policy set. + * + *

Sample code: + * + *


+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   String formattedResource = ProjectTopicName.format("[PROJECT]", "[TOPIC]");
+   *   Policy response = topicAdminClient.getIamPolicy(formattedResource);
+   * }
+   * 
+ * + * @param resource REQUIRED: The resource for which the policy is being requested. See the + * operation documentation for the appropriate value for this field. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #getIamPolicy(GetIamPolicyRequest)} instead. + */ + @Deprecated + public final Policy getIamPolicy(String resource) { + GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder().setResource(resource).build(); + return getIamPolicy(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Gets the access control policy for a resource. Returns an empty policyif the resource exists + * and does not have a policy set. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   GetIamPolicyRequest request =
+   *       GetIamPolicyRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .setOptions(GetPolicyOptions.newBuilder().build())
+   *           .build();
+   *   ApiFuture future = topicAdminClient.getIamPolicyCallable().futureCall(request);
+   *   // Do something.
+   *   Policy response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable getIamPolicyCallable() { + return stub.getIamPolicyCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Returns permissions that a caller has on the specified resource. If theresource does not exist, + * this will return an empty set ofpermissions, not a `NOT_FOUND` error. + * + *

Note: This operation is designed to be used for buildingpermission-aware UIs and + * command-line tools, not for authorizationchecking. This operation may "fail open" without + * warning. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   TestIamPermissionsRequest request =
+   *       TestIamPermissionsRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .addAllPermissions(new ArrayList())
+   *           .build();
+   *   TestIamPermissionsResponse response = topicAdminClient.testIamPermissions(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final TestIamPermissionsResponse testIamPermissions(TestIamPermissionsRequest request) { + return testIamPermissionsCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD + /** + * Returns permissions that a caller has on the specified resource. If the resource does not + * exist, this will return an empty set of permissions, not a NOT_FOUND error. + * + *

Note: This operation is designed to be used for building permission-aware UIs and + * command-line tools, not for authorization checking. This operation may "fail open" without + * warning. + * + *

Sample code: + * + *


+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   String formattedResource = ProjectTopicName.format("[PROJECT]", "[TOPIC]");
+   *   List<String> permissions = new ArrayList<>();
+   *   TestIamPermissionsResponse response = topicAdminClient.testIamPermissions(formattedResource, permissions);
+   * }
+   * 
+ * + * @param resource REQUIRED: The resource for which the policy detail is being requested. See the + * operation documentation for the appropriate value for this field. + * @param permissions The set of permissions to check for the `resource`. Permissions with + * wildcards (such as '*' or 'storage.*') are not allowed. For more information see + * [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions). + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + * @deprecated Use {@link #testIamPermissions(TestIamPermissionsRequest)} instead. + */ + @Deprecated + public final TestIamPermissionsResponse testIamPermissions( + String resource, List permissions) { + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(resource) + .addAllPermissions(permissions) + .build(); + return testIamPermissions(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Returns permissions that a caller has on the specified resource. If theresource does not exist, + * this will return an empty set ofpermissions, not a `NOT_FOUND` error. + * + *

Note: This operation is designed to be used for buildingpermission-aware UIs and + * command-line tools, not for authorizationchecking. This operation may "fail open" without + * warning. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+   *   TestIamPermissionsRequest request =
+   *       TestIamPermissionsRequest.newBuilder()
+   *           .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+   *           .addAllPermissions(new ArrayList())
+   *           .build();
+   *   ApiFuture future =
+   *       topicAdminClient.testIamPermissionsCallable().futureCall(request);
+   *   // Do something.
+   *   TestIamPermissionsResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable + testIamPermissionsCallable() { + return stub.testIamPermissionsCallable(); + } + + @Override + public final void close() { + stub.close(); + } + + @Override + public void shutdown() { + stub.shutdown(); + } + + @Override + public boolean isShutdown() { + return stub.isShutdown(); + } + + @Override + public boolean isTerminated() { + return stub.isTerminated(); + } + + @Override + public void shutdownNow() { + stub.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return stub.awaitTermination(duration, unit); + } + + public static class ListTopicsPagedResponse + extends AbstractPagedListResponse< + ListTopicsRequest, + ListTopicsResponse, + Topic, + ListTopicsPage, + ListTopicsFixedSizeCollection> { + + public static ApiFuture createAsync( + PageContext context, + ApiFuture futureResponse) { + ApiFuture futurePage = + ListTopicsPage.createEmptyPage().createPageAsync(context, futureResponse); + return ApiFutures.transform( + futurePage, input -> new ListTopicsPagedResponse(input), MoreExecutors.directExecutor()); + } + + private ListTopicsPagedResponse(ListTopicsPage page) { + super(page, ListTopicsFixedSizeCollection.createEmptyCollection()); + } + } + + public static class ListTopicsPage + extends AbstractPage { + + private ListTopicsPage( + PageContext context, + ListTopicsResponse response) { + super(context, response); + } + + private static ListTopicsPage createEmptyPage() { + return new ListTopicsPage(null, null); + } + + @Override + protected ListTopicsPage createPage( + PageContext context, + ListTopicsResponse response) { + return new ListTopicsPage(context, response); + } + + @Override + public ApiFuture createPageAsync( + PageContext context, + ApiFuture futureResponse) { + return super.createPageAsync(context, futureResponse); + } + } + + public static class ListTopicsFixedSizeCollection + extends AbstractFixedSizeCollection< + ListTopicsRequest, + ListTopicsResponse, + Topic, + ListTopicsPage, + ListTopicsFixedSizeCollection> { + + private ListTopicsFixedSizeCollection(List pages, int collectionSize) { + super(pages, collectionSize); + } + + private static ListTopicsFixedSizeCollection createEmptyCollection() { + return new ListTopicsFixedSizeCollection(null, 0); + } + + @Override + protected ListTopicsFixedSizeCollection createCollection( + List pages, int collectionSize) { + return new ListTopicsFixedSizeCollection(pages, collectionSize); + } + } + + public static class ListTopicSubscriptionsPagedResponse + extends AbstractPagedListResponse< + ListTopicSubscriptionsRequest, + ListTopicSubscriptionsResponse, + String, + ListTopicSubscriptionsPage, + ListTopicSubscriptionsFixedSizeCollection> { + + public static ApiFuture createAsync( + PageContext context, + ApiFuture futureResponse) { + ApiFuture futurePage = + ListTopicSubscriptionsPage.createEmptyPage().createPageAsync(context, futureResponse); + return ApiFutures.transform( + futurePage, + input -> new ListTopicSubscriptionsPagedResponse(input), + MoreExecutors.directExecutor()); + } + + private ListTopicSubscriptionsPagedResponse(ListTopicSubscriptionsPage page) { + super(page, ListTopicSubscriptionsFixedSizeCollection.createEmptyCollection()); + } + } + + public static class ListTopicSubscriptionsPage + extends AbstractPage< + ListTopicSubscriptionsRequest, + ListTopicSubscriptionsResponse, + String, + ListTopicSubscriptionsPage> { + + private ListTopicSubscriptionsPage( + PageContext context, + ListTopicSubscriptionsResponse response) { + super(context, response); + } + + private static ListTopicSubscriptionsPage createEmptyPage() { + return new ListTopicSubscriptionsPage(null, null); + } + + @Override + protected ListTopicSubscriptionsPage createPage( + PageContext context, + ListTopicSubscriptionsResponse response) { + return new ListTopicSubscriptionsPage(context, response); + } + + @Override + public ApiFuture createPageAsync( + PageContext context, + ApiFuture futureResponse) { + return super.createPageAsync(context, futureResponse); + } + } + + public static class ListTopicSubscriptionsFixedSizeCollection + extends AbstractFixedSizeCollection< + ListTopicSubscriptionsRequest, + ListTopicSubscriptionsResponse, + String, + ListTopicSubscriptionsPage, + ListTopicSubscriptionsFixedSizeCollection> { + + private ListTopicSubscriptionsFixedSizeCollection( + List pages, int collectionSize) { + super(pages, collectionSize); + } + + private static ListTopicSubscriptionsFixedSizeCollection createEmptyCollection() { + return new ListTopicSubscriptionsFixedSizeCollection(null, 0); + } + + @Override + protected ListTopicSubscriptionsFixedSizeCollection createCollection( + List pages, int collectionSize) { + return new ListTopicSubscriptionsFixedSizeCollection(pages, collectionSize); + } + } + + public static class ListTopicSnapshotsPagedResponse + extends AbstractPagedListResponse< + ListTopicSnapshotsRequest, + ListTopicSnapshotsResponse, + String, + ListTopicSnapshotsPage, + ListTopicSnapshotsFixedSizeCollection> { + + public static ApiFuture createAsync( + PageContext context, + ApiFuture futureResponse) { + ApiFuture futurePage = + ListTopicSnapshotsPage.createEmptyPage().createPageAsync(context, futureResponse); + return ApiFutures.transform( + futurePage, + input -> new ListTopicSnapshotsPagedResponse(input), + MoreExecutors.directExecutor()); + } + + private ListTopicSnapshotsPagedResponse(ListTopicSnapshotsPage page) { + super(page, ListTopicSnapshotsFixedSizeCollection.createEmptyCollection()); + } + } + + public static class ListTopicSnapshotsPage + extends AbstractPage< + ListTopicSnapshotsRequest, ListTopicSnapshotsResponse, String, ListTopicSnapshotsPage> { + + private ListTopicSnapshotsPage( + PageContext context, + ListTopicSnapshotsResponse response) { + super(context, response); + } + + private static ListTopicSnapshotsPage createEmptyPage() { + return new ListTopicSnapshotsPage(null, null); + } + + @Override + protected ListTopicSnapshotsPage createPage( + PageContext context, + ListTopicSnapshotsResponse response) { + return new ListTopicSnapshotsPage(context, response); + } + + @Override + public ApiFuture createPageAsync( + PageContext context, + ApiFuture futureResponse) { + return super.createPageAsync(context, futureResponse); + } + } + + public static class ListTopicSnapshotsFixedSizeCollection + extends AbstractFixedSizeCollection< + ListTopicSnapshotsRequest, + ListTopicSnapshotsResponse, + String, + ListTopicSnapshotsPage, + ListTopicSnapshotsFixedSizeCollection> { + + private ListTopicSnapshotsFixedSizeCollection( + List pages, int collectionSize) { + super(pages, collectionSize); + } + + private static ListTopicSnapshotsFixedSizeCollection createEmptyCollection() { + return new ListTopicSnapshotsFixedSizeCollection(null, 0); + } + + @Override + protected ListTopicSnapshotsFixedSizeCollection createCollection( + List pages, int collectionSize) { + return new ListTopicSnapshotsFixedSizeCollection(pages, collectionSize); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/TopicAdminSettings.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/TopicAdminSettings.java new file mode 100644 index 000000000000..4928dd762597 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/TopicAdminSettings.java @@ -0,0 +1,367 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSubscriptionsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicsPagedResponse; + +import com.google.api.core.ApiFunction; +import com.google.api.core.BetaApi; +import com.google.api.gax.core.GoogleCredentialsProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.BatchingCallSettings; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.ClientSettings; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.cloud.pubsub.v1.stub.PublisherStubSettings; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.DeleteTopicRequest; +import com.google.pubsub.v1.DetachSubscriptionRequest; +import com.google.pubsub.v1.DetachSubscriptionResponse; +import com.google.pubsub.v1.GetTopicRequest; +import com.google.pubsub.v1.ListTopicSnapshotsRequest; +import com.google.pubsub.v1.ListTopicSnapshotsResponse; +import com.google.pubsub.v1.ListTopicSubscriptionsRequest; +import com.google.pubsub.v1.ListTopicSubscriptionsResponse; +import com.google.pubsub.v1.ListTopicsRequest; +import com.google.pubsub.v1.ListTopicsResponse; +import com.google.pubsub.v1.PublishRequest; +import com.google.pubsub.v1.PublishResponse; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.UpdateTopicRequest; +import java.io.IOException; +import java.util.List; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Settings class to configure an instance of {@link TopicAdminClient}. + * + *

The default instance has everything set to sensible defaults: + * + *

    + *
  • The default service address (pubsub.googleapis.com) and default port (443) are used. + *
  • Credentials are acquired automatically through Application Default Credentials. + *
  • Retries are configured for idempotent methods but not for non-idempotent methods. + *
+ * + *

The builder of this class is recursive, so contained classes are themselves builders. When + * build() is called, the tree of builders is called to create the complete settings object. + * + *

For example, to set the + * [RetrySettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.retrying.RetrySettings) + * of createTopic: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * TopicAdminSettings.Builder topicAdminSettingsBuilder = TopicAdminSettings.newBuilder();
+ * topicAdminSettingsBuilder
+ *     .createTopicSettings()
+ *     .setRetrySettings(
+ *         topicAdminSettingsBuilder
+ *             .createTopicSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setInitialRetryDelayDuration(Duration.ofSeconds(1))
+ *             .setInitialRpcTimeoutDuration(Duration.ofSeconds(5))
+ *             .setMaxAttempts(5)
+ *             .setMaxRetryDelayDuration(Duration.ofSeconds(30))
+ *             .setMaxRpcTimeoutDuration(Duration.ofSeconds(60))
+ *             .setRetryDelayMultiplier(1.3)
+ *             .setRpcTimeoutMultiplier(1.5)
+ *             .setTotalTimeoutDuration(Duration.ofSeconds(300))
+ *             .build());
+ * TopicAdminSettings topicAdminSettings = topicAdminSettingsBuilder.build();
+ * }
+ * + * Please refer to the [Client Side Retry + * Guide](https://docs.cloud.google.com/java/docs/client-retries) for additional support in setting + * retries. + */ +@Generated("by gapic-generator-java") +public class TopicAdminSettings extends ClientSettings { + + /** Returns the object with the settings used for calls to createTopic. */ + public UnaryCallSettings createTopicSettings() { + return ((PublisherStubSettings) getStubSettings()).createTopicSettings(); + } + + /** Returns the object with the settings used for calls to updateTopic. */ + public UnaryCallSettings updateTopicSettings() { + return ((PublisherStubSettings) getStubSettings()).updateTopicSettings(); + } + + /** Returns the object with the settings used for calls to publish. */ + public BatchingCallSettings publishSettings() { + return ((PublisherStubSettings) getStubSettings()).publishSettings(); + } + + /** Returns the object with the settings used for calls to getTopic. */ + public UnaryCallSettings getTopicSettings() { + return ((PublisherStubSettings) getStubSettings()).getTopicSettings(); + } + + /** Returns the object with the settings used for calls to listTopics. */ + public PagedCallSettings + listTopicsSettings() { + return ((PublisherStubSettings) getStubSettings()).listTopicsSettings(); + } + + /** Returns the object with the settings used for calls to listTopicSubscriptions. */ + public PagedCallSettings< + ListTopicSubscriptionsRequest, + ListTopicSubscriptionsResponse, + ListTopicSubscriptionsPagedResponse> + listTopicSubscriptionsSettings() { + return ((PublisherStubSettings) getStubSettings()).listTopicSubscriptionsSettings(); + } + + /** Returns the object with the settings used for calls to listTopicSnapshots. */ + public PagedCallSettings< + ListTopicSnapshotsRequest, ListTopicSnapshotsResponse, ListTopicSnapshotsPagedResponse> + listTopicSnapshotsSettings() { + return ((PublisherStubSettings) getStubSettings()).listTopicSnapshotsSettings(); + } + + /** Returns the object with the settings used for calls to deleteTopic. */ + public UnaryCallSettings deleteTopicSettings() { + return ((PublisherStubSettings) getStubSettings()).deleteTopicSettings(); + } + + /** Returns the object with the settings used for calls to detachSubscription. */ + public UnaryCallSettings + detachSubscriptionSettings() { + return ((PublisherStubSettings) getStubSettings()).detachSubscriptionSettings(); + } + + /** Returns the object with the settings used for calls to setIamPolicy. */ + public UnaryCallSettings setIamPolicySettings() { + return ((PublisherStubSettings) getStubSettings()).setIamPolicySettings(); + } + + /** Returns the object with the settings used for calls to getIamPolicy. */ + public UnaryCallSettings getIamPolicySettings() { + return ((PublisherStubSettings) getStubSettings()).getIamPolicySettings(); + } + + /** Returns the object with the settings used for calls to testIamPermissions. */ + public UnaryCallSettings + testIamPermissionsSettings() { + return ((PublisherStubSettings) getStubSettings()).testIamPermissionsSettings(); + } + + public static final TopicAdminSettings create(PublisherStubSettings stub) throws IOException { + return new TopicAdminSettings.Builder(stub.toBuilder()).build(); + } + + /** Returns a builder for the default ExecutorProvider for this service. */ + public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { + return PublisherStubSettings.defaultExecutorProviderBuilder(); + } + + /** Returns the default service endpoint. */ + public static String getDefaultEndpoint() { + return PublisherStubSettings.getDefaultEndpoint(); + } + + /** Returns the default service scopes. */ + public static List getDefaultServiceScopes() { + return PublisherStubSettings.getDefaultServiceScopes(); + } + + /** Returns a builder for the default credentials for this service. */ + public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { + return PublisherStubSettings.defaultCredentialsProviderBuilder(); + } + + /** Returns a builder for the default gRPC ChannelProvider for this service. */ + public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { + return PublisherStubSettings.defaultGrpcTransportProviderBuilder(); + } + + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return PublisherStubSettings.defaultHttpJsonTransportProviderBuilder(); + } + + public static TransportChannelProvider defaultTransportChannelProvider() { + return PublisherStubSettings.defaultTransportChannelProvider(); + } + + public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + return PublisherStubSettings.defaultApiClientHeaderProviderBuilder(); + } + + /** Returns a new gRPC builder for this class. */ + public static Builder newBuilder() { + return Builder.createDefault(); + } + + /** Returns a new REST builder for this class. */ + public static Builder newHttpJsonBuilder() { + return Builder.createHttpJsonDefault(); + } + + /** Returns a new builder for this class. */ + public static Builder newBuilder(ClientContext clientContext) { + return new Builder(clientContext); + } + + /** Returns a builder containing all the values of this settings class. */ + public Builder toBuilder() { + return new Builder(this); + } + + protected TopicAdminSettings(Builder settingsBuilder) throws IOException { + super(settingsBuilder); + } + + /** Builder for TopicAdminSettings. */ + public static class Builder extends ClientSettings.Builder { + + protected Builder() throws IOException { + this(((ClientContext) null)); + } + + protected Builder(ClientContext clientContext) { + super(PublisherStubSettings.newBuilder(clientContext)); + } + + protected Builder(TopicAdminSettings settings) { + super(settings.getStubSettings().toBuilder()); + } + + protected Builder(PublisherStubSettings.Builder stubSettings) { + super(stubSettings); + } + + private static Builder createDefault() { + return new Builder(PublisherStubSettings.newBuilder()); + } + + private static Builder createHttpJsonDefault() { + return new Builder(PublisherStubSettings.newHttpJsonBuilder()); + } + + public PublisherStubSettings.Builder getStubSettingsBuilder() { + return ((PublisherStubSettings.Builder) getStubSettings()); + } + + /** + * Applies the given settings updater function to all of the unary API methods in this service. + * + *

Note: This method does not support applying settings to streaming methods. + */ + public Builder applyToAllUnaryMethods( + ApiFunction, Void> settingsUpdater) { + super.applyToAllUnaryMethods( + getStubSettingsBuilder().unaryMethodSettingsBuilders(), settingsUpdater); + return this; + } + + /** Returns the builder for the settings used for calls to createTopic. */ + public UnaryCallSettings.Builder createTopicSettings() { + return getStubSettingsBuilder().createTopicSettings(); + } + + /** Returns the builder for the settings used for calls to updateTopic. */ + public UnaryCallSettings.Builder updateTopicSettings() { + return getStubSettingsBuilder().updateTopicSettings(); + } + + /** Returns the builder for the settings used for calls to publish. */ + public BatchingCallSettings.Builder publishSettings() { + return getStubSettingsBuilder().publishSettings(); + } + + /** Returns the builder for the settings used for calls to getTopic. */ + public UnaryCallSettings.Builder getTopicSettings() { + return getStubSettingsBuilder().getTopicSettings(); + } + + /** Returns the builder for the settings used for calls to listTopics. */ + public PagedCallSettings.Builder + listTopicsSettings() { + return getStubSettingsBuilder().listTopicsSettings(); + } + + /** Returns the builder for the settings used for calls to listTopicSubscriptions. */ + public PagedCallSettings.Builder< + ListTopicSubscriptionsRequest, + ListTopicSubscriptionsResponse, + ListTopicSubscriptionsPagedResponse> + listTopicSubscriptionsSettings() { + return getStubSettingsBuilder().listTopicSubscriptionsSettings(); + } + + /** Returns the builder for the settings used for calls to listTopicSnapshots. */ + public PagedCallSettings.Builder< + ListTopicSnapshotsRequest, ListTopicSnapshotsResponse, ListTopicSnapshotsPagedResponse> + listTopicSnapshotsSettings() { + return getStubSettingsBuilder().listTopicSnapshotsSettings(); + } + + /** Returns the builder for the settings used for calls to deleteTopic. */ + public UnaryCallSettings.Builder deleteTopicSettings() { + return getStubSettingsBuilder().deleteTopicSettings(); + } + + /** Returns the builder for the settings used for calls to detachSubscription. */ + public UnaryCallSettings.Builder + detachSubscriptionSettings() { + return getStubSettingsBuilder().detachSubscriptionSettings(); + } + + /** Returns the builder for the settings used for calls to setIamPolicy. */ + public UnaryCallSettings.Builder setIamPolicySettings() { + return getStubSettingsBuilder().setIamPolicySettings(); + } + + /** Returns the builder for the settings used for calls to getIamPolicy. */ + public UnaryCallSettings.Builder getIamPolicySettings() { + return getStubSettingsBuilder().getIamPolicySettings(); + } + + /** Returns the builder for the settings used for calls to testIamPermissions. */ + public UnaryCallSettings.Builder + testIamPermissionsSettings() { + return getStubSettingsBuilder().testIamPermissionsSettings(); + } + + @Override + public TopicAdminSettings build() throws IOException { + return new TopicAdminSettings(this); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Waiter.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Waiter.java new file mode 100644 index 000000000000..7221d5144eac --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/Waiter.java @@ -0,0 +1,88 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.ApiClock; +import com.google.api.core.InternalApi; + +/** + * A barrier kind of object that helps keep track of pending actions and synchronously wait until + * all have completed. + */ +class Waiter { + private int pendingCount; + + Waiter() { + pendingCount = 0; + } + + public synchronized void incrementPendingCount(int delta) { + this.pendingCount += delta; + if (pendingCount == 0) { + notifyAll(); + } + } + + public synchronized void waitComplete() { + boolean interrupted = false; + try { + while (pendingCount > 0) { + try { + wait(); + } catch (InterruptedException e) { + // Ignored, uninterruptibly. + interrupted = true; + } + } + } finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + public synchronized boolean tryWait(long timeoutMilliseconds, ApiClock clock) { + long startTime = clock.millisTime(); + long remainingMilliseconds = timeoutMilliseconds; + boolean interrupted = false; + boolean completedWait = true; + try { + while (pendingCount > 0) { + if (remainingMilliseconds <= 0) { + completedWait = false; + break; + } + try { + wait(remainingMilliseconds); + } catch (InterruptedException e) { + interrupted = true; + } + remainingMilliseconds = timeoutMilliseconds - (clock.millisTime() - startTime); + } + } finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + return completedWait; + } + + @InternalApi + public int pendingCount() { + return pendingCount; + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/gapic_metadata.json b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/gapic_metadata.json new file mode 100644 index 000000000000..2cf1c90a41e9 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/gapic_metadata.json @@ -0,0 +1,168 @@ +{ + "schema": "1.0", + "comment": "This file maps proto services/RPCs to the corresponding library clients/methods", + "language": "java", + "protoPackage": "google.pubsub.v1", + "libraryPackage": "com.google.cloud.pubsub.v1", + "services": { + "Publisher": { + "clients": { + "grpc": { + "libraryClient": "TopicAdminClient", + "rpcs": { + "CreateTopic": { + "methods": ["createTopic", "createTopic", "createTopic", "createTopicCallable"] + }, + "DeleteTopic": { + "methods": ["deleteTopic", "deleteTopic", "deleteTopic", "deleteTopicCallable"] + }, + "DetachSubscription": { + "methods": ["detachSubscription", "detachSubscriptionCallable"] + }, + "GetIamPolicy": { + "methods": ["getIamPolicy", "getIamPolicyCallable"] + }, + "GetTopic": { + "methods": ["getTopic", "getTopic", "getTopic", "getTopicCallable"] + }, + "ListTopicSnapshots": { + "methods": ["listTopicSnapshots", "listTopicSnapshots", "listTopicSnapshots", "listTopicSnapshotsPagedCallable", "listTopicSnapshotsCallable"] + }, + "ListTopicSubscriptions": { + "methods": ["listTopicSubscriptions", "listTopicSubscriptions", "listTopicSubscriptions", "listTopicSubscriptionsPagedCallable", "listTopicSubscriptionsCallable"] + }, + "ListTopics": { + "methods": ["listTopics", "listTopics", "listTopics", "listTopicsPagedCallable", "listTopicsCallable"] + }, + "Publish": { + "methods": ["publish", "publish", "publish", "publishCallable"] + }, + "SetIamPolicy": { + "methods": ["setIamPolicy", "setIamPolicyCallable"] + }, + "TestIamPermissions": { + "methods": ["testIamPermissions", "testIamPermissionsCallable"] + }, + "UpdateTopic": { + "methods": ["updateTopic", "updateTopic", "updateTopicCallable"] + } + } + } + } + }, + "Subscriber": { + "clients": { + "grpc": { + "libraryClient": "SubscriptionAdminClient", + "rpcs": { + "Acknowledge": { + "methods": ["acknowledge", "acknowledge", "acknowledge", "acknowledgeCallable"] + }, + "CreateSnapshot": { + "methods": ["createSnapshot", "createSnapshot", "createSnapshot", "createSnapshot", "createSnapshot", "createSnapshotCallable"] + }, + "CreateSubscription": { + "methods": ["createSubscription", "createSubscription", "createSubscription", "createSubscription", "createSubscription", "createSubscriptionCallable"] + }, + "DeleteSnapshot": { + "methods": ["deleteSnapshot", "deleteSnapshot", "deleteSnapshot", "deleteSnapshotCallable"] + }, + "DeleteSubscription": { + "methods": ["deleteSubscription", "deleteSubscription", "deleteSubscription", "deleteSubscriptionCallable"] + }, + "GetIamPolicy": { + "methods": ["getIamPolicy", "getIamPolicyCallable"] + }, + "GetSnapshot": { + "methods": ["getSnapshot", "getSnapshot", "getSnapshot", "getSnapshotCallable"] + }, + "GetSubscription": { + "methods": ["getSubscription", "getSubscription", "getSubscription", "getSubscriptionCallable"] + }, + "ListSnapshots": { + "methods": ["listSnapshots", "listSnapshots", "listSnapshots", "listSnapshotsPagedCallable", "listSnapshotsCallable"] + }, + "ListSubscriptions": { + "methods": ["listSubscriptions", "listSubscriptions", "listSubscriptions", "listSubscriptionsPagedCallable", "listSubscriptionsCallable"] + }, + "ModifyAckDeadline": { + "methods": ["modifyAckDeadline", "modifyAckDeadline", "modifyAckDeadline", "modifyAckDeadlineCallable"] + }, + "ModifyPushConfig": { + "methods": ["modifyPushConfig", "modifyPushConfig", "modifyPushConfig", "modifyPushConfigCallable"] + }, + "Pull": { + "methods": ["pull", "pull", "pull", "pull", "pull", "pullCallable"] + }, + "Seek": { + "methods": ["seek", "seekCallable"] + }, + "SetIamPolicy": { + "methods": ["setIamPolicy", "setIamPolicyCallable"] + }, + "StreamingPull": { + "methods": ["streamingPullCallable"] + }, + "TestIamPermissions": { + "methods": ["testIamPermissions", "testIamPermissionsCallable"] + }, + "UpdateSnapshot": { + "methods": ["updateSnapshot", "updateSnapshot", "updateSnapshotCallable"] + }, + "UpdateSubscription": { + "methods": ["updateSubscription", "updateSubscription", "updateSubscriptionCallable"] + } + } + } + } + }, + "SchemaService": { + "clients": { + "grpc": { + "libraryClient": "SchemaServiceClient", + "rpcs": { + "CommitSchema": { + "methods": ["commitSchema", "commitSchema", "commitSchema", "commitSchemaCallable"] + }, + "CreateSchema": { + "methods": ["createSchema", "createSchema", "createSchema", "createSchemaCallable"] + }, + "DeleteSchema": { + "methods": ["deleteSchema", "deleteSchema", "deleteSchema", "deleteSchemaCallable"] + }, + "DeleteSchemaRevision": { + "methods": ["deleteSchemaRevision", "deleteSchemaRevision", "deleteSchemaRevision", "deleteSchemaRevisionCallable"] + }, + "GetIamPolicy": { + "methods": ["getIamPolicy", "getIamPolicyCallable"] + }, + "GetSchema": { + "methods": ["getSchema", "getSchema", "getSchema", "getSchemaCallable"] + }, + "ListSchemaRevisions": { + "methods": ["listSchemaRevisions", "listSchemaRevisions", "listSchemaRevisions", "listSchemaRevisionsPagedCallable", "listSchemaRevisionsCallable"] + }, + "ListSchemas": { + "methods": ["listSchemas", "listSchemas", "listSchemas", "listSchemasPagedCallable", "listSchemasCallable"] + }, + "RollbackSchema": { + "methods": ["rollbackSchema", "rollbackSchema", "rollbackSchema", "rollbackSchemaCallable"] + }, + "SetIamPolicy": { + "methods": ["setIamPolicy", "setIamPolicyCallable"] + }, + "TestIamPermissions": { + "methods": ["testIamPermissions", "testIamPermissionsCallable"] + }, + "ValidateMessage": { + "methods": ["validateMessage", "validateMessageCallable"] + }, + "ValidateSchema": { + "methods": ["validateSchema", "validateSchema", "validateSchema", "validateSchemaCallable"] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/package-info.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/package-info.java new file mode 100644 index 000000000000..a85a38b2b423 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/package-info.java @@ -0,0 +1,88 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +/** + * A client to Cloud Pub/Sub API + * + *

The interfaces provided are listed below, along with usage samples. + * + *

======================= TopicAdminClient ======================= + * + *

Service Description: The service that an application uses to manipulate topics, and to send + * messages to a topic. + * + *

Sample for TopicAdminClient: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
+ *   TopicName name = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+ *   Topic response = topicAdminClient.createTopic(name);
+ * }
+ * }
+ * + *

======================= SubscriptionAdminClient ======================= + * + *

Service Description: The service that an application uses to manipulate subscriptions and to + * consume messages from a subscription via the `Pull` method or by establishing a bi-directional + * stream using the `StreamingPull` method. + * + *

Sample for SubscriptionAdminClient: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ *   SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ *   TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+ *   PushConfig pushConfig = PushConfig.newBuilder().build();
+ *   int ackDeadlineSeconds = 2135351438;
+ *   Subscription response =
+ *       subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+ * }
+ * }
+ * + *

======================= SchemaServiceClient ======================= + * + *

Service Description: Service for doing schema-related operations. + * + *

Sample for SchemaServiceClient: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ *   ProjectName parent = ProjectName.of("[PROJECT]");
+ *   Schema schema = Schema.newBuilder().build();
+ *   String schemaId = "schemaId-697673060";
+ *   Schema response = schemaServiceClient.createSchema(parent, schema, schemaId);
+ * }
+ * }
+ */ +@Generated("by gapic-generator-java") +package com.google.cloud.pubsub.v1; + +import javax.annotation.Generated; diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcPublisherCallableFactory.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcPublisherCallableFactory.java new file mode 100644 index 000000000000..92adc0c86116 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcPublisherCallableFactory.java @@ -0,0 +1,113 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import com.google.api.gax.grpc.GrpcCallSettings; +import com.google.api.gax.grpc.GrpcCallableFactory; +import com.google.api.gax.grpc.GrpcStubCallableFactory; +import com.google.api.gax.rpc.BatchingCallSettings; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.ClientStreamingCallable; +import com.google.api.gax.rpc.OperationCallSettings; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.StreamingCallSettings; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.longrunning.Operation; +import com.google.longrunning.stub.OperationsStub; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * gRPC callable factory implementation for the Publisher service API. + * + *

This class is for advanced usage. + */ +@Generated("by gapic-generator-java") +public class GrpcPublisherCallableFactory implements GrpcStubCallableFactory { + + @Override + public UnaryCallable createUnaryCallable( + GrpcCallSettings grpcCallSettings, + UnaryCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createUnaryCallable(grpcCallSettings, callSettings, clientContext); + } + + @Override + public + UnaryCallable createPagedCallable( + GrpcCallSettings grpcCallSettings, + PagedCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createPagedCallable(grpcCallSettings, callSettings, clientContext); + } + + @Override + public UnaryCallable createBatchingCallable( + GrpcCallSettings grpcCallSettings, + BatchingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createBatchingCallable( + grpcCallSettings, callSettings, clientContext); + } + + @Override + public + OperationCallable createOperationCallable( + GrpcCallSettings grpcCallSettings, + OperationCallSettings callSettings, + ClientContext clientContext, + OperationsStub operationsStub) { + return GrpcCallableFactory.createOperationCallable( + grpcCallSettings, callSettings, clientContext, operationsStub); + } + + @Override + public + BidiStreamingCallable createBidiStreamingCallable( + GrpcCallSettings grpcCallSettings, + StreamingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createBidiStreamingCallable( + grpcCallSettings, callSettings, clientContext); + } + + @Override + public + ServerStreamingCallable createServerStreamingCallable( + GrpcCallSettings grpcCallSettings, + ServerStreamingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createServerStreamingCallable( + grpcCallSettings, callSettings, clientContext); + } + + @Override + public + ClientStreamingCallable createClientStreamingCallable( + GrpcCallSettings grpcCallSettings, + StreamingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createClientStreamingCallable( + grpcCallSettings, callSettings, clientContext); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcPublisherStub.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcPublisherStub.java new file mode 100644 index 000000000000..aca63c6bca6d --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcPublisherStub.java @@ -0,0 +1,559 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSubscriptionsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicsPagedResponse; + +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.BackgroundResourceAggregation; +import com.google.api.gax.grpc.GrpcCallSettings; +import com.google.api.gax.grpc.GrpcStubCallableFactory; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.RequestParamsBuilder; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.longrunning.stub.GrpcOperationsStub; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.DeleteTopicRequest; +import com.google.pubsub.v1.DetachSubscriptionRequest; +import com.google.pubsub.v1.DetachSubscriptionResponse; +import com.google.pubsub.v1.GetTopicRequest; +import com.google.pubsub.v1.ListTopicSnapshotsRequest; +import com.google.pubsub.v1.ListTopicSnapshotsResponse; +import com.google.pubsub.v1.ListTopicSubscriptionsRequest; +import com.google.pubsub.v1.ListTopicSubscriptionsResponse; +import com.google.pubsub.v1.ListTopicsRequest; +import com.google.pubsub.v1.ListTopicsResponse; +import com.google.pubsub.v1.PublishRequest; +import com.google.pubsub.v1.PublishResponse; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.UpdateTopicRequest; +import io.grpc.MethodDescriptor; +import io.grpc.protobuf.ProtoUtils; +import java.io.IOException; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * gRPC stub implementation for the Publisher service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public class GrpcPublisherStub extends PublisherStub { + private static final MethodDescriptor createTopicMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Publisher/CreateTopic") + .setRequestMarshaller(ProtoUtils.marshaller(Topic.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Topic.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor updateTopicMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Publisher/UpdateTopic") + .setRequestMarshaller(ProtoUtils.marshaller(UpdateTopicRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Topic.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor publishMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Publisher/Publish") + .setRequestMarshaller(ProtoUtils.marshaller(PublishRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(PublishResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor getTopicMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Publisher/GetTopic") + .setRequestMarshaller(ProtoUtils.marshaller(GetTopicRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Topic.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + listTopicsMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Publisher/ListTopics") + .setRequestMarshaller(ProtoUtils.marshaller(ListTopicsRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(ListTopicsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor< + ListTopicSubscriptionsRequest, ListTopicSubscriptionsResponse> + listTopicSubscriptionsMethodDescriptor = + MethodDescriptor + .newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Publisher/ListTopicSubscriptions") + .setRequestMarshaller( + ProtoUtils.marshaller(ListTopicSubscriptionsRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(ListTopicSubscriptionsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + listTopicSnapshotsMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Publisher/ListTopicSnapshots") + .setRequestMarshaller( + ProtoUtils.marshaller(ListTopicSnapshotsRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(ListTopicSnapshotsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor deleteTopicMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Publisher/DeleteTopic") + .setRequestMarshaller(ProtoUtils.marshaller(DeleteTopicRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + detachSubscriptionMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Publisher/DetachSubscription") + .setRequestMarshaller( + ProtoUtils.marshaller(DetachSubscriptionRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(DetachSubscriptionResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor setIamPolicyMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.iam.v1.IAMPolicy/SetIamPolicy") + .setRequestMarshaller(ProtoUtils.marshaller(SetIamPolicyRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Policy.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor getIamPolicyMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.iam.v1.IAMPolicy/GetIamPolicy") + .setRequestMarshaller(ProtoUtils.marshaller(GetIamPolicyRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Policy.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + testIamPermissionsMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.iam.v1.IAMPolicy/TestIamPermissions") + .setRequestMarshaller( + ProtoUtils.marshaller(TestIamPermissionsRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(TestIamPermissionsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private final UnaryCallable createTopicCallable; + private final UnaryCallable updateTopicCallable; + private final UnaryCallable publishCallable; + private final UnaryCallable getTopicCallable; + private final UnaryCallable listTopicsCallable; + private final UnaryCallable listTopicsPagedCallable; + private final UnaryCallable + listTopicSubscriptionsCallable; + private final UnaryCallable + listTopicSubscriptionsPagedCallable; + private final UnaryCallable + listTopicSnapshotsCallable; + private final UnaryCallable + listTopicSnapshotsPagedCallable; + private final UnaryCallable deleteTopicCallable; + private final UnaryCallable + detachSubscriptionCallable; + private final UnaryCallable setIamPolicyCallable; + private final UnaryCallable getIamPolicyCallable; + private final UnaryCallable + testIamPermissionsCallable; + + private final BackgroundResource backgroundResources; + private final GrpcOperationsStub operationsStub; + private final GrpcStubCallableFactory callableFactory; + + public static final GrpcPublisherStub create(PublisherStubSettings settings) throws IOException { + return new GrpcPublisherStub(settings, ClientContext.create(settings)); + } + + public static final GrpcPublisherStub create(ClientContext clientContext) throws IOException { + return new GrpcPublisherStub(PublisherStubSettings.newBuilder().build(), clientContext); + } + + public static final GrpcPublisherStub create( + ClientContext clientContext, GrpcStubCallableFactory callableFactory) throws IOException { + return new GrpcPublisherStub( + PublisherStubSettings.newBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of GrpcPublisherStub, using the given settings. This is protected so + * that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected GrpcPublisherStub(PublisherStubSettings settings, ClientContext clientContext) + throws IOException { + this(settings, clientContext, new GrpcPublisherCallableFactory()); + } + + /** + * Constructs an instance of GrpcPublisherStub, using the given settings. This is protected so + * that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected GrpcPublisherStub( + PublisherStubSettings settings, + ClientContext clientContext, + GrpcStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + this.operationsStub = GrpcOperationsStub.create(clientContext, callableFactory); + + GrpcCallSettings createTopicTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(createTopicMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + GrpcCallSettings updateTopicTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(updateTopicMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("topic.name", String.valueOf(request.getTopic().getName())); + return builder.build(); + }) + .build(); + GrpcCallSettings publishTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(publishMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("topic", String.valueOf(request.getTopic())); + return builder.build(); + }) + .build(); + GrpcCallSettings getTopicTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(getTopicMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("topic", String.valueOf(request.getTopic())); + return builder.build(); + }) + .build(); + GrpcCallSettings listTopicsTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(listTopicsMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("project", String.valueOf(request.getProject())); + return builder.build(); + }) + .build(); + GrpcCallSettings + listTopicSubscriptionsTransportSettings = + GrpcCallSettings + .newBuilder() + .setMethodDescriptor(listTopicSubscriptionsMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("topic", String.valueOf(request.getTopic())); + return builder.build(); + }) + .build(); + GrpcCallSettings + listTopicSnapshotsTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(listTopicSnapshotsMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("topic", String.valueOf(request.getTopic())); + return builder.build(); + }) + .build(); + GrpcCallSettings deleteTopicTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(deleteTopicMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("topic", String.valueOf(request.getTopic())); + return builder.build(); + }) + .build(); + GrpcCallSettings + detachSubscriptionTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(detachSubscriptionMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + GrpcCallSettings setIamPolicyTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(setIamPolicyMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + GrpcCallSettings getIamPolicyTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(getIamPolicyMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + GrpcCallSettings + testIamPermissionsTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(testIamPermissionsMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + + this.createTopicCallable = + callableFactory.createUnaryCallable( + createTopicTransportSettings, settings.createTopicSettings(), clientContext); + this.updateTopicCallable = + callableFactory.createUnaryCallable( + updateTopicTransportSettings, settings.updateTopicSettings(), clientContext); + this.publishCallable = + callableFactory.createBatchingCallable( + publishTransportSettings, settings.publishSettings(), clientContext); + this.getTopicCallable = + callableFactory.createUnaryCallable( + getTopicTransportSettings, settings.getTopicSettings(), clientContext); + this.listTopicsCallable = + callableFactory.createUnaryCallable( + listTopicsTransportSettings, settings.listTopicsSettings(), clientContext); + this.listTopicsPagedCallable = + callableFactory.createPagedCallable( + listTopicsTransportSettings, settings.listTopicsSettings(), clientContext); + this.listTopicSubscriptionsCallable = + callableFactory.createUnaryCallable( + listTopicSubscriptionsTransportSettings, + settings.listTopicSubscriptionsSettings(), + clientContext); + this.listTopicSubscriptionsPagedCallable = + callableFactory.createPagedCallable( + listTopicSubscriptionsTransportSettings, + settings.listTopicSubscriptionsSettings(), + clientContext); + this.listTopicSnapshotsCallable = + callableFactory.createUnaryCallable( + listTopicSnapshotsTransportSettings, + settings.listTopicSnapshotsSettings(), + clientContext); + this.listTopicSnapshotsPagedCallable = + callableFactory.createPagedCallable( + listTopicSnapshotsTransportSettings, + settings.listTopicSnapshotsSettings(), + clientContext); + this.deleteTopicCallable = + callableFactory.createUnaryCallable( + deleteTopicTransportSettings, settings.deleteTopicSettings(), clientContext); + this.detachSubscriptionCallable = + callableFactory.createUnaryCallable( + detachSubscriptionTransportSettings, + settings.detachSubscriptionSettings(), + clientContext); + this.setIamPolicyCallable = + callableFactory.createUnaryCallable( + setIamPolicyTransportSettings, settings.setIamPolicySettings(), clientContext); + this.getIamPolicyCallable = + callableFactory.createUnaryCallable( + getIamPolicyTransportSettings, settings.getIamPolicySettings(), clientContext); + this.testIamPermissionsCallable = + callableFactory.createUnaryCallable( + testIamPermissionsTransportSettings, + settings.testIamPermissionsSettings(), + clientContext); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + public GrpcOperationsStub getOperationsStub() { + return operationsStub; + } + + @Override + public UnaryCallable createTopicCallable() { + return createTopicCallable; + } + + @Override + public UnaryCallable updateTopicCallable() { + return updateTopicCallable; + } + + @Override + public UnaryCallable publishCallable() { + return publishCallable; + } + + @Override + public UnaryCallable getTopicCallable() { + return getTopicCallable; + } + + @Override + public UnaryCallable listTopicsCallable() { + return listTopicsCallable; + } + + @Override + public UnaryCallable listTopicsPagedCallable() { + return listTopicsPagedCallable; + } + + @Override + public UnaryCallable + listTopicSubscriptionsCallable() { + return listTopicSubscriptionsCallable; + } + + @Override + public UnaryCallable + listTopicSubscriptionsPagedCallable() { + return listTopicSubscriptionsPagedCallable; + } + + @Override + public UnaryCallable + listTopicSnapshotsCallable() { + return listTopicSnapshotsCallable; + } + + @Override + public UnaryCallable + listTopicSnapshotsPagedCallable() { + return listTopicSnapshotsPagedCallable; + } + + @Override + public UnaryCallable deleteTopicCallable() { + return deleteTopicCallable; + } + + @Override + public UnaryCallable + detachSubscriptionCallable() { + return detachSubscriptionCallable; + } + + @Override + public UnaryCallable setIamPolicyCallable() { + return setIamPolicyCallable; + } + + @Override + public UnaryCallable getIamPolicyCallable() { + return getIamPolicyCallable; + } + + @Override + public UnaryCallable + testIamPermissionsCallable() { + return testIamPermissionsCallable; + } + + @Override + public final void close() { + try { + backgroundResources.close(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new IllegalStateException("Failed to close resource", e); + } + } + + @Override + public void shutdown() { + backgroundResources.shutdown(); + } + + @Override + public boolean isShutdown() { + return backgroundResources.isShutdown(); + } + + @Override + public boolean isTerminated() { + return backgroundResources.isTerminated(); + } + + @Override + public void shutdownNow() { + backgroundResources.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return backgroundResources.awaitTermination(duration, unit); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcSchemaServiceCallableFactory.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcSchemaServiceCallableFactory.java new file mode 100644 index 000000000000..16236bc4bd0d --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcSchemaServiceCallableFactory.java @@ -0,0 +1,113 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import com.google.api.gax.grpc.GrpcCallSettings; +import com.google.api.gax.grpc.GrpcCallableFactory; +import com.google.api.gax.grpc.GrpcStubCallableFactory; +import com.google.api.gax.rpc.BatchingCallSettings; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.ClientStreamingCallable; +import com.google.api.gax.rpc.OperationCallSettings; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.StreamingCallSettings; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.longrunning.Operation; +import com.google.longrunning.stub.OperationsStub; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * gRPC callable factory implementation for the SchemaService service API. + * + *

This class is for advanced usage. + */ +@Generated("by gapic-generator-java") +public class GrpcSchemaServiceCallableFactory implements GrpcStubCallableFactory { + + @Override + public UnaryCallable createUnaryCallable( + GrpcCallSettings grpcCallSettings, + UnaryCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createUnaryCallable(grpcCallSettings, callSettings, clientContext); + } + + @Override + public + UnaryCallable createPagedCallable( + GrpcCallSettings grpcCallSettings, + PagedCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createPagedCallable(grpcCallSettings, callSettings, clientContext); + } + + @Override + public UnaryCallable createBatchingCallable( + GrpcCallSettings grpcCallSettings, + BatchingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createBatchingCallable( + grpcCallSettings, callSettings, clientContext); + } + + @Override + public + OperationCallable createOperationCallable( + GrpcCallSettings grpcCallSettings, + OperationCallSettings callSettings, + ClientContext clientContext, + OperationsStub operationsStub) { + return GrpcCallableFactory.createOperationCallable( + grpcCallSettings, callSettings, clientContext, operationsStub); + } + + @Override + public + BidiStreamingCallable createBidiStreamingCallable( + GrpcCallSettings grpcCallSettings, + StreamingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createBidiStreamingCallable( + grpcCallSettings, callSettings, clientContext); + } + + @Override + public + ServerStreamingCallable createServerStreamingCallable( + GrpcCallSettings grpcCallSettings, + ServerStreamingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createServerStreamingCallable( + grpcCallSettings, callSettings, clientContext); + } + + @Override + public + ClientStreamingCallable createClientStreamingCallable( + GrpcCallSettings grpcCallSettings, + StreamingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createClientStreamingCallable( + grpcCallSettings, callSettings, clientContext); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcSchemaServiceStub.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcSchemaServiceStub.java new file mode 100644 index 000000000000..403a90e192ed --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcSchemaServiceStub.java @@ -0,0 +1,573 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemaRevisionsPagedResponse; +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemasPagedResponse; + +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.BackgroundResourceAggregation; +import com.google.api.gax.grpc.GrpcCallSettings; +import com.google.api.gax.grpc.GrpcStubCallableFactory; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.RequestParamsBuilder; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.longrunning.stub.GrpcOperationsStub; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.CommitSchemaRequest; +import com.google.pubsub.v1.CreateSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRevisionRequest; +import com.google.pubsub.v1.GetSchemaRequest; +import com.google.pubsub.v1.ListSchemaRevisionsRequest; +import com.google.pubsub.v1.ListSchemaRevisionsResponse; +import com.google.pubsub.v1.ListSchemasRequest; +import com.google.pubsub.v1.ListSchemasResponse; +import com.google.pubsub.v1.RollbackSchemaRequest; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.ValidateMessageRequest; +import com.google.pubsub.v1.ValidateMessageResponse; +import com.google.pubsub.v1.ValidateSchemaRequest; +import com.google.pubsub.v1.ValidateSchemaResponse; +import io.grpc.MethodDescriptor; +import io.grpc.protobuf.ProtoUtils; +import java.io.IOException; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * gRPC stub implementation for the SchemaService service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public class GrpcSchemaServiceStub extends SchemaServiceStub { + private static final MethodDescriptor createSchemaMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.SchemaService/CreateSchema") + .setRequestMarshaller(ProtoUtils.marshaller(CreateSchemaRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Schema.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor getSchemaMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.SchemaService/GetSchema") + .setRequestMarshaller(ProtoUtils.marshaller(GetSchemaRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Schema.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + listSchemasMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.SchemaService/ListSchemas") + .setRequestMarshaller(ProtoUtils.marshaller(ListSchemasRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(ListSchemasResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + listSchemaRevisionsMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.SchemaService/ListSchemaRevisions") + .setRequestMarshaller( + ProtoUtils.marshaller(ListSchemaRevisionsRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(ListSchemaRevisionsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor commitSchemaMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.SchemaService/CommitSchema") + .setRequestMarshaller(ProtoUtils.marshaller(CommitSchemaRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Schema.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + rollbackSchemaMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.SchemaService/RollbackSchema") + .setRequestMarshaller( + ProtoUtils.marshaller(RollbackSchemaRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Schema.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + deleteSchemaRevisionMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.SchemaService/DeleteSchemaRevision") + .setRequestMarshaller( + ProtoUtils.marshaller(DeleteSchemaRevisionRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Schema.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor deleteSchemaMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.SchemaService/DeleteSchema") + .setRequestMarshaller(ProtoUtils.marshaller(DeleteSchemaRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + validateSchemaMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.SchemaService/ValidateSchema") + .setRequestMarshaller( + ProtoUtils.marshaller(ValidateSchemaRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(ValidateSchemaResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + validateMessageMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.SchemaService/ValidateMessage") + .setRequestMarshaller( + ProtoUtils.marshaller(ValidateMessageRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(ValidateMessageResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor setIamPolicyMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.iam.v1.IAMPolicy/SetIamPolicy") + .setRequestMarshaller(ProtoUtils.marshaller(SetIamPolicyRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Policy.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor getIamPolicyMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.iam.v1.IAMPolicy/GetIamPolicy") + .setRequestMarshaller(ProtoUtils.marshaller(GetIamPolicyRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Policy.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + testIamPermissionsMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.iam.v1.IAMPolicy/TestIamPermissions") + .setRequestMarshaller( + ProtoUtils.marshaller(TestIamPermissionsRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(TestIamPermissionsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private final UnaryCallable createSchemaCallable; + private final UnaryCallable getSchemaCallable; + private final UnaryCallable listSchemasCallable; + private final UnaryCallable + listSchemasPagedCallable; + private final UnaryCallable + listSchemaRevisionsCallable; + private final UnaryCallable + listSchemaRevisionsPagedCallable; + private final UnaryCallable commitSchemaCallable; + private final UnaryCallable rollbackSchemaCallable; + private final UnaryCallable deleteSchemaRevisionCallable; + private final UnaryCallable deleteSchemaCallable; + private final UnaryCallable validateSchemaCallable; + private final UnaryCallable + validateMessageCallable; + private final UnaryCallable setIamPolicyCallable; + private final UnaryCallable getIamPolicyCallable; + private final UnaryCallable + testIamPermissionsCallable; + + private final BackgroundResource backgroundResources; + private final GrpcOperationsStub operationsStub; + private final GrpcStubCallableFactory callableFactory; + + public static final GrpcSchemaServiceStub create(SchemaServiceStubSettings settings) + throws IOException { + return new GrpcSchemaServiceStub(settings, ClientContext.create(settings)); + } + + public static final GrpcSchemaServiceStub create(ClientContext clientContext) throws IOException { + return new GrpcSchemaServiceStub(SchemaServiceStubSettings.newBuilder().build(), clientContext); + } + + public static final GrpcSchemaServiceStub create( + ClientContext clientContext, GrpcStubCallableFactory callableFactory) throws IOException { + return new GrpcSchemaServiceStub( + SchemaServiceStubSettings.newBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of GrpcSchemaServiceStub, using the given settings. This is protected so + * that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected GrpcSchemaServiceStub(SchemaServiceStubSettings settings, ClientContext clientContext) + throws IOException { + this(settings, clientContext, new GrpcSchemaServiceCallableFactory()); + } + + /** + * Constructs an instance of GrpcSchemaServiceStub, using the given settings. This is protected so + * that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected GrpcSchemaServiceStub( + SchemaServiceStubSettings settings, + ClientContext clientContext, + GrpcStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + this.operationsStub = GrpcOperationsStub.create(clientContext, callableFactory); + + GrpcCallSettings createSchemaTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(createSchemaMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("parent", String.valueOf(request.getParent())); + return builder.build(); + }) + .build(); + GrpcCallSettings getSchemaTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(getSchemaMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + GrpcCallSettings listSchemasTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(listSchemasMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("parent", String.valueOf(request.getParent())); + return builder.build(); + }) + .build(); + GrpcCallSettings + listSchemaRevisionsTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(listSchemaRevisionsMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + GrpcCallSettings commitSchemaTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(commitSchemaMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + GrpcCallSettings rollbackSchemaTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(rollbackSchemaMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + GrpcCallSettings deleteSchemaRevisionTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(deleteSchemaRevisionMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + GrpcCallSettings deleteSchemaTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(deleteSchemaMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + GrpcCallSettings + validateSchemaTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(validateSchemaMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("parent", String.valueOf(request.getParent())); + return builder.build(); + }) + .build(); + GrpcCallSettings + validateMessageTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(validateMessageMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("parent", String.valueOf(request.getParent())); + return builder.build(); + }) + .build(); + GrpcCallSettings setIamPolicyTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(setIamPolicyMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + GrpcCallSettings getIamPolicyTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(getIamPolicyMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + GrpcCallSettings + testIamPermissionsTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(testIamPermissionsMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + + this.createSchemaCallable = + callableFactory.createUnaryCallable( + createSchemaTransportSettings, settings.createSchemaSettings(), clientContext); + this.getSchemaCallable = + callableFactory.createUnaryCallable( + getSchemaTransportSettings, settings.getSchemaSettings(), clientContext); + this.listSchemasCallable = + callableFactory.createUnaryCallable( + listSchemasTransportSettings, settings.listSchemasSettings(), clientContext); + this.listSchemasPagedCallable = + callableFactory.createPagedCallable( + listSchemasTransportSettings, settings.listSchemasSettings(), clientContext); + this.listSchemaRevisionsCallable = + callableFactory.createUnaryCallable( + listSchemaRevisionsTransportSettings, + settings.listSchemaRevisionsSettings(), + clientContext); + this.listSchemaRevisionsPagedCallable = + callableFactory.createPagedCallable( + listSchemaRevisionsTransportSettings, + settings.listSchemaRevisionsSettings(), + clientContext); + this.commitSchemaCallable = + callableFactory.createUnaryCallable( + commitSchemaTransportSettings, settings.commitSchemaSettings(), clientContext); + this.rollbackSchemaCallable = + callableFactory.createUnaryCallable( + rollbackSchemaTransportSettings, settings.rollbackSchemaSettings(), clientContext); + this.deleteSchemaRevisionCallable = + callableFactory.createUnaryCallable( + deleteSchemaRevisionTransportSettings, + settings.deleteSchemaRevisionSettings(), + clientContext); + this.deleteSchemaCallable = + callableFactory.createUnaryCallable( + deleteSchemaTransportSettings, settings.deleteSchemaSettings(), clientContext); + this.validateSchemaCallable = + callableFactory.createUnaryCallable( + validateSchemaTransportSettings, settings.validateSchemaSettings(), clientContext); + this.validateMessageCallable = + callableFactory.createUnaryCallable( + validateMessageTransportSettings, settings.validateMessageSettings(), clientContext); + this.setIamPolicyCallable = + callableFactory.createUnaryCallable( + setIamPolicyTransportSettings, settings.setIamPolicySettings(), clientContext); + this.getIamPolicyCallable = + callableFactory.createUnaryCallable( + getIamPolicyTransportSettings, settings.getIamPolicySettings(), clientContext); + this.testIamPermissionsCallable = + callableFactory.createUnaryCallable( + testIamPermissionsTransportSettings, + settings.testIamPermissionsSettings(), + clientContext); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + public GrpcOperationsStub getOperationsStub() { + return operationsStub; + } + + @Override + public UnaryCallable createSchemaCallable() { + return createSchemaCallable; + } + + @Override + public UnaryCallable getSchemaCallable() { + return getSchemaCallable; + } + + @Override + public UnaryCallable listSchemasCallable() { + return listSchemasCallable; + } + + @Override + public UnaryCallable listSchemasPagedCallable() { + return listSchemasPagedCallable; + } + + @Override + public UnaryCallable + listSchemaRevisionsCallable() { + return listSchemaRevisionsCallable; + } + + @Override + public UnaryCallable + listSchemaRevisionsPagedCallable() { + return listSchemaRevisionsPagedCallable; + } + + @Override + public UnaryCallable commitSchemaCallable() { + return commitSchemaCallable; + } + + @Override + public UnaryCallable rollbackSchemaCallable() { + return rollbackSchemaCallable; + } + + @Override + public UnaryCallable deleteSchemaRevisionCallable() { + return deleteSchemaRevisionCallable; + } + + @Override + public UnaryCallable deleteSchemaCallable() { + return deleteSchemaCallable; + } + + @Override + public UnaryCallable validateSchemaCallable() { + return validateSchemaCallable; + } + + @Override + public UnaryCallable validateMessageCallable() { + return validateMessageCallable; + } + + @Override + public UnaryCallable setIamPolicyCallable() { + return setIamPolicyCallable; + } + + @Override + public UnaryCallable getIamPolicyCallable() { + return getIamPolicyCallable; + } + + @Override + public UnaryCallable + testIamPermissionsCallable() { + return testIamPermissionsCallable; + } + + @Override + public final void close() { + try { + backgroundResources.close(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new IllegalStateException("Failed to close resource", e); + } + } + + @Override + public void shutdown() { + backgroundResources.shutdown(); + } + + @Override + public boolean isShutdown() { + return backgroundResources.isShutdown(); + } + + @Override + public boolean isTerminated() { + return backgroundResources.isTerminated(); + } + + @Override + public void shutdownNow() { + backgroundResources.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return backgroundResources.awaitTermination(duration, unit); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcSubscriberCallableFactory.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcSubscriberCallableFactory.java new file mode 100644 index 000000000000..8249a721942b --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcSubscriberCallableFactory.java @@ -0,0 +1,113 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import com.google.api.gax.grpc.GrpcCallSettings; +import com.google.api.gax.grpc.GrpcCallableFactory; +import com.google.api.gax.grpc.GrpcStubCallableFactory; +import com.google.api.gax.rpc.BatchingCallSettings; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.ClientStreamingCallable; +import com.google.api.gax.rpc.OperationCallSettings; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.StreamingCallSettings; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.longrunning.Operation; +import com.google.longrunning.stub.OperationsStub; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * gRPC callable factory implementation for the Subscriber service API. + * + *

This class is for advanced usage. + */ +@Generated("by gapic-generator-java") +public class GrpcSubscriberCallableFactory implements GrpcStubCallableFactory { + + @Override + public UnaryCallable createUnaryCallable( + GrpcCallSettings grpcCallSettings, + UnaryCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createUnaryCallable(grpcCallSettings, callSettings, clientContext); + } + + @Override + public + UnaryCallable createPagedCallable( + GrpcCallSettings grpcCallSettings, + PagedCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createPagedCallable(grpcCallSettings, callSettings, clientContext); + } + + @Override + public UnaryCallable createBatchingCallable( + GrpcCallSettings grpcCallSettings, + BatchingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createBatchingCallable( + grpcCallSettings, callSettings, clientContext); + } + + @Override + public + OperationCallable createOperationCallable( + GrpcCallSettings grpcCallSettings, + OperationCallSettings callSettings, + ClientContext clientContext, + OperationsStub operationsStub) { + return GrpcCallableFactory.createOperationCallable( + grpcCallSettings, callSettings, clientContext, operationsStub); + } + + @Override + public + BidiStreamingCallable createBidiStreamingCallable( + GrpcCallSettings grpcCallSettings, + StreamingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createBidiStreamingCallable( + grpcCallSettings, callSettings, clientContext); + } + + @Override + public + ServerStreamingCallable createServerStreamingCallable( + GrpcCallSettings grpcCallSettings, + ServerStreamingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createServerStreamingCallable( + grpcCallSettings, callSettings, clientContext); + } + + @Override + public + ClientStreamingCallable createClientStreamingCallable( + GrpcCallSettings grpcCallSettings, + StreamingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createClientStreamingCallable( + grpcCallSettings, callSettings, clientContext); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcSubscriberStub.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcSubscriberStub.java new file mode 100644 index 000000000000..7669b2cd6129 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/GrpcSubscriberStub.java @@ -0,0 +1,761 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSubscriptionsPagedResponse; + +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.BackgroundResourceAggregation; +import com.google.api.gax.grpc.GrpcCallSettings; +import com.google.api.gax.grpc.GrpcStubCallableFactory; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.RequestParamsBuilder; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.longrunning.stub.GrpcOperationsStub; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.CreateSnapshotRequest; +import com.google.pubsub.v1.DeleteSnapshotRequest; +import com.google.pubsub.v1.DeleteSubscriptionRequest; +import com.google.pubsub.v1.GetSnapshotRequest; +import com.google.pubsub.v1.GetSubscriptionRequest; +import com.google.pubsub.v1.ListSnapshotsRequest; +import com.google.pubsub.v1.ListSnapshotsResponse; +import com.google.pubsub.v1.ListSubscriptionsRequest; +import com.google.pubsub.v1.ListSubscriptionsResponse; +import com.google.pubsub.v1.ModifyAckDeadlineRequest; +import com.google.pubsub.v1.ModifyPushConfigRequest; +import com.google.pubsub.v1.PullRequest; +import com.google.pubsub.v1.PullResponse; +import com.google.pubsub.v1.SeekRequest; +import com.google.pubsub.v1.SeekResponse; +import com.google.pubsub.v1.Snapshot; +import com.google.pubsub.v1.StreamingPullRequest; +import com.google.pubsub.v1.StreamingPullResponse; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.UpdateSnapshotRequest; +import com.google.pubsub.v1.UpdateSubscriptionRequest; +import io.grpc.MethodDescriptor; +import io.grpc.protobuf.ProtoUtils; +import java.io.IOException; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * gRPC stub implementation for the Subscriber service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public class GrpcSubscriberStub extends SubscriberStub { + private static final MethodDescriptor + createSubscriptionMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/CreateSubscription") + .setRequestMarshaller(ProtoUtils.marshaller(Subscription.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Subscription.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + getSubscriptionMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/GetSubscription") + .setRequestMarshaller( + ProtoUtils.marshaller(GetSubscriptionRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Subscription.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + updateSubscriptionMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/UpdateSubscription") + .setRequestMarshaller( + ProtoUtils.marshaller(UpdateSubscriptionRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Subscription.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + listSubscriptionsMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/ListSubscriptions") + .setRequestMarshaller( + ProtoUtils.marshaller(ListSubscriptionsRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(ListSubscriptionsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + deleteSubscriptionMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/DeleteSubscription") + .setRequestMarshaller( + ProtoUtils.marshaller(DeleteSubscriptionRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + modifyAckDeadlineMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/ModifyAckDeadline") + .setRequestMarshaller( + ProtoUtils.marshaller(ModifyAckDeadlineRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor acknowledgeMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/Acknowledge") + .setRequestMarshaller(ProtoUtils.marshaller(AcknowledgeRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor pullMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/Pull") + .setRequestMarshaller(ProtoUtils.marshaller(PullRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(PullResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + streamingPullMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.BIDI_STREAMING) + .setFullMethodName("google.pubsub.v1.Subscriber/StreamingPull") + .setRequestMarshaller( + ProtoUtils.marshaller(StreamingPullRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(StreamingPullResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + modifyPushConfigMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/ModifyPushConfig") + .setRequestMarshaller( + ProtoUtils.marshaller(ModifyPushConfigRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor getSnapshotMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/GetSnapshot") + .setRequestMarshaller(ProtoUtils.marshaller(GetSnapshotRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Snapshot.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + listSnapshotsMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/ListSnapshots") + .setRequestMarshaller( + ProtoUtils.marshaller(ListSnapshotsRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(ListSnapshotsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + createSnapshotMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/CreateSnapshot") + .setRequestMarshaller( + ProtoUtils.marshaller(CreateSnapshotRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Snapshot.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + updateSnapshotMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/UpdateSnapshot") + .setRequestMarshaller( + ProtoUtils.marshaller(UpdateSnapshotRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Snapshot.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + deleteSnapshotMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/DeleteSnapshot") + .setRequestMarshaller( + ProtoUtils.marshaller(DeleteSnapshotRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Empty.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor seekMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.pubsub.v1.Subscriber/Seek") + .setRequestMarshaller(ProtoUtils.marshaller(SeekRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(SeekResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor setIamPolicyMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.iam.v1.IAMPolicy/SetIamPolicy") + .setRequestMarshaller(ProtoUtils.marshaller(SetIamPolicyRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Policy.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor getIamPolicyMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.iam.v1.IAMPolicy/GetIamPolicy") + .setRequestMarshaller(ProtoUtils.marshaller(GetIamPolicyRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Policy.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private static final MethodDescriptor + testIamPermissionsMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.iam.v1.IAMPolicy/TestIamPermissions") + .setRequestMarshaller( + ProtoUtils.marshaller(TestIamPermissionsRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(TestIamPermissionsResponse.getDefaultInstance())) + .setSampledToLocalTracing(true) + .build(); + + private final UnaryCallable createSubscriptionCallable; + private final UnaryCallable getSubscriptionCallable; + private final UnaryCallable updateSubscriptionCallable; + private final UnaryCallable + listSubscriptionsCallable; + private final UnaryCallable + listSubscriptionsPagedCallable; + private final UnaryCallable deleteSubscriptionCallable; + private final UnaryCallable modifyAckDeadlineCallable; + private final UnaryCallable acknowledgeCallable; + private final UnaryCallable pullCallable; + private final BidiStreamingCallable + streamingPullCallable; + private final UnaryCallable modifyPushConfigCallable; + private final UnaryCallable getSnapshotCallable; + private final UnaryCallable listSnapshotsCallable; + private final UnaryCallable + listSnapshotsPagedCallable; + private final UnaryCallable createSnapshotCallable; + private final UnaryCallable updateSnapshotCallable; + private final UnaryCallable deleteSnapshotCallable; + private final UnaryCallable seekCallable; + private final UnaryCallable setIamPolicyCallable; + private final UnaryCallable getIamPolicyCallable; + private final UnaryCallable + testIamPermissionsCallable; + + private final BackgroundResource backgroundResources; + private final GrpcOperationsStub operationsStub; + private final GrpcStubCallableFactory callableFactory; + + public static final GrpcSubscriberStub create(SubscriberStubSettings settings) + throws IOException { + return new GrpcSubscriberStub(settings, ClientContext.create(settings)); + } + + public static final GrpcSubscriberStub create(ClientContext clientContext) throws IOException { + return new GrpcSubscriberStub(SubscriberStubSettings.newBuilder().build(), clientContext); + } + + public static final GrpcSubscriberStub create( + ClientContext clientContext, GrpcStubCallableFactory callableFactory) throws IOException { + return new GrpcSubscriberStub( + SubscriberStubSettings.newBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of GrpcSubscriberStub, using the given settings. This is protected so + * that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected GrpcSubscriberStub(SubscriberStubSettings settings, ClientContext clientContext) + throws IOException { + this(settings, clientContext, new GrpcSubscriberCallableFactory()); + } + + /** + * Constructs an instance of GrpcSubscriberStub, using the given settings. This is protected so + * that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected GrpcSubscriberStub( + SubscriberStubSettings settings, + ClientContext clientContext, + GrpcStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + this.operationsStub = GrpcOperationsStub.create(clientContext, callableFactory); + + GrpcCallSettings createSubscriptionTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(createSubscriptionMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + GrpcCallSettings getSubscriptionTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(getSubscriptionMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + GrpcCallSettings updateSubscriptionTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(updateSubscriptionMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add( + "subscription.name", String.valueOf(request.getSubscription().getName())); + return builder.build(); + }) + .build(); + GrpcCallSettings + listSubscriptionsTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(listSubscriptionsMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("project", String.valueOf(request.getProject())); + return builder.build(); + }) + .build(); + GrpcCallSettings deleteSubscriptionTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(deleteSubscriptionMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + GrpcCallSettings modifyAckDeadlineTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(modifyAckDeadlineMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + GrpcCallSettings acknowledgeTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(acknowledgeMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + GrpcCallSettings pullTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(pullMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + GrpcCallSettings streamingPullTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(streamingPullMethodDescriptor) + .build(); + GrpcCallSettings modifyPushConfigTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(modifyPushConfigMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + GrpcCallSettings getSnapshotTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(getSnapshotMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("snapshot", String.valueOf(request.getSnapshot())); + return builder.build(); + }) + .build(); + GrpcCallSettings listSnapshotsTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(listSnapshotsMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("project", String.valueOf(request.getProject())); + return builder.build(); + }) + .build(); + GrpcCallSettings createSnapshotTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(createSnapshotMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + GrpcCallSettings updateSnapshotTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(updateSnapshotMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("snapshot.name", String.valueOf(request.getSnapshot().getName())); + return builder.build(); + }) + .build(); + GrpcCallSettings deleteSnapshotTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(deleteSnapshotMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("snapshot", String.valueOf(request.getSnapshot())); + return builder.build(); + }) + .build(); + GrpcCallSettings seekTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(seekMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + GrpcCallSettings setIamPolicyTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(setIamPolicyMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + GrpcCallSettings getIamPolicyTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(getIamPolicyMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + GrpcCallSettings + testIamPermissionsTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(testIamPermissionsMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + + this.createSubscriptionCallable = + callableFactory.createUnaryCallable( + createSubscriptionTransportSettings, + settings.createSubscriptionSettings(), + clientContext); + this.getSubscriptionCallable = + callableFactory.createUnaryCallable( + getSubscriptionTransportSettings, settings.getSubscriptionSettings(), clientContext); + this.updateSubscriptionCallable = + callableFactory.createUnaryCallable( + updateSubscriptionTransportSettings, + settings.updateSubscriptionSettings(), + clientContext); + this.listSubscriptionsCallable = + callableFactory.createUnaryCallable( + listSubscriptionsTransportSettings, + settings.listSubscriptionsSettings(), + clientContext); + this.listSubscriptionsPagedCallable = + callableFactory.createPagedCallable( + listSubscriptionsTransportSettings, + settings.listSubscriptionsSettings(), + clientContext); + this.deleteSubscriptionCallable = + callableFactory.createUnaryCallable( + deleteSubscriptionTransportSettings, + settings.deleteSubscriptionSettings(), + clientContext); + this.modifyAckDeadlineCallable = + callableFactory.createUnaryCallable( + modifyAckDeadlineTransportSettings, + settings.modifyAckDeadlineSettings(), + clientContext); + this.acknowledgeCallable = + callableFactory.createUnaryCallable( + acknowledgeTransportSettings, settings.acknowledgeSettings(), clientContext); + this.pullCallable = + callableFactory.createUnaryCallable( + pullTransportSettings, settings.pullSettings(), clientContext); + this.streamingPullCallable = + callableFactory.createBidiStreamingCallable( + streamingPullTransportSettings, settings.streamingPullSettings(), clientContext); + this.modifyPushConfigCallable = + callableFactory.createUnaryCallable( + modifyPushConfigTransportSettings, settings.modifyPushConfigSettings(), clientContext); + this.getSnapshotCallable = + callableFactory.createUnaryCallable( + getSnapshotTransportSettings, settings.getSnapshotSettings(), clientContext); + this.listSnapshotsCallable = + callableFactory.createUnaryCallable( + listSnapshotsTransportSettings, settings.listSnapshotsSettings(), clientContext); + this.listSnapshotsPagedCallable = + callableFactory.createPagedCallable( + listSnapshotsTransportSettings, settings.listSnapshotsSettings(), clientContext); + this.createSnapshotCallable = + callableFactory.createUnaryCallable( + createSnapshotTransportSettings, settings.createSnapshotSettings(), clientContext); + this.updateSnapshotCallable = + callableFactory.createUnaryCallable( + updateSnapshotTransportSettings, settings.updateSnapshotSettings(), clientContext); + this.deleteSnapshotCallable = + callableFactory.createUnaryCallable( + deleteSnapshotTransportSettings, settings.deleteSnapshotSettings(), clientContext); + this.seekCallable = + callableFactory.createUnaryCallable( + seekTransportSettings, settings.seekSettings(), clientContext); + this.setIamPolicyCallable = + callableFactory.createUnaryCallable( + setIamPolicyTransportSettings, settings.setIamPolicySettings(), clientContext); + this.getIamPolicyCallable = + callableFactory.createUnaryCallable( + getIamPolicyTransportSettings, settings.getIamPolicySettings(), clientContext); + this.testIamPermissionsCallable = + callableFactory.createUnaryCallable( + testIamPermissionsTransportSettings, + settings.testIamPermissionsSettings(), + clientContext); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + public GrpcOperationsStub getOperationsStub() { + return operationsStub; + } + + @Override + public UnaryCallable createSubscriptionCallable() { + return createSubscriptionCallable; + } + + @Override + public UnaryCallable getSubscriptionCallable() { + return getSubscriptionCallable; + } + + @Override + public UnaryCallable updateSubscriptionCallable() { + return updateSubscriptionCallable; + } + + @Override + public UnaryCallable + listSubscriptionsCallable() { + return listSubscriptionsCallable; + } + + @Override + public UnaryCallable + listSubscriptionsPagedCallable() { + return listSubscriptionsPagedCallable; + } + + @Override + public UnaryCallable deleteSubscriptionCallable() { + return deleteSubscriptionCallable; + } + + @Override + public UnaryCallable modifyAckDeadlineCallable() { + return modifyAckDeadlineCallable; + } + + @Override + public UnaryCallable acknowledgeCallable() { + return acknowledgeCallable; + } + + @Override + public UnaryCallable pullCallable() { + return pullCallable; + } + + @Override + public BidiStreamingCallable + streamingPullCallable() { + return streamingPullCallable; + } + + @Override + public UnaryCallable modifyPushConfigCallable() { + return modifyPushConfigCallable; + } + + @Override + public UnaryCallable getSnapshotCallable() { + return getSnapshotCallable; + } + + @Override + public UnaryCallable listSnapshotsCallable() { + return listSnapshotsCallable; + } + + @Override + public UnaryCallable + listSnapshotsPagedCallable() { + return listSnapshotsPagedCallable; + } + + @Override + public UnaryCallable createSnapshotCallable() { + return createSnapshotCallable; + } + + @Override + public UnaryCallable updateSnapshotCallable() { + return updateSnapshotCallable; + } + + @Override + public UnaryCallable deleteSnapshotCallable() { + return deleteSnapshotCallable; + } + + @Override + public UnaryCallable seekCallable() { + return seekCallable; + } + + @Override + public UnaryCallable setIamPolicyCallable() { + return setIamPolicyCallable; + } + + @Override + public UnaryCallable getIamPolicyCallable() { + return getIamPolicyCallable; + } + + @Override + public UnaryCallable + testIamPermissionsCallable() { + return testIamPermissionsCallable; + } + + @Override + public final void close() { + try { + backgroundResources.close(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new IllegalStateException("Failed to close resource", e); + } + } + + @Override + public void shutdown() { + backgroundResources.shutdown(); + } + + @Override + public boolean isShutdown() { + return backgroundResources.isShutdown(); + } + + @Override + public boolean isTerminated() { + return backgroundResources.isTerminated(); + } + + @Override + public void shutdownNow() { + backgroundResources.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return backgroundResources.awaitTermination(duration, unit); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonPublisherCallableFactory.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonPublisherCallableFactory.java new file mode 100644 index 000000000000..f9da3ee7f673 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonPublisherCallableFactory.java @@ -0,0 +1,101 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonCallableFactory; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshotCallable; +import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; +import com.google.api.gax.httpjson.longrunning.stub.OperationsStub; +import com.google.api.gax.rpc.BatchingCallSettings; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.OperationCallSettings; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.longrunning.Operation; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * REST callable factory implementation for the Publisher service API. + * + *

This class is for advanced usage. + */ +@Generated("by gapic-generator-java") +public class HttpJsonPublisherCallableFactory + implements HttpJsonStubCallableFactory { + + @Override + public UnaryCallable createUnaryCallable( + HttpJsonCallSettings httpJsonCallSettings, + UnaryCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createUnaryCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public + UnaryCallable createPagedCallable( + HttpJsonCallSettings httpJsonCallSettings, + PagedCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createPagedCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public UnaryCallable createBatchingCallable( + HttpJsonCallSettings httpJsonCallSettings, + BatchingCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createBatchingCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public + OperationCallable createOperationCallable( + HttpJsonCallSettings httpJsonCallSettings, + OperationCallSettings callSettings, + ClientContext clientContext, + OperationsStub operationsStub) { + UnaryCallable innerCallable = + HttpJsonCallableFactory.createBaseUnaryCallable( + httpJsonCallSettings, callSettings.getInitialCallSettings(), clientContext); + HttpJsonOperationSnapshotCallable initialCallable = + new HttpJsonOperationSnapshotCallable( + innerCallable, + httpJsonCallSettings.getMethodDescriptor().getOperationSnapshotFactory()); + return HttpJsonCallableFactory.createOperationCallable( + callSettings, clientContext, operationsStub.longRunningClient(), initialCallable); + } + + @Override + public + ServerStreamingCallable createServerStreamingCallable( + HttpJsonCallSettings httpJsonCallSettings, + ServerStreamingCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createServerStreamingCallable( + httpJsonCallSettings, callSettings, clientContext); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonPublisherStub.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonPublisherStub.java new file mode 100644 index 000000000000..09c5f83f8eaf --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonPublisherStub.java @@ -0,0 +1,909 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSubscriptionsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicsPagedResponse; + +import com.google.api.core.InternalApi; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.BackgroundResourceAggregation; +import com.google.api.gax.httpjson.ApiMethodDescriptor; +import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; +import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; +import com.google.api.gax.httpjson.ProtoMessageResponseParser; +import com.google.api.gax.httpjson.ProtoRestSerializer; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.RequestParamsBuilder; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.protobuf.TypeRegistry; +import com.google.pubsub.v1.DeleteTopicRequest; +import com.google.pubsub.v1.DetachSubscriptionRequest; +import com.google.pubsub.v1.DetachSubscriptionResponse; +import com.google.pubsub.v1.GetTopicRequest; +import com.google.pubsub.v1.ListTopicSnapshotsRequest; +import com.google.pubsub.v1.ListTopicSnapshotsResponse; +import com.google.pubsub.v1.ListTopicSubscriptionsRequest; +import com.google.pubsub.v1.ListTopicSubscriptionsResponse; +import com.google.pubsub.v1.ListTopicsRequest; +import com.google.pubsub.v1.ListTopicsResponse; +import com.google.pubsub.v1.PublishRequest; +import com.google.pubsub.v1.PublishResponse; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.UpdateTopicRequest; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * REST stub implementation for the Publisher service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public class HttpJsonPublisherStub extends PublisherStub { + private static final TypeRegistry typeRegistry = TypeRegistry.newBuilder().build(); + + private static final ApiMethodDescriptor createTopicMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Publisher/CreateTopic") + .setHttpMethod("PUT") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{name=projects/*/topics/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = ProtoRestSerializer.create(); + serializer.putPathParam(fields, "name", request.getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearName().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Topic.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor updateTopicMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Publisher/UpdateTopic") + .setHttpMethod("PATCH") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{topic.name=projects/*/topics/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "topic.name", request.getTopic().getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Topic.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + publishMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Publisher/Publish") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{topic=projects/*/topics/*}:publish", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "topic", request.getTopic()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearTopic().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(PublishResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor getTopicMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Publisher/GetTopic") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{topic=projects/*/topics/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "topic", request.getTopic()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Topic.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + listTopicsMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Publisher/ListTopics") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{project=projects/*}/topics", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "project", request.getProject()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "pageSize", request.getPageSize()); + serializer.putQueryParam(fields, "pageToken", request.getPageToken()); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(ListTopicsResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor< + ListTopicSubscriptionsRequest, ListTopicSubscriptionsResponse> + listTopicSubscriptionsMethodDescriptor = + ApiMethodDescriptor + .newBuilder() + .setFullMethodName("google.pubsub.v1.Publisher/ListTopicSubscriptions") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{topic=projects/*/topics/*}/subscriptions", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "topic", request.getTopic()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "pageSize", request.getPageSize()); + serializer.putQueryParam(fields, "pageToken", request.getPageToken()); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(ListTopicSubscriptionsResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + listTopicSnapshotsMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Publisher/ListTopicSnapshots") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{topic=projects/*/topics/*}/snapshots", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "topic", request.getTopic()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "pageSize", request.getPageSize()); + serializer.putQueryParam(fields, "pageToken", request.getPageToken()); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(ListTopicSnapshotsResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor deleteTopicMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Publisher/DeleteTopic") + .setHttpMethod("DELETE") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{topic=projects/*/topics/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "topic", request.getTopic()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Empty.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + detachSubscriptionMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Publisher/DetachSubscription") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{subscription=projects/*/subscriptions/*}:detach", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam( + fields, "subscription", request.getSubscription()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(DetachSubscriptionResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + setIamPolicyMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.iam.v1.IAMPolicy/SetIamPolicy") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{resource=projects/*/topics/*}:setIamPolicy", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "resource", request.getResource()); + return fields; + }) + .setAdditionalPaths( + "/v1/{resource=projects/*/subscriptions/*}:setIamPolicy", + "/v1/{resource=projects/*/snapshots/*}:setIamPolicy", + "/v1/{resource=projects/*/schemas/*}:setIamPolicy") + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearResource().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Policy.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + getIamPolicyMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.iam.v1.IAMPolicy/GetIamPolicy") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{resource=projects/*/topics/*}:getIamPolicy", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "resource", request.getResource()); + return fields; + }) + .setAdditionalPaths( + "/v1/{resource=projects/*/subscriptions/*}:getIamPolicy", + "/v1/{resource=projects/*/snapshots/*}:getIamPolicy", + "/v1/{resource=projects/*/schemas/*}:getIamPolicy") + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Policy.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + testIamPermissionsMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.iam.v1.IAMPolicy/TestIamPermissions") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{resource=projects/*/subscriptions/*}:testIamPermissions", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "resource", request.getResource()); + return fields; + }) + .setAdditionalPaths( + "/v1/{resource=projects/*/topics/*}:testIamPermissions", + "/v1/{resource=projects/*/snapshots/*}:testIamPermissions", + "/v1/{resource=projects/*/schemas/*}:testIamPermissions") + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearResource().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(TestIamPermissionsResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private final UnaryCallable createTopicCallable; + private final UnaryCallable updateTopicCallable; + private final UnaryCallable publishCallable; + private final UnaryCallable getTopicCallable; + private final UnaryCallable listTopicsCallable; + private final UnaryCallable listTopicsPagedCallable; + private final UnaryCallable + listTopicSubscriptionsCallable; + private final UnaryCallable + listTopicSubscriptionsPagedCallable; + private final UnaryCallable + listTopicSnapshotsCallable; + private final UnaryCallable + listTopicSnapshotsPagedCallable; + private final UnaryCallable deleteTopicCallable; + private final UnaryCallable + detachSubscriptionCallable; + private final UnaryCallable setIamPolicyCallable; + private final UnaryCallable getIamPolicyCallable; + private final UnaryCallable + testIamPermissionsCallable; + + private final BackgroundResource backgroundResources; + private final HttpJsonStubCallableFactory callableFactory; + + public static final HttpJsonPublisherStub create(PublisherStubSettings settings) + throws IOException { + return new HttpJsonPublisherStub(settings, ClientContext.create(settings)); + } + + public static final HttpJsonPublisherStub create(ClientContext clientContext) throws IOException { + return new HttpJsonPublisherStub( + PublisherStubSettings.newHttpJsonBuilder().build(), clientContext); + } + + public static final HttpJsonPublisherStub create( + ClientContext clientContext, HttpJsonStubCallableFactory callableFactory) throws IOException { + return new HttpJsonPublisherStub( + PublisherStubSettings.newHttpJsonBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of HttpJsonPublisherStub, using the given settings. This is protected so + * that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected HttpJsonPublisherStub(PublisherStubSettings settings, ClientContext clientContext) + throws IOException { + this(settings, clientContext, new HttpJsonPublisherCallableFactory()); + } + + /** + * Constructs an instance of HttpJsonPublisherStub, using the given settings. This is protected so + * that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected HttpJsonPublisherStub( + PublisherStubSettings settings, + ClientContext clientContext, + HttpJsonStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + + HttpJsonCallSettings createTopicTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(createTopicMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings updateTopicTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(updateTopicMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("topic.name", String.valueOf(request.getTopic().getName())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings publishTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(publishMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("topic", String.valueOf(request.getTopic())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings getTopicTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(getTopicMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("topic", String.valueOf(request.getTopic())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings listTopicsTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(listTopicsMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("project", String.valueOf(request.getProject())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + listTopicSubscriptionsTransportSettings = + HttpJsonCallSettings + .newBuilder() + .setMethodDescriptor(listTopicSubscriptionsMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("topic", String.valueOf(request.getTopic())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + listTopicSnapshotsTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(listTopicSnapshotsMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("topic", String.valueOf(request.getTopic())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings deleteTopicTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(deleteTopicMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("topic", String.valueOf(request.getTopic())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + detachSubscriptionTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(detachSubscriptionMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings setIamPolicyTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(setIamPolicyMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings getIamPolicyTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(getIamPolicyMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + testIamPermissionsTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(testIamPermissionsMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + + this.createTopicCallable = + callableFactory.createUnaryCallable( + createTopicTransportSettings, settings.createTopicSettings(), clientContext); + this.updateTopicCallable = + callableFactory.createUnaryCallable( + updateTopicTransportSettings, settings.updateTopicSettings(), clientContext); + this.publishCallable = + callableFactory.createBatchingCallable( + publishTransportSettings, settings.publishSettings(), clientContext); + this.getTopicCallable = + callableFactory.createUnaryCallable( + getTopicTransportSettings, settings.getTopicSettings(), clientContext); + this.listTopicsCallable = + callableFactory.createUnaryCallable( + listTopicsTransportSettings, settings.listTopicsSettings(), clientContext); + this.listTopicsPagedCallable = + callableFactory.createPagedCallable( + listTopicsTransportSettings, settings.listTopicsSettings(), clientContext); + this.listTopicSubscriptionsCallable = + callableFactory.createUnaryCallable( + listTopicSubscriptionsTransportSettings, + settings.listTopicSubscriptionsSettings(), + clientContext); + this.listTopicSubscriptionsPagedCallable = + callableFactory.createPagedCallable( + listTopicSubscriptionsTransportSettings, + settings.listTopicSubscriptionsSettings(), + clientContext); + this.listTopicSnapshotsCallable = + callableFactory.createUnaryCallable( + listTopicSnapshotsTransportSettings, + settings.listTopicSnapshotsSettings(), + clientContext); + this.listTopicSnapshotsPagedCallable = + callableFactory.createPagedCallable( + listTopicSnapshotsTransportSettings, + settings.listTopicSnapshotsSettings(), + clientContext); + this.deleteTopicCallable = + callableFactory.createUnaryCallable( + deleteTopicTransportSettings, settings.deleteTopicSettings(), clientContext); + this.detachSubscriptionCallable = + callableFactory.createUnaryCallable( + detachSubscriptionTransportSettings, + settings.detachSubscriptionSettings(), + clientContext); + this.setIamPolicyCallable = + callableFactory.createUnaryCallable( + setIamPolicyTransportSettings, settings.setIamPolicySettings(), clientContext); + this.getIamPolicyCallable = + callableFactory.createUnaryCallable( + getIamPolicyTransportSettings, settings.getIamPolicySettings(), clientContext); + this.testIamPermissionsCallable = + callableFactory.createUnaryCallable( + testIamPermissionsTransportSettings, + settings.testIamPermissionsSettings(), + clientContext); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + @InternalApi + public static List getMethodDescriptors() { + List methodDescriptors = new ArrayList<>(); + methodDescriptors.add(createTopicMethodDescriptor); + methodDescriptors.add(updateTopicMethodDescriptor); + methodDescriptors.add(publishMethodDescriptor); + methodDescriptors.add(getTopicMethodDescriptor); + methodDescriptors.add(listTopicsMethodDescriptor); + methodDescriptors.add(listTopicSubscriptionsMethodDescriptor); + methodDescriptors.add(listTopicSnapshotsMethodDescriptor); + methodDescriptors.add(deleteTopicMethodDescriptor); + methodDescriptors.add(detachSubscriptionMethodDescriptor); + methodDescriptors.add(setIamPolicyMethodDescriptor); + methodDescriptors.add(getIamPolicyMethodDescriptor); + methodDescriptors.add(testIamPermissionsMethodDescriptor); + return methodDescriptors; + } + + @Override + public UnaryCallable createTopicCallable() { + return createTopicCallable; + } + + @Override + public UnaryCallable updateTopicCallable() { + return updateTopicCallable; + } + + @Override + public UnaryCallable publishCallable() { + return publishCallable; + } + + @Override + public UnaryCallable getTopicCallable() { + return getTopicCallable; + } + + @Override + public UnaryCallable listTopicsCallable() { + return listTopicsCallable; + } + + @Override + public UnaryCallable listTopicsPagedCallable() { + return listTopicsPagedCallable; + } + + @Override + public UnaryCallable + listTopicSubscriptionsCallable() { + return listTopicSubscriptionsCallable; + } + + @Override + public UnaryCallable + listTopicSubscriptionsPagedCallable() { + return listTopicSubscriptionsPagedCallable; + } + + @Override + public UnaryCallable + listTopicSnapshotsCallable() { + return listTopicSnapshotsCallable; + } + + @Override + public UnaryCallable + listTopicSnapshotsPagedCallable() { + return listTopicSnapshotsPagedCallable; + } + + @Override + public UnaryCallable deleteTopicCallable() { + return deleteTopicCallable; + } + + @Override + public UnaryCallable + detachSubscriptionCallable() { + return detachSubscriptionCallable; + } + + @Override + public UnaryCallable setIamPolicyCallable() { + return setIamPolicyCallable; + } + + @Override + public UnaryCallable getIamPolicyCallable() { + return getIamPolicyCallable; + } + + @Override + public UnaryCallable + testIamPermissionsCallable() { + return testIamPermissionsCallable; + } + + @Override + public final void close() { + try { + backgroundResources.close(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new IllegalStateException("Failed to close resource", e); + } + } + + @Override + public void shutdown() { + backgroundResources.shutdown(); + } + + @Override + public boolean isShutdown() { + return backgroundResources.isShutdown(); + } + + @Override + public boolean isTerminated() { + return backgroundResources.isTerminated(); + } + + @Override + public void shutdownNow() { + backgroundResources.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return backgroundResources.awaitTermination(duration, unit); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonSchemaServiceCallableFactory.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonSchemaServiceCallableFactory.java new file mode 100644 index 000000000000..b725059aaf2e --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonSchemaServiceCallableFactory.java @@ -0,0 +1,101 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonCallableFactory; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshotCallable; +import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; +import com.google.api.gax.httpjson.longrunning.stub.OperationsStub; +import com.google.api.gax.rpc.BatchingCallSettings; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.OperationCallSettings; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.longrunning.Operation; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * REST callable factory implementation for the SchemaService service API. + * + *

This class is for advanced usage. + */ +@Generated("by gapic-generator-java") +public class HttpJsonSchemaServiceCallableFactory + implements HttpJsonStubCallableFactory { + + @Override + public UnaryCallable createUnaryCallable( + HttpJsonCallSettings httpJsonCallSettings, + UnaryCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createUnaryCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public + UnaryCallable createPagedCallable( + HttpJsonCallSettings httpJsonCallSettings, + PagedCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createPagedCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public UnaryCallable createBatchingCallable( + HttpJsonCallSettings httpJsonCallSettings, + BatchingCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createBatchingCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public + OperationCallable createOperationCallable( + HttpJsonCallSettings httpJsonCallSettings, + OperationCallSettings callSettings, + ClientContext clientContext, + OperationsStub operationsStub) { + UnaryCallable innerCallable = + HttpJsonCallableFactory.createBaseUnaryCallable( + httpJsonCallSettings, callSettings.getInitialCallSettings(), clientContext); + HttpJsonOperationSnapshotCallable initialCallable = + new HttpJsonOperationSnapshotCallable( + innerCallable, + httpJsonCallSettings.getMethodDescriptor().getOperationSnapshotFactory()); + return HttpJsonCallableFactory.createOperationCallable( + callSettings, clientContext, operationsStub.longRunningClient(), initialCallable); + } + + @Override + public + ServerStreamingCallable createServerStreamingCallable( + HttpJsonCallSettings httpJsonCallSettings, + ServerStreamingCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createServerStreamingCallable( + httpJsonCallSettings, callSettings, clientContext); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonSchemaServiceStub.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonSchemaServiceStub.java new file mode 100644 index 000000000000..0b9a729a47ea --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonSchemaServiceStub.java @@ -0,0 +1,960 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemaRevisionsPagedResponse; +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemasPagedResponse; + +import com.google.api.core.InternalApi; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.BackgroundResourceAggregation; +import com.google.api.gax.httpjson.ApiMethodDescriptor; +import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; +import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; +import com.google.api.gax.httpjson.ProtoMessageResponseParser; +import com.google.api.gax.httpjson.ProtoRestSerializer; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.RequestParamsBuilder; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.protobuf.TypeRegistry; +import com.google.pubsub.v1.CommitSchemaRequest; +import com.google.pubsub.v1.CreateSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRevisionRequest; +import com.google.pubsub.v1.GetSchemaRequest; +import com.google.pubsub.v1.ListSchemaRevisionsRequest; +import com.google.pubsub.v1.ListSchemaRevisionsResponse; +import com.google.pubsub.v1.ListSchemasRequest; +import com.google.pubsub.v1.ListSchemasResponse; +import com.google.pubsub.v1.RollbackSchemaRequest; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.ValidateMessageRequest; +import com.google.pubsub.v1.ValidateMessageResponse; +import com.google.pubsub.v1.ValidateSchemaRequest; +import com.google.pubsub.v1.ValidateSchemaResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * REST stub implementation for the SchemaService service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public class HttpJsonSchemaServiceStub extends SchemaServiceStub { + private static final TypeRegistry typeRegistry = TypeRegistry.newBuilder().build(); + + private static final ApiMethodDescriptor + createSchemaMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.SchemaService/CreateSchema") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{parent=projects/*}/schemas", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "parent", request.getParent()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "schemaId", request.getSchemaId()); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("schema", request.getSchema(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Schema.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor getSchemaMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.SchemaService/GetSchema") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{name=projects/*/schemas/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "name", request.getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "view", request.getViewValue()); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Schema.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + listSchemasMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.SchemaService/ListSchemas") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{parent=projects/*}/schemas", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "parent", request.getParent()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "pageSize", request.getPageSize()); + serializer.putQueryParam(fields, "pageToken", request.getPageToken()); + serializer.putQueryParam(fields, "view", request.getViewValue()); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(ListSchemasResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + listSchemaRevisionsMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.SchemaService/ListSchemaRevisions") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{name=projects/*/schemas/*}:listRevisions", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "name", request.getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "pageSize", request.getPageSize()); + serializer.putQueryParam(fields, "pageToken", request.getPageToken()); + serializer.putQueryParam(fields, "view", request.getViewValue()); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(ListSchemaRevisionsResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + commitSchemaMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.SchemaService/CommitSchema") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{name=projects/*/schemas/*}:commit", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "name", request.getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearName().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Schema.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + rollbackSchemaMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.SchemaService/RollbackSchema") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{name=projects/*/schemas/*}:rollback", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "name", request.getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearName().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Schema.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + deleteSchemaRevisionMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.SchemaService/DeleteSchemaRevision") + .setHttpMethod("DELETE") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{name=projects/*/schemas/*}:deleteRevision", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "name", request.getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "revisionId", request.getRevisionId()); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Schema.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + deleteSchemaMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.SchemaService/DeleteSchema") + .setHttpMethod("DELETE") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{name=projects/*/schemas/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "name", request.getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Empty.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + validateSchemaMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.SchemaService/ValidateSchema") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{parent=projects/*}/schemas:validate", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "parent", request.getParent()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearParent().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(ValidateSchemaResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + validateMessageMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.SchemaService/ValidateMessage") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{parent=projects/*}/schemas:validateMessage", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "parent", request.getParent()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearParent().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(ValidateMessageResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + setIamPolicyMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.iam.v1.IAMPolicy/SetIamPolicy") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{resource=projects/*/topics/*}:setIamPolicy", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "resource", request.getResource()); + return fields; + }) + .setAdditionalPaths( + "/v1/{resource=projects/*/subscriptions/*}:setIamPolicy", + "/v1/{resource=projects/*/snapshots/*}:setIamPolicy", + "/v1/{resource=projects/*/schemas/*}:setIamPolicy") + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearResource().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Policy.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + getIamPolicyMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.iam.v1.IAMPolicy/GetIamPolicy") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{resource=projects/*/topics/*}:getIamPolicy", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "resource", request.getResource()); + return fields; + }) + .setAdditionalPaths( + "/v1/{resource=projects/*/subscriptions/*}:getIamPolicy", + "/v1/{resource=projects/*/snapshots/*}:getIamPolicy", + "/v1/{resource=projects/*/schemas/*}:getIamPolicy") + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Policy.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + testIamPermissionsMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.iam.v1.IAMPolicy/TestIamPermissions") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{resource=projects/*/subscriptions/*}:testIamPermissions", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "resource", request.getResource()); + return fields; + }) + .setAdditionalPaths( + "/v1/{resource=projects/*/topics/*}:testIamPermissions", + "/v1/{resource=projects/*/snapshots/*}:testIamPermissions", + "/v1/{resource=projects/*/schemas/*}:testIamPermissions") + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearResource().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(TestIamPermissionsResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private final UnaryCallable createSchemaCallable; + private final UnaryCallable getSchemaCallable; + private final UnaryCallable listSchemasCallable; + private final UnaryCallable + listSchemasPagedCallable; + private final UnaryCallable + listSchemaRevisionsCallable; + private final UnaryCallable + listSchemaRevisionsPagedCallable; + private final UnaryCallable commitSchemaCallable; + private final UnaryCallable rollbackSchemaCallable; + private final UnaryCallable deleteSchemaRevisionCallable; + private final UnaryCallable deleteSchemaCallable; + private final UnaryCallable validateSchemaCallable; + private final UnaryCallable + validateMessageCallable; + private final UnaryCallable setIamPolicyCallable; + private final UnaryCallable getIamPolicyCallable; + private final UnaryCallable + testIamPermissionsCallable; + + private final BackgroundResource backgroundResources; + private final HttpJsonStubCallableFactory callableFactory; + + public static final HttpJsonSchemaServiceStub create(SchemaServiceStubSettings settings) + throws IOException { + return new HttpJsonSchemaServiceStub(settings, ClientContext.create(settings)); + } + + public static final HttpJsonSchemaServiceStub create(ClientContext clientContext) + throws IOException { + return new HttpJsonSchemaServiceStub( + SchemaServiceStubSettings.newHttpJsonBuilder().build(), clientContext); + } + + public static final HttpJsonSchemaServiceStub create( + ClientContext clientContext, HttpJsonStubCallableFactory callableFactory) throws IOException { + return new HttpJsonSchemaServiceStub( + SchemaServiceStubSettings.newHttpJsonBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of HttpJsonSchemaServiceStub, using the given settings. This is + * protected so that it is easy to make a subclass, but otherwise, the static factory methods + * should be preferred. + */ + protected HttpJsonSchemaServiceStub( + SchemaServiceStubSettings settings, ClientContext clientContext) throws IOException { + this(settings, clientContext, new HttpJsonSchemaServiceCallableFactory()); + } + + /** + * Constructs an instance of HttpJsonSchemaServiceStub, using the given settings. This is + * protected so that it is easy to make a subclass, but otherwise, the static factory methods + * should be preferred. + */ + protected HttpJsonSchemaServiceStub( + SchemaServiceStubSettings settings, + ClientContext clientContext, + HttpJsonStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + + HttpJsonCallSettings createSchemaTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(createSchemaMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("parent", String.valueOf(request.getParent())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings getSchemaTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(getSchemaMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings listSchemasTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(listSchemasMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("parent", String.valueOf(request.getParent())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + listSchemaRevisionsTransportSettings = + HttpJsonCallSettings + .newBuilder() + .setMethodDescriptor(listSchemaRevisionsMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings commitSchemaTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(commitSchemaMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings rollbackSchemaTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(rollbackSchemaMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + deleteSchemaRevisionTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(deleteSchemaRevisionMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings deleteSchemaTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(deleteSchemaMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + validateSchemaTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(validateSchemaMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("parent", String.valueOf(request.getParent())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + validateMessageTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(validateMessageMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("parent", String.valueOf(request.getParent())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings setIamPolicyTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(setIamPolicyMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings getIamPolicyTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(getIamPolicyMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + testIamPermissionsTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(testIamPermissionsMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + + this.createSchemaCallable = + callableFactory.createUnaryCallable( + createSchemaTransportSettings, settings.createSchemaSettings(), clientContext); + this.getSchemaCallable = + callableFactory.createUnaryCallable( + getSchemaTransportSettings, settings.getSchemaSettings(), clientContext); + this.listSchemasCallable = + callableFactory.createUnaryCallable( + listSchemasTransportSettings, settings.listSchemasSettings(), clientContext); + this.listSchemasPagedCallable = + callableFactory.createPagedCallable( + listSchemasTransportSettings, settings.listSchemasSettings(), clientContext); + this.listSchemaRevisionsCallable = + callableFactory.createUnaryCallable( + listSchemaRevisionsTransportSettings, + settings.listSchemaRevisionsSettings(), + clientContext); + this.listSchemaRevisionsPagedCallable = + callableFactory.createPagedCallable( + listSchemaRevisionsTransportSettings, + settings.listSchemaRevisionsSettings(), + clientContext); + this.commitSchemaCallable = + callableFactory.createUnaryCallable( + commitSchemaTransportSettings, settings.commitSchemaSettings(), clientContext); + this.rollbackSchemaCallable = + callableFactory.createUnaryCallable( + rollbackSchemaTransportSettings, settings.rollbackSchemaSettings(), clientContext); + this.deleteSchemaRevisionCallable = + callableFactory.createUnaryCallable( + deleteSchemaRevisionTransportSettings, + settings.deleteSchemaRevisionSettings(), + clientContext); + this.deleteSchemaCallable = + callableFactory.createUnaryCallable( + deleteSchemaTransportSettings, settings.deleteSchemaSettings(), clientContext); + this.validateSchemaCallable = + callableFactory.createUnaryCallable( + validateSchemaTransportSettings, settings.validateSchemaSettings(), clientContext); + this.validateMessageCallable = + callableFactory.createUnaryCallable( + validateMessageTransportSettings, settings.validateMessageSettings(), clientContext); + this.setIamPolicyCallable = + callableFactory.createUnaryCallable( + setIamPolicyTransportSettings, settings.setIamPolicySettings(), clientContext); + this.getIamPolicyCallable = + callableFactory.createUnaryCallable( + getIamPolicyTransportSettings, settings.getIamPolicySettings(), clientContext); + this.testIamPermissionsCallable = + callableFactory.createUnaryCallable( + testIamPermissionsTransportSettings, + settings.testIamPermissionsSettings(), + clientContext); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + @InternalApi + public static List getMethodDescriptors() { + List methodDescriptors = new ArrayList<>(); + methodDescriptors.add(createSchemaMethodDescriptor); + methodDescriptors.add(getSchemaMethodDescriptor); + methodDescriptors.add(listSchemasMethodDescriptor); + methodDescriptors.add(listSchemaRevisionsMethodDescriptor); + methodDescriptors.add(commitSchemaMethodDescriptor); + methodDescriptors.add(rollbackSchemaMethodDescriptor); + methodDescriptors.add(deleteSchemaRevisionMethodDescriptor); + methodDescriptors.add(deleteSchemaMethodDescriptor); + methodDescriptors.add(validateSchemaMethodDescriptor); + methodDescriptors.add(validateMessageMethodDescriptor); + methodDescriptors.add(setIamPolicyMethodDescriptor); + methodDescriptors.add(getIamPolicyMethodDescriptor); + methodDescriptors.add(testIamPermissionsMethodDescriptor); + return methodDescriptors; + } + + @Override + public UnaryCallable createSchemaCallable() { + return createSchemaCallable; + } + + @Override + public UnaryCallable getSchemaCallable() { + return getSchemaCallable; + } + + @Override + public UnaryCallable listSchemasCallable() { + return listSchemasCallable; + } + + @Override + public UnaryCallable listSchemasPagedCallable() { + return listSchemasPagedCallable; + } + + @Override + public UnaryCallable + listSchemaRevisionsCallable() { + return listSchemaRevisionsCallable; + } + + @Override + public UnaryCallable + listSchemaRevisionsPagedCallable() { + return listSchemaRevisionsPagedCallable; + } + + @Override + public UnaryCallable commitSchemaCallable() { + return commitSchemaCallable; + } + + @Override + public UnaryCallable rollbackSchemaCallable() { + return rollbackSchemaCallable; + } + + @Override + public UnaryCallable deleteSchemaRevisionCallable() { + return deleteSchemaRevisionCallable; + } + + @Override + public UnaryCallable deleteSchemaCallable() { + return deleteSchemaCallable; + } + + @Override + public UnaryCallable validateSchemaCallable() { + return validateSchemaCallable; + } + + @Override + public UnaryCallable validateMessageCallable() { + return validateMessageCallable; + } + + @Override + public UnaryCallable setIamPolicyCallable() { + return setIamPolicyCallable; + } + + @Override + public UnaryCallable getIamPolicyCallable() { + return getIamPolicyCallable; + } + + @Override + public UnaryCallable + testIamPermissionsCallable() { + return testIamPermissionsCallable; + } + + @Override + public final void close() { + try { + backgroundResources.close(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new IllegalStateException("Failed to close resource", e); + } + } + + @Override + public void shutdown() { + backgroundResources.shutdown(); + } + + @Override + public boolean isShutdown() { + return backgroundResources.isShutdown(); + } + + @Override + public boolean isTerminated() { + return backgroundResources.isTerminated(); + } + + @Override + public void shutdownNow() { + backgroundResources.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return backgroundResources.awaitTermination(duration, unit); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonSubscriberCallableFactory.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonSubscriberCallableFactory.java new file mode 100644 index 000000000000..a719f85ef8f6 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonSubscriberCallableFactory.java @@ -0,0 +1,101 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonCallableFactory; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshotCallable; +import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; +import com.google.api.gax.httpjson.longrunning.stub.OperationsStub; +import com.google.api.gax.rpc.BatchingCallSettings; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.OperationCallSettings; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.longrunning.Operation; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * REST callable factory implementation for the Subscriber service API. + * + *

This class is for advanced usage. + */ +@Generated("by gapic-generator-java") +public class HttpJsonSubscriberCallableFactory + implements HttpJsonStubCallableFactory { + + @Override + public UnaryCallable createUnaryCallable( + HttpJsonCallSettings httpJsonCallSettings, + UnaryCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createUnaryCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public + UnaryCallable createPagedCallable( + HttpJsonCallSettings httpJsonCallSettings, + PagedCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createPagedCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public UnaryCallable createBatchingCallable( + HttpJsonCallSettings httpJsonCallSettings, + BatchingCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createBatchingCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public + OperationCallable createOperationCallable( + HttpJsonCallSettings httpJsonCallSettings, + OperationCallSettings callSettings, + ClientContext clientContext, + OperationsStub operationsStub) { + UnaryCallable innerCallable = + HttpJsonCallableFactory.createBaseUnaryCallable( + httpJsonCallSettings, callSettings.getInitialCallSettings(), clientContext); + HttpJsonOperationSnapshotCallable initialCallable = + new HttpJsonOperationSnapshotCallable( + innerCallable, + httpJsonCallSettings.getMethodDescriptor().getOperationSnapshotFactory()); + return HttpJsonCallableFactory.createOperationCallable( + callSettings, clientContext, operationsStub.longRunningClient(), initialCallable); + } + + @Override + public + ServerStreamingCallable createServerStreamingCallable( + HttpJsonCallSettings httpJsonCallSettings, + ServerStreamingCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createServerStreamingCallable( + httpJsonCallSettings, callSettings, clientContext); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonSubscriberStub.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonSubscriberStub.java new file mode 100644 index 000000000000..4bb0774b8c90 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/HttpJsonSubscriberStub.java @@ -0,0 +1,1265 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSubscriptionsPagedResponse; + +import com.google.api.core.InternalApi; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.BackgroundResourceAggregation; +import com.google.api.gax.httpjson.ApiMethodDescriptor; +import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; +import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; +import com.google.api.gax.httpjson.ProtoMessageResponseParser; +import com.google.api.gax.httpjson.ProtoRestSerializer; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.RequestParamsBuilder; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.protobuf.TypeRegistry; +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.CreateSnapshotRequest; +import com.google.pubsub.v1.DeleteSnapshotRequest; +import com.google.pubsub.v1.DeleteSubscriptionRequest; +import com.google.pubsub.v1.GetSnapshotRequest; +import com.google.pubsub.v1.GetSubscriptionRequest; +import com.google.pubsub.v1.ListSnapshotsRequest; +import com.google.pubsub.v1.ListSnapshotsResponse; +import com.google.pubsub.v1.ListSubscriptionsRequest; +import com.google.pubsub.v1.ListSubscriptionsResponse; +import com.google.pubsub.v1.ModifyAckDeadlineRequest; +import com.google.pubsub.v1.ModifyPushConfigRequest; +import com.google.pubsub.v1.PullRequest; +import com.google.pubsub.v1.PullResponse; +import com.google.pubsub.v1.SeekRequest; +import com.google.pubsub.v1.SeekResponse; +import com.google.pubsub.v1.Snapshot; +import com.google.pubsub.v1.StreamingPullRequest; +import com.google.pubsub.v1.StreamingPullResponse; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.UpdateSnapshotRequest; +import com.google.pubsub.v1.UpdateSubscriptionRequest; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * REST stub implementation for the Subscriber service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public class HttpJsonSubscriberStub extends SubscriberStub { + private static final TypeRegistry typeRegistry = TypeRegistry.newBuilder().build(); + + private static final ApiMethodDescriptor + createSubscriptionMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/CreateSubscription") + .setHttpMethod("PUT") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{name=projects/*/subscriptions/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "name", request.getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearName().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Subscription.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + getSubscriptionMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/GetSubscription") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{subscription=projects/*/subscriptions/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam( + fields, "subscription", request.getSubscription()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Subscription.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + updateSubscriptionMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/UpdateSubscription") + .setHttpMethod("PATCH") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{subscription.name=projects/*/subscriptions/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam( + fields, "subscription.name", request.getSubscription().getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Subscription.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + listSubscriptionsMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/ListSubscriptions") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{project=projects/*}/subscriptions", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "project", request.getProject()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "pageSize", request.getPageSize()); + serializer.putQueryParam(fields, "pageToken", request.getPageToken()); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(ListSubscriptionsResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + deleteSubscriptionMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/DeleteSubscription") + .setHttpMethod("DELETE") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{subscription=projects/*/subscriptions/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam( + fields, "subscription", request.getSubscription()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Empty.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + modifyAckDeadlineMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/ModifyAckDeadline") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{subscription=projects/*/subscriptions/*}:modifyAckDeadline", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam( + fields, "subscription", request.getSubscription()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody( + "*", request.toBuilder().clearSubscription().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Empty.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor acknowledgeMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/Acknowledge") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{subscription=projects/*/subscriptions/*}:acknowledge", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "subscription", request.getSubscription()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearSubscription().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Empty.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor pullMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/Pull") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{subscription=projects/*/subscriptions/*}:pull", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = ProtoRestSerializer.create(); + serializer.putPathParam(fields, "subscription", request.getSubscription()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearSubscription().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(PullResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + modifyPushConfigMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/ModifyPushConfig") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{subscription=projects/*/subscriptions/*}:modifyPushConfig", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam( + fields, "subscription", request.getSubscription()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody( + "*", request.toBuilder().clearSubscription().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Empty.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + getSnapshotMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/GetSnapshot") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{snapshot=projects/*/snapshots/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "snapshot", request.getSnapshot()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Snapshot.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + listSnapshotsMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/ListSnapshots") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{project=projects/*}/snapshots", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "project", request.getProject()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "pageSize", request.getPageSize()); + serializer.putQueryParam(fields, "pageToken", request.getPageToken()); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(ListSnapshotsResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + createSnapshotMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/CreateSnapshot") + .setHttpMethod("PUT") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{name=projects/*/snapshots/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "name", request.getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearName().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Snapshot.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + updateSnapshotMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/UpdateSnapshot") + .setHttpMethod("PATCH") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{snapshot.name=projects/*/snapshots/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam( + fields, "snapshot.name", request.getSnapshot().getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Snapshot.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + deleteSnapshotMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/DeleteSnapshot") + .setHttpMethod("DELETE") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{snapshot=projects/*/snapshots/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "snapshot", request.getSnapshot()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Empty.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor seekMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.pubsub.v1.Subscriber/Seek") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{subscription=projects/*/subscriptions/*}:seek", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = ProtoRestSerializer.create(); + serializer.putPathParam(fields, "subscription", request.getSubscription()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearSubscription().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(SeekResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + setIamPolicyMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.iam.v1.IAMPolicy/SetIamPolicy") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{resource=projects/*/topics/*}:setIamPolicy", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "resource", request.getResource()); + return fields; + }) + .setAdditionalPaths( + "/v1/{resource=projects/*/subscriptions/*}:setIamPolicy", + "/v1/{resource=projects/*/snapshots/*}:setIamPolicy", + "/v1/{resource=projects/*/schemas/*}:setIamPolicy") + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearResource().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Policy.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + getIamPolicyMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.iam.v1.IAMPolicy/GetIamPolicy") + .setHttpMethod("GET") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{resource=projects/*/topics/*}:getIamPolicy", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "resource", request.getResource()); + return fields; + }) + .setAdditionalPaths( + "/v1/{resource=projects/*/subscriptions/*}:getIamPolicy", + "/v1/{resource=projects/*/snapshots/*}:getIamPolicy", + "/v1/{resource=projects/*/schemas/*}:getIamPolicy") + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor(request -> null) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Policy.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + testIamPermissionsMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.iam.v1.IAMPolicy/TestIamPermissions") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{resource=projects/*/subscriptions/*}:testIamPermissions", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "resource", request.getResource()); + return fields; + }) + .setAdditionalPaths( + "/v1/{resource=projects/*/topics/*}:testIamPermissions", + "/v1/{resource=projects/*/snapshots/*}:testIamPermissions", + "/v1/{resource=projects/*/schemas/*}:testIamPermissions") + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearResource().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(TestIamPermissionsResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private final UnaryCallable createSubscriptionCallable; + private final UnaryCallable getSubscriptionCallable; + private final UnaryCallable updateSubscriptionCallable; + private final UnaryCallable + listSubscriptionsCallable; + private final UnaryCallable + listSubscriptionsPagedCallable; + private final UnaryCallable deleteSubscriptionCallable; + private final UnaryCallable modifyAckDeadlineCallable; + private final UnaryCallable acknowledgeCallable; + private final UnaryCallable pullCallable; + private final UnaryCallable modifyPushConfigCallable; + private final UnaryCallable getSnapshotCallable; + private final UnaryCallable listSnapshotsCallable; + private final UnaryCallable + listSnapshotsPagedCallable; + private final UnaryCallable createSnapshotCallable; + private final UnaryCallable updateSnapshotCallable; + private final UnaryCallable deleteSnapshotCallable; + private final UnaryCallable seekCallable; + private final UnaryCallable setIamPolicyCallable; + private final UnaryCallable getIamPolicyCallable; + private final UnaryCallable + testIamPermissionsCallable; + + private final BackgroundResource backgroundResources; + private final HttpJsonStubCallableFactory callableFactory; + + public static final HttpJsonSubscriberStub create(SubscriberStubSettings settings) + throws IOException { + return new HttpJsonSubscriberStub(settings, ClientContext.create(settings)); + } + + public static final HttpJsonSubscriberStub create(ClientContext clientContext) + throws IOException { + return new HttpJsonSubscriberStub( + SubscriberStubSettings.newHttpJsonBuilder().build(), clientContext); + } + + public static final HttpJsonSubscriberStub create( + ClientContext clientContext, HttpJsonStubCallableFactory callableFactory) throws IOException { + return new HttpJsonSubscriberStub( + SubscriberStubSettings.newHttpJsonBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of HttpJsonSubscriberStub, using the given settings. This is protected + * so that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected HttpJsonSubscriberStub(SubscriberStubSettings settings, ClientContext clientContext) + throws IOException { + this(settings, clientContext, new HttpJsonSubscriberCallableFactory()); + } + + /** + * Constructs an instance of HttpJsonSubscriberStub, using the given settings. This is protected + * so that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected HttpJsonSubscriberStub( + SubscriberStubSettings settings, + ClientContext clientContext, + HttpJsonStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + + HttpJsonCallSettings createSubscriptionTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(createSubscriptionMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings getSubscriptionTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(getSubscriptionMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + updateSubscriptionTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(updateSubscriptionMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add( + "subscription.name", String.valueOf(request.getSubscription().getName())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + listSubscriptionsTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(listSubscriptionsMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("project", String.valueOf(request.getProject())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings deleteSubscriptionTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(deleteSubscriptionMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings modifyAckDeadlineTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(modifyAckDeadlineMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings acknowledgeTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(acknowledgeMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings pullTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(pullMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings modifyPushConfigTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(modifyPushConfigMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings getSnapshotTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(getSnapshotMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("snapshot", String.valueOf(request.getSnapshot())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + listSnapshotsTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(listSnapshotsMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("project", String.valueOf(request.getProject())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings createSnapshotTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(createSnapshotMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings updateSnapshotTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(updateSnapshotMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("snapshot.name", String.valueOf(request.getSnapshot().getName())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings deleteSnapshotTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(deleteSnapshotMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("snapshot", String.valueOf(request.getSnapshot())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings seekTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(seekMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("subscription", String.valueOf(request.getSubscription())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings setIamPolicyTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(setIamPolicyMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings getIamPolicyTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(getIamPolicyMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + testIamPermissionsTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(testIamPermissionsMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("resource", String.valueOf(request.getResource())); + return builder.build(); + }) + .build(); + + this.createSubscriptionCallable = + callableFactory.createUnaryCallable( + createSubscriptionTransportSettings, + settings.createSubscriptionSettings(), + clientContext); + this.getSubscriptionCallable = + callableFactory.createUnaryCallable( + getSubscriptionTransportSettings, settings.getSubscriptionSettings(), clientContext); + this.updateSubscriptionCallable = + callableFactory.createUnaryCallable( + updateSubscriptionTransportSettings, + settings.updateSubscriptionSettings(), + clientContext); + this.listSubscriptionsCallable = + callableFactory.createUnaryCallable( + listSubscriptionsTransportSettings, + settings.listSubscriptionsSettings(), + clientContext); + this.listSubscriptionsPagedCallable = + callableFactory.createPagedCallable( + listSubscriptionsTransportSettings, + settings.listSubscriptionsSettings(), + clientContext); + this.deleteSubscriptionCallable = + callableFactory.createUnaryCallable( + deleteSubscriptionTransportSettings, + settings.deleteSubscriptionSettings(), + clientContext); + this.modifyAckDeadlineCallable = + callableFactory.createUnaryCallable( + modifyAckDeadlineTransportSettings, + settings.modifyAckDeadlineSettings(), + clientContext); + this.acknowledgeCallable = + callableFactory.createUnaryCallable( + acknowledgeTransportSettings, settings.acknowledgeSettings(), clientContext); + this.pullCallable = + callableFactory.createUnaryCallable( + pullTransportSettings, settings.pullSettings(), clientContext); + this.modifyPushConfigCallable = + callableFactory.createUnaryCallable( + modifyPushConfigTransportSettings, settings.modifyPushConfigSettings(), clientContext); + this.getSnapshotCallable = + callableFactory.createUnaryCallable( + getSnapshotTransportSettings, settings.getSnapshotSettings(), clientContext); + this.listSnapshotsCallable = + callableFactory.createUnaryCallable( + listSnapshotsTransportSettings, settings.listSnapshotsSettings(), clientContext); + this.listSnapshotsPagedCallable = + callableFactory.createPagedCallable( + listSnapshotsTransportSettings, settings.listSnapshotsSettings(), clientContext); + this.createSnapshotCallable = + callableFactory.createUnaryCallable( + createSnapshotTransportSettings, settings.createSnapshotSettings(), clientContext); + this.updateSnapshotCallable = + callableFactory.createUnaryCallable( + updateSnapshotTransportSettings, settings.updateSnapshotSettings(), clientContext); + this.deleteSnapshotCallable = + callableFactory.createUnaryCallable( + deleteSnapshotTransportSettings, settings.deleteSnapshotSettings(), clientContext); + this.seekCallable = + callableFactory.createUnaryCallable( + seekTransportSettings, settings.seekSettings(), clientContext); + this.setIamPolicyCallable = + callableFactory.createUnaryCallable( + setIamPolicyTransportSettings, settings.setIamPolicySettings(), clientContext); + this.getIamPolicyCallable = + callableFactory.createUnaryCallable( + getIamPolicyTransportSettings, settings.getIamPolicySettings(), clientContext); + this.testIamPermissionsCallable = + callableFactory.createUnaryCallable( + testIamPermissionsTransportSettings, + settings.testIamPermissionsSettings(), + clientContext); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + @InternalApi + public static List getMethodDescriptors() { + List methodDescriptors = new ArrayList<>(); + methodDescriptors.add(createSubscriptionMethodDescriptor); + methodDescriptors.add(getSubscriptionMethodDescriptor); + methodDescriptors.add(updateSubscriptionMethodDescriptor); + methodDescriptors.add(listSubscriptionsMethodDescriptor); + methodDescriptors.add(deleteSubscriptionMethodDescriptor); + methodDescriptors.add(modifyAckDeadlineMethodDescriptor); + methodDescriptors.add(acknowledgeMethodDescriptor); + methodDescriptors.add(pullMethodDescriptor); + methodDescriptors.add(modifyPushConfigMethodDescriptor); + methodDescriptors.add(getSnapshotMethodDescriptor); + methodDescriptors.add(listSnapshotsMethodDescriptor); + methodDescriptors.add(createSnapshotMethodDescriptor); + methodDescriptors.add(updateSnapshotMethodDescriptor); + methodDescriptors.add(deleteSnapshotMethodDescriptor); + methodDescriptors.add(seekMethodDescriptor); + methodDescriptors.add(setIamPolicyMethodDescriptor); + methodDescriptors.add(getIamPolicyMethodDescriptor); + methodDescriptors.add(testIamPermissionsMethodDescriptor); + return methodDescriptors; + } + + @Override + public UnaryCallable createSubscriptionCallable() { + return createSubscriptionCallable; + } + + @Override + public UnaryCallable getSubscriptionCallable() { + return getSubscriptionCallable; + } + + @Override + public UnaryCallable updateSubscriptionCallable() { + return updateSubscriptionCallable; + } + + @Override + public UnaryCallable + listSubscriptionsCallable() { + return listSubscriptionsCallable; + } + + @Override + public UnaryCallable + listSubscriptionsPagedCallable() { + return listSubscriptionsPagedCallable; + } + + @Override + public UnaryCallable deleteSubscriptionCallable() { + return deleteSubscriptionCallable; + } + + @Override + public UnaryCallable modifyAckDeadlineCallable() { + return modifyAckDeadlineCallable; + } + + @Override + public UnaryCallable acknowledgeCallable() { + return acknowledgeCallable; + } + + @Override + public UnaryCallable pullCallable() { + return pullCallable; + } + + @Override + public UnaryCallable modifyPushConfigCallable() { + return modifyPushConfigCallable; + } + + @Override + public UnaryCallable getSnapshotCallable() { + return getSnapshotCallable; + } + + @Override + public UnaryCallable listSnapshotsCallable() { + return listSnapshotsCallable; + } + + @Override + public UnaryCallable + listSnapshotsPagedCallable() { + return listSnapshotsPagedCallable; + } + + @Override + public UnaryCallable createSnapshotCallable() { + return createSnapshotCallable; + } + + @Override + public UnaryCallable updateSnapshotCallable() { + return updateSnapshotCallable; + } + + @Override + public UnaryCallable deleteSnapshotCallable() { + return deleteSnapshotCallable; + } + + @Override + public UnaryCallable seekCallable() { + return seekCallable; + } + + @Override + public UnaryCallable setIamPolicyCallable() { + return setIamPolicyCallable; + } + + @Override + public UnaryCallable getIamPolicyCallable() { + return getIamPolicyCallable; + } + + @Override + public UnaryCallable + testIamPermissionsCallable() { + return testIamPermissionsCallable; + } + + @Override + public BidiStreamingCallable + streamingPullCallable() { + throw new UnsupportedOperationException( + "Not implemented: streamingPullCallable(). REST transport is not implemented for this" + + " method yet."); + } + + @Override + public final void close() { + try { + backgroundResources.close(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new IllegalStateException("Failed to close resource", e); + } + } + + @Override + public void shutdown() { + backgroundResources.shutdown(); + } + + @Override + public boolean isShutdown() { + return backgroundResources.isShutdown(); + } + + @Override + public boolean isTerminated() { + return backgroundResources.isTerminated(); + } + + @Override + public void shutdownNow() { + backgroundResources.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return backgroundResources.awaitTermination(duration, unit); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/PublisherStub.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/PublisherStub.java new file mode 100644 index 000000000000..5c7f9d6a89be --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/PublisherStub.java @@ -0,0 +1,125 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSubscriptionsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicsPagedResponse; + +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.DeleteTopicRequest; +import com.google.pubsub.v1.DetachSubscriptionRequest; +import com.google.pubsub.v1.DetachSubscriptionResponse; +import com.google.pubsub.v1.GetTopicRequest; +import com.google.pubsub.v1.ListTopicSnapshotsRequest; +import com.google.pubsub.v1.ListTopicSnapshotsResponse; +import com.google.pubsub.v1.ListTopicSubscriptionsRequest; +import com.google.pubsub.v1.ListTopicSubscriptionsResponse; +import com.google.pubsub.v1.ListTopicsRequest; +import com.google.pubsub.v1.ListTopicsResponse; +import com.google.pubsub.v1.PublishRequest; +import com.google.pubsub.v1.PublishResponse; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.UpdateTopicRequest; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Base stub class for the Publisher service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public abstract class PublisherStub implements BackgroundResource { + + public UnaryCallable createTopicCallable() { + throw new UnsupportedOperationException("Not implemented: createTopicCallable()"); + } + + public UnaryCallable updateTopicCallable() { + throw new UnsupportedOperationException("Not implemented: updateTopicCallable()"); + } + + public UnaryCallable publishCallable() { + throw new UnsupportedOperationException("Not implemented: publishCallable()"); + } + + public UnaryCallable getTopicCallable() { + throw new UnsupportedOperationException("Not implemented: getTopicCallable()"); + } + + public UnaryCallable listTopicsPagedCallable() { + throw new UnsupportedOperationException("Not implemented: listTopicsPagedCallable()"); + } + + public UnaryCallable listTopicsCallable() { + throw new UnsupportedOperationException("Not implemented: listTopicsCallable()"); + } + + public UnaryCallable + listTopicSubscriptionsPagedCallable() { + throw new UnsupportedOperationException( + "Not implemented: listTopicSubscriptionsPagedCallable()"); + } + + public UnaryCallable + listTopicSubscriptionsCallable() { + throw new UnsupportedOperationException("Not implemented: listTopicSubscriptionsCallable()"); + } + + public UnaryCallable + listTopicSnapshotsPagedCallable() { + throw new UnsupportedOperationException("Not implemented: listTopicSnapshotsPagedCallable()"); + } + + public UnaryCallable + listTopicSnapshotsCallable() { + throw new UnsupportedOperationException("Not implemented: listTopicSnapshotsCallable()"); + } + + public UnaryCallable deleteTopicCallable() { + throw new UnsupportedOperationException("Not implemented: deleteTopicCallable()"); + } + + public UnaryCallable + detachSubscriptionCallable() { + throw new UnsupportedOperationException("Not implemented: detachSubscriptionCallable()"); + } + + public UnaryCallable setIamPolicyCallable() { + throw new UnsupportedOperationException("Not implemented: setIamPolicyCallable()"); + } + + public UnaryCallable getIamPolicyCallable() { + throw new UnsupportedOperationException("Not implemented: getIamPolicyCallable()"); + } + + public UnaryCallable + testIamPermissionsCallable() { + throw new UnsupportedOperationException("Not implemented: testIamPermissionsCallable()"); + } + + @Override + public abstract void close(); +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/PublisherStubSettings.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/PublisherStubSettings.java new file mode 100644 index 000000000000..f8f9d766a782 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/PublisherStubSettings.java @@ -0,0 +1,954 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSubscriptionsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicsPagedResponse; + +import com.google.api.core.ApiFunction; +import com.google.api.core.ApiFuture; +import com.google.api.core.BetaApi; +import com.google.api.core.ObsoleteApi; +import com.google.api.gax.batching.BatchingSettings; +import com.google.api.gax.batching.FlowControlSettings; +import com.google.api.gax.batching.FlowController; +import com.google.api.gax.batching.PartitionKey; +import com.google.api.gax.batching.RequestBuilder; +import com.google.api.gax.core.GaxProperties; +import com.google.api.gax.core.GoogleCredentialsProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.api.gax.grpc.GaxGrpcProperties; +import com.google.api.gax.grpc.GrpcTransportChannel; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.httpjson.GaxHttpJsonProperties; +import com.google.api.gax.httpjson.HttpJsonTransportChannel; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; +import com.google.api.gax.retrying.RetrySettings; +import com.google.api.gax.rpc.ApiCallContext; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.BatchedRequestIssuer; +import com.google.api.gax.rpc.BatchingCallSettings; +import com.google.api.gax.rpc.BatchingDescriptor; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.PageContext; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.PagedListDescriptor; +import com.google.api.gax.rpc.PagedListResponseFactory; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.rpc.StubSettings; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.DeleteTopicRequest; +import com.google.pubsub.v1.DetachSubscriptionRequest; +import com.google.pubsub.v1.DetachSubscriptionResponse; +import com.google.pubsub.v1.GetTopicRequest; +import com.google.pubsub.v1.ListTopicSnapshotsRequest; +import com.google.pubsub.v1.ListTopicSnapshotsResponse; +import com.google.pubsub.v1.ListTopicSubscriptionsRequest; +import com.google.pubsub.v1.ListTopicSubscriptionsResponse; +import com.google.pubsub.v1.ListTopicsRequest; +import com.google.pubsub.v1.ListTopicsResponse; +import com.google.pubsub.v1.PublishRequest; +import com.google.pubsub.v1.PublishResponse; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.UpdateTopicRequest; +import java.io.IOException; +import java.time.Duration; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Settings class to configure an instance of {@link PublisherStub}. + * + *

The default instance has everything set to sensible defaults: + * + *

    + *
  • The default service address (pubsub.googleapis.com) and default port (443) are used. + *
  • Credentials are acquired automatically through Application Default Credentials. + *
  • Retries are configured for idempotent methods but not for non-idempotent methods. + *
+ * + *

The builder of this class is recursive, so contained classes are themselves builders. When + * build() is called, the tree of builders is called to create the complete settings object. + * + *

For example, to set the + * [RetrySettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.retrying.RetrySettings) + * of createTopic: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * PublisherStubSettings.Builder topicAdminSettingsBuilder = PublisherStubSettings.newBuilder();
+ * topicAdminSettingsBuilder
+ *     .createTopicSettings()
+ *     .setRetrySettings(
+ *         topicAdminSettingsBuilder
+ *             .createTopicSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setInitialRetryDelayDuration(Duration.ofSeconds(1))
+ *             .setInitialRpcTimeoutDuration(Duration.ofSeconds(5))
+ *             .setMaxAttempts(5)
+ *             .setMaxRetryDelayDuration(Duration.ofSeconds(30))
+ *             .setMaxRpcTimeoutDuration(Duration.ofSeconds(60))
+ *             .setRetryDelayMultiplier(1.3)
+ *             .setRpcTimeoutMultiplier(1.5)
+ *             .setTotalTimeoutDuration(Duration.ofSeconds(300))
+ *             .build());
+ * PublisherStubSettings topicAdminSettings = topicAdminSettingsBuilder.build();
+ * }
+ * + * Please refer to the [Client Side Retry + * Guide](https://docs.cloud.google.com/java/docs/client-retries) for additional support in setting + * retries. + */ +@Generated("by gapic-generator-java") +public class PublisherStubSettings extends StubSettings { + /** The default scopes of the service. */ + private static final ImmutableList DEFAULT_SERVICE_SCOPES = + ImmutableList.builder() + .add("https://www.googleapis.com/auth/cloud-platform") + .add("https://www.googleapis.com/auth/pubsub") + .build(); + + private final UnaryCallSettings createTopicSettings; + private final UnaryCallSettings updateTopicSettings; + private final BatchingCallSettings publishSettings; + private final UnaryCallSettings getTopicSettings; + private final PagedCallSettings + listTopicsSettings; + private final PagedCallSettings< + ListTopicSubscriptionsRequest, + ListTopicSubscriptionsResponse, + ListTopicSubscriptionsPagedResponse> + listTopicSubscriptionsSettings; + private final PagedCallSettings< + ListTopicSnapshotsRequest, ListTopicSnapshotsResponse, ListTopicSnapshotsPagedResponse> + listTopicSnapshotsSettings; + private final UnaryCallSettings deleteTopicSettings; + private final UnaryCallSettings + detachSubscriptionSettings; + private final UnaryCallSettings setIamPolicySettings; + private final UnaryCallSettings getIamPolicySettings; + private final UnaryCallSettings + testIamPermissionsSettings; + + private static final PagedListDescriptor + LIST_TOPICS_PAGE_STR_DESC = + new PagedListDescriptor() { + @Override + public String emptyToken() { + return ""; + } + + @Override + public ListTopicsRequest injectToken(ListTopicsRequest payload, String token) { + return ListTopicsRequest.newBuilder(payload).setPageToken(token).build(); + } + + @Override + public ListTopicsRequest injectPageSize(ListTopicsRequest payload, int pageSize) { + return ListTopicsRequest.newBuilder(payload).setPageSize(pageSize).build(); + } + + @Override + public Integer extractPageSize(ListTopicsRequest payload) { + return payload.getPageSize(); + } + + @Override + public String extractNextToken(ListTopicsResponse payload) { + return payload.getNextPageToken(); + } + + @Override + public Iterable extractResources(ListTopicsResponse payload) { + return payload.getTopicsList(); + } + }; + + private static final PagedListDescriptor< + ListTopicSubscriptionsRequest, ListTopicSubscriptionsResponse, String> + LIST_TOPIC_SUBSCRIPTIONS_PAGE_STR_DESC = + new PagedListDescriptor< + ListTopicSubscriptionsRequest, ListTopicSubscriptionsResponse, String>() { + @Override + public String emptyToken() { + return ""; + } + + @Override + public ListTopicSubscriptionsRequest injectToken( + ListTopicSubscriptionsRequest payload, String token) { + return ListTopicSubscriptionsRequest.newBuilder(payload).setPageToken(token).build(); + } + + @Override + public ListTopicSubscriptionsRequest injectPageSize( + ListTopicSubscriptionsRequest payload, int pageSize) { + return ListTopicSubscriptionsRequest.newBuilder(payload) + .setPageSize(pageSize) + .build(); + } + + @Override + public Integer extractPageSize(ListTopicSubscriptionsRequest payload) { + return payload.getPageSize(); + } + + @Override + public String extractNextToken(ListTopicSubscriptionsResponse payload) { + return payload.getNextPageToken(); + } + + @Override + public Iterable extractResources(ListTopicSubscriptionsResponse payload) { + return payload.getSubscriptionsList(); + } + }; + + private static final PagedListDescriptor< + ListTopicSnapshotsRequest, ListTopicSnapshotsResponse, String> + LIST_TOPIC_SNAPSHOTS_PAGE_STR_DESC = + new PagedListDescriptor() { + @Override + public String emptyToken() { + return ""; + } + + @Override + public ListTopicSnapshotsRequest injectToken( + ListTopicSnapshotsRequest payload, String token) { + return ListTopicSnapshotsRequest.newBuilder(payload).setPageToken(token).build(); + } + + @Override + public ListTopicSnapshotsRequest injectPageSize( + ListTopicSnapshotsRequest payload, int pageSize) { + return ListTopicSnapshotsRequest.newBuilder(payload).setPageSize(pageSize).build(); + } + + @Override + public Integer extractPageSize(ListTopicSnapshotsRequest payload) { + return payload.getPageSize(); + } + + @Override + public String extractNextToken(ListTopicSnapshotsResponse payload) { + return payload.getNextPageToken(); + } + + @Override + public Iterable extractResources(ListTopicSnapshotsResponse payload) { + return payload.getSnapshotsList(); + } + }; + + private static final PagedListResponseFactory< + ListTopicsRequest, ListTopicsResponse, ListTopicsPagedResponse> + LIST_TOPICS_PAGE_STR_FACT = + new PagedListResponseFactory< + ListTopicsRequest, ListTopicsResponse, ListTopicsPagedResponse>() { + @Override + public ApiFuture getFuturePagedResponse( + UnaryCallable callable, + ListTopicsRequest request, + ApiCallContext context, + ApiFuture futureResponse) { + PageContext pageContext = + PageContext.create(callable, LIST_TOPICS_PAGE_STR_DESC, request, context); + return ListTopicsPagedResponse.createAsync(pageContext, futureResponse); + } + }; + + private static final PagedListResponseFactory< + ListTopicSubscriptionsRequest, + ListTopicSubscriptionsResponse, + ListTopicSubscriptionsPagedResponse> + LIST_TOPIC_SUBSCRIPTIONS_PAGE_STR_FACT = + new PagedListResponseFactory< + ListTopicSubscriptionsRequest, + ListTopicSubscriptionsResponse, + ListTopicSubscriptionsPagedResponse>() { + @Override + public ApiFuture getFuturePagedResponse( + UnaryCallable + callable, + ListTopicSubscriptionsRequest request, + ApiCallContext context, + ApiFuture futureResponse) { + PageContext + pageContext = + PageContext.create( + callable, LIST_TOPIC_SUBSCRIPTIONS_PAGE_STR_DESC, request, context); + return ListTopicSubscriptionsPagedResponse.createAsync(pageContext, futureResponse); + } + }; + + private static final PagedListResponseFactory< + ListTopicSnapshotsRequest, ListTopicSnapshotsResponse, ListTopicSnapshotsPagedResponse> + LIST_TOPIC_SNAPSHOTS_PAGE_STR_FACT = + new PagedListResponseFactory< + ListTopicSnapshotsRequest, + ListTopicSnapshotsResponse, + ListTopicSnapshotsPagedResponse>() { + @Override + public ApiFuture getFuturePagedResponse( + UnaryCallable callable, + ListTopicSnapshotsRequest request, + ApiCallContext context, + ApiFuture futureResponse) { + PageContext + pageContext = + PageContext.create( + callable, LIST_TOPIC_SNAPSHOTS_PAGE_STR_DESC, request, context); + return ListTopicSnapshotsPagedResponse.createAsync(pageContext, futureResponse); + } + }; + + private static final BatchingDescriptor PUBLISH_BATCHING_DESC = + new BatchingDescriptor() { + @Override + public PartitionKey getBatchPartitionKey(PublishRequest request) { + return new PartitionKey(request.getTopic()); + } + + @Override + public RequestBuilder getRequestBuilder() { + return new RequestBuilder() { + private PublishRequest.Builder builder; + + @Override + public void appendRequest(PublishRequest request) { + if (builder == null) { + builder = request.toBuilder(); + } else { + builder.addAllMessages(request.getMessagesList()); + } + } + + @Override + public PublishRequest build() { + return builder.build(); + } + }; + } + + @Override + public void splitResponse( + PublishResponse batchResponse, + Collection> batch) { + int batchMessageIndex = 0; + for (BatchedRequestIssuer responder : batch) { + List subresponseElements = new ArrayList<>(); + long subresponseCount = responder.getMessageCount(); + for (int i = 0; i < subresponseCount; i++) { + subresponseElements.add(batchResponse.getMessageIds(batchMessageIndex++)); + } + PublishResponse response = + PublishResponse.newBuilder().addAllMessageIds(subresponseElements).build(); + responder.setResponse(response); + } + } + + @Override + public void splitException( + Throwable throwable, + Collection> batch) { + for (BatchedRequestIssuer responder : batch) { + responder.setException(throwable); + } + } + + @Override + public long countElements(PublishRequest request) { + return request.getMessagesCount(); + } + + @Override + public long countBytes(PublishRequest request) { + return request.getSerializedSize(); + } + }; + + /** Returns the object with the settings used for calls to createTopic. */ + public UnaryCallSettings createTopicSettings() { + return createTopicSettings; + } + + /** Returns the object with the settings used for calls to updateTopic. */ + public UnaryCallSettings updateTopicSettings() { + return updateTopicSettings; + } + + /** Returns the object with the settings used for calls to publish. */ + public BatchingCallSettings publishSettings() { + return publishSettings; + } + + /** Returns the object with the settings used for calls to getTopic. */ + public UnaryCallSettings getTopicSettings() { + return getTopicSettings; + } + + /** Returns the object with the settings used for calls to listTopics. */ + public PagedCallSettings + listTopicsSettings() { + return listTopicsSettings; + } + + /** Returns the object with the settings used for calls to listTopicSubscriptions. */ + public PagedCallSettings< + ListTopicSubscriptionsRequest, + ListTopicSubscriptionsResponse, + ListTopicSubscriptionsPagedResponse> + listTopicSubscriptionsSettings() { + return listTopicSubscriptionsSettings; + } + + /** Returns the object with the settings used for calls to listTopicSnapshots. */ + public PagedCallSettings< + ListTopicSnapshotsRequest, ListTopicSnapshotsResponse, ListTopicSnapshotsPagedResponse> + listTopicSnapshotsSettings() { + return listTopicSnapshotsSettings; + } + + /** Returns the object with the settings used for calls to deleteTopic. */ + public UnaryCallSettings deleteTopicSettings() { + return deleteTopicSettings; + } + + /** Returns the object with the settings used for calls to detachSubscription. */ + public UnaryCallSettings + detachSubscriptionSettings() { + return detachSubscriptionSettings; + } + + /** Returns the object with the settings used for calls to setIamPolicy. */ + public UnaryCallSettings setIamPolicySettings() { + return setIamPolicySettings; + } + + /** Returns the object with the settings used for calls to getIamPolicy. */ + public UnaryCallSettings getIamPolicySettings() { + return getIamPolicySettings; + } + + /** Returns the object with the settings used for calls to testIamPermissions. */ + public UnaryCallSettings + testIamPermissionsSettings() { + return testIamPermissionsSettings; + } + + public PublisherStub createStub() throws IOException { + if (getTransportChannelProvider() + .getTransportName() + .equals(GrpcTransportChannel.getGrpcTransportName())) { + return GrpcPublisherStub.create(this); + } + if (getTransportChannelProvider() + .getTransportName() + .equals(HttpJsonTransportChannel.getHttpJsonTransportName())) { + return HttpJsonPublisherStub.create(this); + } + throw new UnsupportedOperationException( + String.format( + "Transport not supported: %s", getTransportChannelProvider().getTransportName())); + } + + /** Returns the default service name. */ + @Override + public String getServiceName() { + return "pubsub"; + } + + /** Returns a builder for the default ExecutorProvider for this service. */ + public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { + return InstantiatingExecutorProvider.newBuilder(); + } + + /** Returns the default service endpoint. */ + @ObsoleteApi("Use getEndpoint() instead") + public static String getDefaultEndpoint() { + return "pubsub.googleapis.com:443"; + } + + /** Returns the default mTLS service endpoint. */ + public static String getDefaultMtlsEndpoint() { + return "pubsub.mtls.googleapis.com:443"; + } + + /** Returns the default service scopes. */ + public static List getDefaultServiceScopes() { + return DEFAULT_SERVICE_SCOPES; + } + + /** Returns a builder for the default credentials for this service. */ + public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { + return GoogleCredentialsProvider.newBuilder() + .setScopesToApply(DEFAULT_SERVICE_SCOPES) + .setUseJwtAccessWithScope(true); + } + + /** Returns a builder for the default gRPC ChannelProvider for this service. */ + public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { + return InstantiatingGrpcChannelProvider.newBuilder() + .setMaxInboundMessageSize(Integer.MAX_VALUE); + } + + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return InstantiatingHttpJsonChannelProvider.newBuilder(); + } + + public static TransportChannelProvider defaultTransportChannelProvider() { + return defaultGrpcTransportProviderBuilder().build(); + } + + public static ApiClientHeaderProvider.Builder defaultGrpcApiClientHeaderProviderBuilder() { + return ApiClientHeaderProvider.newBuilder() + .setGeneratedLibToken("gapic", GaxProperties.getLibraryVersion(PublisherStubSettings.class)) + .setTransportToken( + GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion()); + } + + public static ApiClientHeaderProvider.Builder defaultHttpJsonApiClientHeaderProviderBuilder() { + return ApiClientHeaderProvider.newBuilder() + .setGeneratedLibToken("gapic", GaxProperties.getLibraryVersion(PublisherStubSettings.class)) + .setTransportToken( + GaxHttpJsonProperties.getHttpJsonTokenName(), + GaxHttpJsonProperties.getHttpJsonVersion()); + } + + public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + return PublisherStubSettings.defaultGrpcApiClientHeaderProviderBuilder(); + } + + /** Returns a new gRPC builder for this class. */ + public static Builder newBuilder() { + return Builder.createDefault(); + } + + /** Returns a new REST builder for this class. */ + public static Builder newHttpJsonBuilder() { + return Builder.createHttpJsonDefault(); + } + + /** Returns a new builder for this class. */ + public static Builder newBuilder(ClientContext clientContext) { + return new Builder(clientContext); + } + + /** Returns a builder containing all the values of this settings class. */ + public Builder toBuilder() { + return new Builder(this); + } + + protected PublisherStubSettings(Builder settingsBuilder) throws IOException { + super(settingsBuilder); + + createTopicSettings = settingsBuilder.createTopicSettings().build(); + updateTopicSettings = settingsBuilder.updateTopicSettings().build(); + publishSettings = settingsBuilder.publishSettings().build(); + getTopicSettings = settingsBuilder.getTopicSettings().build(); + listTopicsSettings = settingsBuilder.listTopicsSettings().build(); + listTopicSubscriptionsSettings = settingsBuilder.listTopicSubscriptionsSettings().build(); + listTopicSnapshotsSettings = settingsBuilder.listTopicSnapshotsSettings().build(); + deleteTopicSettings = settingsBuilder.deleteTopicSettings().build(); + detachSubscriptionSettings = settingsBuilder.detachSubscriptionSettings().build(); + setIamPolicySettings = settingsBuilder.setIamPolicySettings().build(); + getIamPolicySettings = settingsBuilder.getIamPolicySettings().build(); + testIamPermissionsSettings = settingsBuilder.testIamPermissionsSettings().build(); + } + + /** Builder for PublisherStubSettings. */ + public static class Builder extends StubSettings.Builder { + private final ImmutableList> unaryMethodSettingsBuilders; + private final UnaryCallSettings.Builder createTopicSettings; + private final UnaryCallSettings.Builder updateTopicSettings; + private final BatchingCallSettings.Builder publishSettings; + private final UnaryCallSettings.Builder getTopicSettings; + private final PagedCallSettings.Builder< + ListTopicsRequest, ListTopicsResponse, ListTopicsPagedResponse> + listTopicsSettings; + private final PagedCallSettings.Builder< + ListTopicSubscriptionsRequest, + ListTopicSubscriptionsResponse, + ListTopicSubscriptionsPagedResponse> + listTopicSubscriptionsSettings; + private final PagedCallSettings.Builder< + ListTopicSnapshotsRequest, ListTopicSnapshotsResponse, ListTopicSnapshotsPagedResponse> + listTopicSnapshotsSettings; + private final UnaryCallSettings.Builder deleteTopicSettings; + private final UnaryCallSettings.Builder + detachSubscriptionSettings; + private final UnaryCallSettings.Builder setIamPolicySettings; + private final UnaryCallSettings.Builder getIamPolicySettings; + private final UnaryCallSettings.Builder + testIamPermissionsSettings; + private static final ImmutableMap> + RETRYABLE_CODE_DEFINITIONS; + + static { + ImmutableMap.Builder> definitions = + ImmutableMap.builder(); + definitions.put( + "retry_policy_0_codes", + ImmutableSet.copyOf(Lists.newArrayList(StatusCode.Code.UNAVAILABLE))); + definitions.put( + "retry_policy_1_codes", + ImmutableSet.copyOf( + Lists.newArrayList( + StatusCode.Code.ABORTED, + StatusCode.Code.CANCELLED, + StatusCode.Code.INTERNAL, + StatusCode.Code.RESOURCE_EXHAUSTED, + StatusCode.Code.UNKNOWN, + StatusCode.Code.UNAVAILABLE, + StatusCode.Code.DEADLINE_EXCEEDED))); + definitions.put( + "retry_policy_2_codes", + ImmutableSet.copyOf( + Lists.newArrayList( + StatusCode.Code.UNKNOWN, StatusCode.Code.ABORTED, StatusCode.Code.UNAVAILABLE))); + RETRYABLE_CODE_DEFINITIONS = definitions.build(); + } + + private static final ImmutableMap RETRY_PARAM_DEFINITIONS; + + static { + ImmutableMap.Builder definitions = ImmutableMap.builder(); + RetrySettings settings = null; + settings = + RetrySettings.newBuilder() + .setInitialRetryDelayDuration(Duration.ofMillis(100L)) + .setRetryDelayMultiplier(1.3) + .setMaxRetryDelayDuration(Duration.ofMillis(60000L)) + .setInitialRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setTotalTimeoutDuration(Duration.ofMillis(60000L)) + .build(); + definitions.put("retry_policy_0_params", settings); + settings = + RetrySettings.newBuilder() + .setInitialRetryDelayDuration(Duration.ofMillis(100L)) + .setRetryDelayMultiplier(4.0) + .setMaxRetryDelayDuration(Duration.ofMillis(60000L)) + .setInitialRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setTotalTimeoutDuration(Duration.ofMillis(60000L)) + .build(); + definitions.put("retry_policy_1_params", settings); + settings = + RetrySettings.newBuilder() + .setInitialRetryDelayDuration(Duration.ofMillis(100L)) + .setRetryDelayMultiplier(1.3) + .setMaxRetryDelayDuration(Duration.ofMillis(60000L)) + .setInitialRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setTotalTimeoutDuration(Duration.ofMillis(60000L)) + .build(); + definitions.put("retry_policy_2_params", settings); + RETRY_PARAM_DEFINITIONS = definitions.build(); + } + + protected Builder() { + this(((ClientContext) null)); + } + + protected Builder(ClientContext clientContext) { + super(clientContext); + + createTopicSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + updateTopicSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + publishSettings = + BatchingCallSettings.newBuilder(PUBLISH_BATCHING_DESC) + .setBatchingSettings(BatchingSettings.newBuilder().build()); + getTopicSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + listTopicsSettings = PagedCallSettings.newBuilder(LIST_TOPICS_PAGE_STR_FACT); + listTopicSubscriptionsSettings = + PagedCallSettings.newBuilder(LIST_TOPIC_SUBSCRIPTIONS_PAGE_STR_FACT); + listTopicSnapshotsSettings = PagedCallSettings.newBuilder(LIST_TOPIC_SNAPSHOTS_PAGE_STR_FACT); + deleteTopicSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + detachSubscriptionSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + setIamPolicySettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + getIamPolicySettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + testIamPermissionsSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + + unaryMethodSettingsBuilders = + ImmutableList.>of( + createTopicSettings, + updateTopicSettings, + publishSettings, + getTopicSettings, + listTopicsSettings, + listTopicSubscriptionsSettings, + listTopicSnapshotsSettings, + deleteTopicSettings, + detachSubscriptionSettings, + setIamPolicySettings, + getIamPolicySettings, + testIamPermissionsSettings); + initDefaults(this); + } + + protected Builder(PublisherStubSettings settings) { + super(settings); + + createTopicSettings = settings.createTopicSettings.toBuilder(); + updateTopicSettings = settings.updateTopicSettings.toBuilder(); + publishSettings = settings.publishSettings.toBuilder(); + getTopicSettings = settings.getTopicSettings.toBuilder(); + listTopicsSettings = settings.listTopicsSettings.toBuilder(); + listTopicSubscriptionsSettings = settings.listTopicSubscriptionsSettings.toBuilder(); + listTopicSnapshotsSettings = settings.listTopicSnapshotsSettings.toBuilder(); + deleteTopicSettings = settings.deleteTopicSettings.toBuilder(); + detachSubscriptionSettings = settings.detachSubscriptionSettings.toBuilder(); + setIamPolicySettings = settings.setIamPolicySettings.toBuilder(); + getIamPolicySettings = settings.getIamPolicySettings.toBuilder(); + testIamPermissionsSettings = settings.testIamPermissionsSettings.toBuilder(); + + unaryMethodSettingsBuilders = + ImmutableList.>of( + createTopicSettings, + updateTopicSettings, + publishSettings, + getTopicSettings, + listTopicsSettings, + listTopicSubscriptionsSettings, + listTopicSnapshotsSettings, + deleteTopicSettings, + detachSubscriptionSettings, + setIamPolicySettings, + getIamPolicySettings, + testIamPermissionsSettings); + } + + private static Builder createDefault() { + Builder builder = new Builder(((ClientContext) null)); + + builder.setTransportChannelProvider(defaultTransportChannelProvider()); + builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); + builder.setInternalHeaderProvider(defaultApiClientHeaderProviderBuilder().build()); + builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); + builder.setSwitchToMtlsEndpointAllowed(true); + + return initDefaults(builder); + } + + private static Builder createHttpJsonDefault() { + Builder builder = new Builder(((ClientContext) null)); + + builder.setTransportChannelProvider(defaultHttpJsonTransportProviderBuilder().build()); + builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); + builder.setInternalHeaderProvider(defaultHttpJsonApiClientHeaderProviderBuilder().build()); + builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); + builder.setSwitchToMtlsEndpointAllowed(true); + + return initDefaults(builder); + } + + private static Builder initDefaults(Builder builder) { + builder + .createTopicSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + + builder + .updateTopicSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + + builder + .publishSettings() + .setBatchingSettings( + BatchingSettings.newBuilder() + .setElementCountThreshold(100L) + .setRequestByteThreshold(1048576L) + .setDelayThresholdDuration(Duration.ofMillis(10L)) + .setFlowControlSettings( + FlowControlSettings.newBuilder() + .setLimitExceededBehavior(FlowController.LimitExceededBehavior.Ignore) + .build()) + .build()); + + builder + .publishSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_1_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_1_params")); + + builder + .getTopicSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_2_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_2_params")); + + builder + .listTopicsSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_2_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_2_params")); + + builder + .listTopicSubscriptionsSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_2_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_2_params")); + + builder + .listTopicSnapshotsSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_2_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_2_params")); + + builder + .deleteTopicSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + + builder + .detachSubscriptionSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + + builder + .setIamPolicySettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + + builder + .getIamPolicySettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_2_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_2_params")); + + builder + .testIamPermissionsSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + + return builder; + } + + /** + * Applies the given settings updater function to all of the unary API methods in this service. + * + *

Note: This method does not support applying settings to streaming methods. + */ + public Builder applyToAllUnaryMethods( + ApiFunction, Void> settingsUpdater) { + super.applyToAllUnaryMethods(unaryMethodSettingsBuilders, settingsUpdater); + return this; + } + + public ImmutableList> unaryMethodSettingsBuilders() { + return unaryMethodSettingsBuilders; + } + + /** Returns the builder for the settings used for calls to createTopic. */ + public UnaryCallSettings.Builder createTopicSettings() { + return createTopicSettings; + } + + /** Returns the builder for the settings used for calls to updateTopic. */ + public UnaryCallSettings.Builder updateTopicSettings() { + return updateTopicSettings; + } + + /** Returns the builder for the settings used for calls to publish. */ + public BatchingCallSettings.Builder publishSettings() { + return publishSettings; + } + + /** Returns the builder for the settings used for calls to getTopic. */ + public UnaryCallSettings.Builder getTopicSettings() { + return getTopicSettings; + } + + /** Returns the builder for the settings used for calls to listTopics. */ + public PagedCallSettings.Builder + listTopicsSettings() { + return listTopicsSettings; + } + + /** Returns the builder for the settings used for calls to listTopicSubscriptions. */ + public PagedCallSettings.Builder< + ListTopicSubscriptionsRequest, + ListTopicSubscriptionsResponse, + ListTopicSubscriptionsPagedResponse> + listTopicSubscriptionsSettings() { + return listTopicSubscriptionsSettings; + } + + /** Returns the builder for the settings used for calls to listTopicSnapshots. */ + public PagedCallSettings.Builder< + ListTopicSnapshotsRequest, ListTopicSnapshotsResponse, ListTopicSnapshotsPagedResponse> + listTopicSnapshotsSettings() { + return listTopicSnapshotsSettings; + } + + /** Returns the builder for the settings used for calls to deleteTopic. */ + public UnaryCallSettings.Builder deleteTopicSettings() { + return deleteTopicSettings; + } + + /** Returns the builder for the settings used for calls to detachSubscription. */ + public UnaryCallSettings.Builder + detachSubscriptionSettings() { + return detachSubscriptionSettings; + } + + /** Returns the builder for the settings used for calls to setIamPolicy. */ + public UnaryCallSettings.Builder setIamPolicySettings() { + return setIamPolicySettings; + } + + /** Returns the builder for the settings used for calls to getIamPolicy. */ + public UnaryCallSettings.Builder getIamPolicySettings() { + return getIamPolicySettings; + } + + /** Returns the builder for the settings used for calls to testIamPermissions. */ + public UnaryCallSettings.Builder + testIamPermissionsSettings() { + return testIamPermissionsSettings; + } + + @Override + public PublisherStubSettings build() throws IOException { + return new PublisherStubSettings(this); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/SchemaServiceStub.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/SchemaServiceStub.java new file mode 100644 index 000000000000..a0335a4b1fed --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/SchemaServiceStub.java @@ -0,0 +1,121 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemaRevisionsPagedResponse; +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemasPagedResponse; + +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.CommitSchemaRequest; +import com.google.pubsub.v1.CreateSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRevisionRequest; +import com.google.pubsub.v1.GetSchemaRequest; +import com.google.pubsub.v1.ListSchemaRevisionsRequest; +import com.google.pubsub.v1.ListSchemaRevisionsResponse; +import com.google.pubsub.v1.ListSchemasRequest; +import com.google.pubsub.v1.ListSchemasResponse; +import com.google.pubsub.v1.RollbackSchemaRequest; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.ValidateMessageRequest; +import com.google.pubsub.v1.ValidateMessageResponse; +import com.google.pubsub.v1.ValidateSchemaRequest; +import com.google.pubsub.v1.ValidateSchemaResponse; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Base stub class for the SchemaService service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public abstract class SchemaServiceStub implements BackgroundResource { + + public UnaryCallable createSchemaCallable() { + throw new UnsupportedOperationException("Not implemented: createSchemaCallable()"); + } + + public UnaryCallable getSchemaCallable() { + throw new UnsupportedOperationException("Not implemented: getSchemaCallable()"); + } + + public UnaryCallable listSchemasPagedCallable() { + throw new UnsupportedOperationException("Not implemented: listSchemasPagedCallable()"); + } + + public UnaryCallable listSchemasCallable() { + throw new UnsupportedOperationException("Not implemented: listSchemasCallable()"); + } + + public UnaryCallable + listSchemaRevisionsPagedCallable() { + throw new UnsupportedOperationException("Not implemented: listSchemaRevisionsPagedCallable()"); + } + + public UnaryCallable + listSchemaRevisionsCallable() { + throw new UnsupportedOperationException("Not implemented: listSchemaRevisionsCallable()"); + } + + public UnaryCallable commitSchemaCallable() { + throw new UnsupportedOperationException("Not implemented: commitSchemaCallable()"); + } + + public UnaryCallable rollbackSchemaCallable() { + throw new UnsupportedOperationException("Not implemented: rollbackSchemaCallable()"); + } + + public UnaryCallable deleteSchemaRevisionCallable() { + throw new UnsupportedOperationException("Not implemented: deleteSchemaRevisionCallable()"); + } + + public UnaryCallable deleteSchemaCallable() { + throw new UnsupportedOperationException("Not implemented: deleteSchemaCallable()"); + } + + public UnaryCallable validateSchemaCallable() { + throw new UnsupportedOperationException("Not implemented: validateSchemaCallable()"); + } + + public UnaryCallable validateMessageCallable() { + throw new UnsupportedOperationException("Not implemented: validateMessageCallable()"); + } + + public UnaryCallable setIamPolicyCallable() { + throw new UnsupportedOperationException("Not implemented: setIamPolicyCallable()"); + } + + public UnaryCallable getIamPolicyCallable() { + throw new UnsupportedOperationException("Not implemented: getIamPolicyCallable()"); + } + + public UnaryCallable + testIamPermissionsCallable() { + throw new UnsupportedOperationException("Not implemented: testIamPermissionsCallable()"); + } + + @Override + public abstract void close(); +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/SchemaServiceStubSettings.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/SchemaServiceStubSettings.java new file mode 100644 index 000000000000..3f728307cf3c --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/SchemaServiceStubSettings.java @@ -0,0 +1,785 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemaRevisionsPagedResponse; +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemasPagedResponse; + +import com.google.api.core.ApiFunction; +import com.google.api.core.ApiFuture; +import com.google.api.core.BetaApi; +import com.google.api.core.ObsoleteApi; +import com.google.api.gax.core.GaxProperties; +import com.google.api.gax.core.GoogleCredentialsProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.api.gax.grpc.GaxGrpcProperties; +import com.google.api.gax.grpc.GrpcTransportChannel; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.httpjson.GaxHttpJsonProperties; +import com.google.api.gax.httpjson.HttpJsonTransportChannel; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; +import com.google.api.gax.retrying.RetrySettings; +import com.google.api.gax.rpc.ApiCallContext; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.PageContext; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.PagedListDescriptor; +import com.google.api.gax.rpc.PagedListResponseFactory; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.rpc.StubSettings; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.CommitSchemaRequest; +import com.google.pubsub.v1.CreateSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRevisionRequest; +import com.google.pubsub.v1.GetSchemaRequest; +import com.google.pubsub.v1.ListSchemaRevisionsRequest; +import com.google.pubsub.v1.ListSchemaRevisionsResponse; +import com.google.pubsub.v1.ListSchemasRequest; +import com.google.pubsub.v1.ListSchemasResponse; +import com.google.pubsub.v1.RollbackSchemaRequest; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.ValidateMessageRequest; +import com.google.pubsub.v1.ValidateMessageResponse; +import com.google.pubsub.v1.ValidateSchemaRequest; +import com.google.pubsub.v1.ValidateSchemaResponse; +import java.io.IOException; +import java.time.Duration; +import java.util.List; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Settings class to configure an instance of {@link SchemaServiceStub}. + * + *

The default instance has everything set to sensible defaults: + * + *

    + *
  • The default service address (pubsub.googleapis.com) and default port (443) are used. + *
  • Credentials are acquired automatically through Application Default Credentials. + *
  • Retries are configured for idempotent methods but not for non-idempotent methods. + *
+ * + *

The builder of this class is recursive, so contained classes are themselves builders. When + * build() is called, the tree of builders is called to create the complete settings object. + * + *

For example, to set the + * [RetrySettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.retrying.RetrySettings) + * of createSchema: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SchemaServiceStubSettings.Builder schemaServiceSettingsBuilder =
+ *     SchemaServiceStubSettings.newBuilder();
+ * schemaServiceSettingsBuilder
+ *     .createSchemaSettings()
+ *     .setRetrySettings(
+ *         schemaServiceSettingsBuilder
+ *             .createSchemaSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setInitialRetryDelayDuration(Duration.ofSeconds(1))
+ *             .setInitialRpcTimeoutDuration(Duration.ofSeconds(5))
+ *             .setMaxAttempts(5)
+ *             .setMaxRetryDelayDuration(Duration.ofSeconds(30))
+ *             .setMaxRpcTimeoutDuration(Duration.ofSeconds(60))
+ *             .setRetryDelayMultiplier(1.3)
+ *             .setRpcTimeoutMultiplier(1.5)
+ *             .setTotalTimeoutDuration(Duration.ofSeconds(300))
+ *             .build());
+ * SchemaServiceStubSettings schemaServiceSettings = schemaServiceSettingsBuilder.build();
+ * }
+ * + * Please refer to the [Client Side Retry + * Guide](https://docs.cloud.google.com/java/docs/client-retries) for additional support in setting + * retries. + */ +@Generated("by gapic-generator-java") +public class SchemaServiceStubSettings extends StubSettings { + /** The default scopes of the service. */ + private static final ImmutableList DEFAULT_SERVICE_SCOPES = + ImmutableList.builder() + .add("https://www.googleapis.com/auth/cloud-platform") + .add("https://www.googleapis.com/auth/pubsub") + .build(); + + private final UnaryCallSettings createSchemaSettings; + private final UnaryCallSettings getSchemaSettings; + private final PagedCallSettings + listSchemasSettings; + private final PagedCallSettings< + ListSchemaRevisionsRequest, ListSchemaRevisionsResponse, ListSchemaRevisionsPagedResponse> + listSchemaRevisionsSettings; + private final UnaryCallSettings commitSchemaSettings; + private final UnaryCallSettings rollbackSchemaSettings; + private final UnaryCallSettings deleteSchemaRevisionSettings; + private final UnaryCallSettings deleteSchemaSettings; + private final UnaryCallSettings + validateSchemaSettings; + private final UnaryCallSettings + validateMessageSettings; + private final UnaryCallSettings setIamPolicySettings; + private final UnaryCallSettings getIamPolicySettings; + private final UnaryCallSettings + testIamPermissionsSettings; + + private static final PagedListDescriptor + LIST_SCHEMAS_PAGE_STR_DESC = + new PagedListDescriptor() { + @Override + public String emptyToken() { + return ""; + } + + @Override + public ListSchemasRequest injectToken(ListSchemasRequest payload, String token) { + return ListSchemasRequest.newBuilder(payload).setPageToken(token).build(); + } + + @Override + public ListSchemasRequest injectPageSize(ListSchemasRequest payload, int pageSize) { + return ListSchemasRequest.newBuilder(payload).setPageSize(pageSize).build(); + } + + @Override + public Integer extractPageSize(ListSchemasRequest payload) { + return payload.getPageSize(); + } + + @Override + public String extractNextToken(ListSchemasResponse payload) { + return payload.getNextPageToken(); + } + + @Override + public Iterable extractResources(ListSchemasResponse payload) { + return payload.getSchemasList(); + } + }; + + private static final PagedListDescriptor< + ListSchemaRevisionsRequest, ListSchemaRevisionsResponse, Schema> + LIST_SCHEMA_REVISIONS_PAGE_STR_DESC = + new PagedListDescriptor< + ListSchemaRevisionsRequest, ListSchemaRevisionsResponse, Schema>() { + @Override + public String emptyToken() { + return ""; + } + + @Override + public ListSchemaRevisionsRequest injectToken( + ListSchemaRevisionsRequest payload, String token) { + return ListSchemaRevisionsRequest.newBuilder(payload).setPageToken(token).build(); + } + + @Override + public ListSchemaRevisionsRequest injectPageSize( + ListSchemaRevisionsRequest payload, int pageSize) { + return ListSchemaRevisionsRequest.newBuilder(payload).setPageSize(pageSize).build(); + } + + @Override + public Integer extractPageSize(ListSchemaRevisionsRequest payload) { + return payload.getPageSize(); + } + + @Override + public String extractNextToken(ListSchemaRevisionsResponse payload) { + return payload.getNextPageToken(); + } + + @Override + public Iterable extractResources(ListSchemaRevisionsResponse payload) { + return payload.getSchemasList(); + } + }; + + private static final PagedListResponseFactory< + ListSchemasRequest, ListSchemasResponse, ListSchemasPagedResponse> + LIST_SCHEMAS_PAGE_STR_FACT = + new PagedListResponseFactory< + ListSchemasRequest, ListSchemasResponse, ListSchemasPagedResponse>() { + @Override + public ApiFuture getFuturePagedResponse( + UnaryCallable callable, + ListSchemasRequest request, + ApiCallContext context, + ApiFuture futureResponse) { + PageContext pageContext = + PageContext.create(callable, LIST_SCHEMAS_PAGE_STR_DESC, request, context); + return ListSchemasPagedResponse.createAsync(pageContext, futureResponse); + } + }; + + private static final PagedListResponseFactory< + ListSchemaRevisionsRequest, ListSchemaRevisionsResponse, ListSchemaRevisionsPagedResponse> + LIST_SCHEMA_REVISIONS_PAGE_STR_FACT = + new PagedListResponseFactory< + ListSchemaRevisionsRequest, + ListSchemaRevisionsResponse, + ListSchemaRevisionsPagedResponse>() { + @Override + public ApiFuture getFuturePagedResponse( + UnaryCallable callable, + ListSchemaRevisionsRequest request, + ApiCallContext context, + ApiFuture futureResponse) { + PageContext + pageContext = + PageContext.create( + callable, LIST_SCHEMA_REVISIONS_PAGE_STR_DESC, request, context); + return ListSchemaRevisionsPagedResponse.createAsync(pageContext, futureResponse); + } + }; + + /** Returns the object with the settings used for calls to createSchema. */ + public UnaryCallSettings createSchemaSettings() { + return createSchemaSettings; + } + + /** Returns the object with the settings used for calls to getSchema. */ + public UnaryCallSettings getSchemaSettings() { + return getSchemaSettings; + } + + /** Returns the object with the settings used for calls to listSchemas. */ + public PagedCallSettings + listSchemasSettings() { + return listSchemasSettings; + } + + /** Returns the object with the settings used for calls to listSchemaRevisions. */ + public PagedCallSettings< + ListSchemaRevisionsRequest, ListSchemaRevisionsResponse, ListSchemaRevisionsPagedResponse> + listSchemaRevisionsSettings() { + return listSchemaRevisionsSettings; + } + + /** Returns the object with the settings used for calls to commitSchema. */ + public UnaryCallSettings commitSchemaSettings() { + return commitSchemaSettings; + } + + /** Returns the object with the settings used for calls to rollbackSchema. */ + public UnaryCallSettings rollbackSchemaSettings() { + return rollbackSchemaSettings; + } + + /** Returns the object with the settings used for calls to deleteSchemaRevision. */ + public UnaryCallSettings deleteSchemaRevisionSettings() { + return deleteSchemaRevisionSettings; + } + + /** Returns the object with the settings used for calls to deleteSchema. */ + public UnaryCallSettings deleteSchemaSettings() { + return deleteSchemaSettings; + } + + /** Returns the object with the settings used for calls to validateSchema. */ + public UnaryCallSettings validateSchemaSettings() { + return validateSchemaSettings; + } + + /** Returns the object with the settings used for calls to validateMessage. */ + public UnaryCallSettings + validateMessageSettings() { + return validateMessageSettings; + } + + /** Returns the object with the settings used for calls to setIamPolicy. */ + public UnaryCallSettings setIamPolicySettings() { + return setIamPolicySettings; + } + + /** Returns the object with the settings used for calls to getIamPolicy. */ + public UnaryCallSettings getIamPolicySettings() { + return getIamPolicySettings; + } + + /** Returns the object with the settings used for calls to testIamPermissions. */ + public UnaryCallSettings + testIamPermissionsSettings() { + return testIamPermissionsSettings; + } + + public SchemaServiceStub createStub() throws IOException { + if (getTransportChannelProvider() + .getTransportName() + .equals(GrpcTransportChannel.getGrpcTransportName())) { + return GrpcSchemaServiceStub.create(this); + } + if (getTransportChannelProvider() + .getTransportName() + .equals(HttpJsonTransportChannel.getHttpJsonTransportName())) { + return HttpJsonSchemaServiceStub.create(this); + } + throw new UnsupportedOperationException( + String.format( + "Transport not supported: %s", getTransportChannelProvider().getTransportName())); + } + + /** Returns the default service name. */ + @Override + public String getServiceName() { + return "pubsub"; + } + + /** Returns a builder for the default ExecutorProvider for this service. */ + public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { + return InstantiatingExecutorProvider.newBuilder(); + } + + /** Returns the default service endpoint. */ + @ObsoleteApi("Use getEndpoint() instead") + public static String getDefaultEndpoint() { + return "pubsub.googleapis.com:443"; + } + + /** Returns the default mTLS service endpoint. */ + public static String getDefaultMtlsEndpoint() { + return "pubsub.mtls.googleapis.com:443"; + } + + /** Returns the default service scopes. */ + public static List getDefaultServiceScopes() { + return DEFAULT_SERVICE_SCOPES; + } + + /** Returns a builder for the default credentials for this service. */ + public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { + return GoogleCredentialsProvider.newBuilder() + .setScopesToApply(DEFAULT_SERVICE_SCOPES) + .setUseJwtAccessWithScope(true); + } + + /** Returns a builder for the default gRPC ChannelProvider for this service. */ + public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { + return InstantiatingGrpcChannelProvider.newBuilder() + .setMaxInboundMessageSize(Integer.MAX_VALUE); + } + + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return InstantiatingHttpJsonChannelProvider.newBuilder(); + } + + public static TransportChannelProvider defaultTransportChannelProvider() { + return defaultGrpcTransportProviderBuilder().build(); + } + + public static ApiClientHeaderProvider.Builder defaultGrpcApiClientHeaderProviderBuilder() { + return ApiClientHeaderProvider.newBuilder() + .setGeneratedLibToken( + "gapic", GaxProperties.getLibraryVersion(SchemaServiceStubSettings.class)) + .setTransportToken( + GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion()); + } + + public static ApiClientHeaderProvider.Builder defaultHttpJsonApiClientHeaderProviderBuilder() { + return ApiClientHeaderProvider.newBuilder() + .setGeneratedLibToken( + "gapic", GaxProperties.getLibraryVersion(SchemaServiceStubSettings.class)) + .setTransportToken( + GaxHttpJsonProperties.getHttpJsonTokenName(), + GaxHttpJsonProperties.getHttpJsonVersion()); + } + + public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + return SchemaServiceStubSettings.defaultGrpcApiClientHeaderProviderBuilder(); + } + + /** Returns a new gRPC builder for this class. */ + public static Builder newBuilder() { + return Builder.createDefault(); + } + + /** Returns a new REST builder for this class. */ + public static Builder newHttpJsonBuilder() { + return Builder.createHttpJsonDefault(); + } + + /** Returns a new builder for this class. */ + public static Builder newBuilder(ClientContext clientContext) { + return new Builder(clientContext); + } + + /** Returns a builder containing all the values of this settings class. */ + public Builder toBuilder() { + return new Builder(this); + } + + protected SchemaServiceStubSettings(Builder settingsBuilder) throws IOException { + super(settingsBuilder); + + createSchemaSettings = settingsBuilder.createSchemaSettings().build(); + getSchemaSettings = settingsBuilder.getSchemaSettings().build(); + listSchemasSettings = settingsBuilder.listSchemasSettings().build(); + listSchemaRevisionsSettings = settingsBuilder.listSchemaRevisionsSettings().build(); + commitSchemaSettings = settingsBuilder.commitSchemaSettings().build(); + rollbackSchemaSettings = settingsBuilder.rollbackSchemaSettings().build(); + deleteSchemaRevisionSettings = settingsBuilder.deleteSchemaRevisionSettings().build(); + deleteSchemaSettings = settingsBuilder.deleteSchemaSettings().build(); + validateSchemaSettings = settingsBuilder.validateSchemaSettings().build(); + validateMessageSettings = settingsBuilder.validateMessageSettings().build(); + setIamPolicySettings = settingsBuilder.setIamPolicySettings().build(); + getIamPolicySettings = settingsBuilder.getIamPolicySettings().build(); + testIamPermissionsSettings = settingsBuilder.testIamPermissionsSettings().build(); + } + + /** Builder for SchemaServiceStubSettings. */ + public static class Builder extends StubSettings.Builder { + private final ImmutableList> unaryMethodSettingsBuilders; + private final UnaryCallSettings.Builder createSchemaSettings; + private final UnaryCallSettings.Builder getSchemaSettings; + private final PagedCallSettings.Builder< + ListSchemasRequest, ListSchemasResponse, ListSchemasPagedResponse> + listSchemasSettings; + private final PagedCallSettings.Builder< + ListSchemaRevisionsRequest, + ListSchemaRevisionsResponse, + ListSchemaRevisionsPagedResponse> + listSchemaRevisionsSettings; + private final UnaryCallSettings.Builder commitSchemaSettings; + private final UnaryCallSettings.Builder rollbackSchemaSettings; + private final UnaryCallSettings.Builder + deleteSchemaRevisionSettings; + private final UnaryCallSettings.Builder deleteSchemaSettings; + private final UnaryCallSettings.Builder + validateSchemaSettings; + private final UnaryCallSettings.Builder + validateMessageSettings; + private final UnaryCallSettings.Builder setIamPolicySettings; + private final UnaryCallSettings.Builder getIamPolicySettings; + private final UnaryCallSettings.Builder + testIamPermissionsSettings; + private static final ImmutableMap> + RETRYABLE_CODE_DEFINITIONS; + + static { + ImmutableMap.Builder> definitions = + ImmutableMap.builder(); + definitions.put( + "retry_policy_7_codes", + ImmutableSet.copyOf(Lists.newArrayList(StatusCode.Code.UNAVAILABLE))); + definitions.put("no_retry_codes", ImmutableSet.copyOf(Lists.newArrayList())); + RETRYABLE_CODE_DEFINITIONS = definitions.build(); + } + + private static final ImmutableMap RETRY_PARAM_DEFINITIONS; + + static { + ImmutableMap.Builder definitions = ImmutableMap.builder(); + RetrySettings settings = null; + settings = + RetrySettings.newBuilder() + .setInitialRetryDelayDuration(Duration.ofMillis(100L)) + .setRetryDelayMultiplier(1.3) + .setMaxRetryDelayDuration(Duration.ofMillis(60000L)) + .setInitialRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setTotalTimeoutDuration(Duration.ofMillis(60000L)) + .build(); + definitions.put("retry_policy_7_params", settings); + settings = RetrySettings.newBuilder().setRpcTimeoutMultiplier(1.0).build(); + definitions.put("no_retry_params", settings); + RETRY_PARAM_DEFINITIONS = definitions.build(); + } + + protected Builder() { + this(((ClientContext) null)); + } + + protected Builder(ClientContext clientContext) { + super(clientContext); + + createSchemaSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + getSchemaSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + listSchemasSettings = PagedCallSettings.newBuilder(LIST_SCHEMAS_PAGE_STR_FACT); + listSchemaRevisionsSettings = + PagedCallSettings.newBuilder(LIST_SCHEMA_REVISIONS_PAGE_STR_FACT); + commitSchemaSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + rollbackSchemaSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + deleteSchemaRevisionSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + deleteSchemaSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + validateSchemaSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + validateMessageSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + setIamPolicySettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + getIamPolicySettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + testIamPermissionsSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + + unaryMethodSettingsBuilders = + ImmutableList.>of( + createSchemaSettings, + getSchemaSettings, + listSchemasSettings, + listSchemaRevisionsSettings, + commitSchemaSettings, + rollbackSchemaSettings, + deleteSchemaRevisionSettings, + deleteSchemaSettings, + validateSchemaSettings, + validateMessageSettings, + setIamPolicySettings, + getIamPolicySettings, + testIamPermissionsSettings); + initDefaults(this); + } + + protected Builder(SchemaServiceStubSettings settings) { + super(settings); + + createSchemaSettings = settings.createSchemaSettings.toBuilder(); + getSchemaSettings = settings.getSchemaSettings.toBuilder(); + listSchemasSettings = settings.listSchemasSettings.toBuilder(); + listSchemaRevisionsSettings = settings.listSchemaRevisionsSettings.toBuilder(); + commitSchemaSettings = settings.commitSchemaSettings.toBuilder(); + rollbackSchemaSettings = settings.rollbackSchemaSettings.toBuilder(); + deleteSchemaRevisionSettings = settings.deleteSchemaRevisionSettings.toBuilder(); + deleteSchemaSettings = settings.deleteSchemaSettings.toBuilder(); + validateSchemaSettings = settings.validateSchemaSettings.toBuilder(); + validateMessageSettings = settings.validateMessageSettings.toBuilder(); + setIamPolicySettings = settings.setIamPolicySettings.toBuilder(); + getIamPolicySettings = settings.getIamPolicySettings.toBuilder(); + testIamPermissionsSettings = settings.testIamPermissionsSettings.toBuilder(); + + unaryMethodSettingsBuilders = + ImmutableList.>of( + createSchemaSettings, + getSchemaSettings, + listSchemasSettings, + listSchemaRevisionsSettings, + commitSchemaSettings, + rollbackSchemaSettings, + deleteSchemaRevisionSettings, + deleteSchemaSettings, + validateSchemaSettings, + validateMessageSettings, + setIamPolicySettings, + getIamPolicySettings, + testIamPermissionsSettings); + } + + private static Builder createDefault() { + Builder builder = new Builder(((ClientContext) null)); + + builder.setTransportChannelProvider(defaultTransportChannelProvider()); + builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); + builder.setInternalHeaderProvider(defaultApiClientHeaderProviderBuilder().build()); + builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); + builder.setSwitchToMtlsEndpointAllowed(true); + + return initDefaults(builder); + } + + private static Builder createHttpJsonDefault() { + Builder builder = new Builder(((ClientContext) null)); + + builder.setTransportChannelProvider(defaultHttpJsonTransportProviderBuilder().build()); + builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); + builder.setInternalHeaderProvider(defaultHttpJsonApiClientHeaderProviderBuilder().build()); + builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); + builder.setSwitchToMtlsEndpointAllowed(true); + + return initDefaults(builder); + } + + private static Builder initDefaults(Builder builder) { + builder + .createSchemaSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_7_params")); + + builder + .getSchemaSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_7_params")); + + builder + .listSchemasSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_7_params")); + + builder + .listSchemaRevisionsSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_7_params")); + + builder + .commitSchemaSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_7_params")); + + builder + .rollbackSchemaSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_7_params")); + + builder + .deleteSchemaRevisionSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_7_params")); + + builder + .deleteSchemaSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_7_params")); + + builder + .validateSchemaSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_7_params")); + + builder + .validateMessageSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_7_params")); + + builder + .setIamPolicySettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_params")); + + builder + .getIamPolicySettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_params")); + + builder + .testIamPermissionsSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_params")); + + return builder; + } + + /** + * Applies the given settings updater function to all of the unary API methods in this service. + * + *

Note: This method does not support applying settings to streaming methods. + */ + public Builder applyToAllUnaryMethods( + ApiFunction, Void> settingsUpdater) { + super.applyToAllUnaryMethods(unaryMethodSettingsBuilders, settingsUpdater); + return this; + } + + public ImmutableList> unaryMethodSettingsBuilders() { + return unaryMethodSettingsBuilders; + } + + /** Returns the builder for the settings used for calls to createSchema. */ + public UnaryCallSettings.Builder createSchemaSettings() { + return createSchemaSettings; + } + + /** Returns the builder for the settings used for calls to getSchema. */ + public UnaryCallSettings.Builder getSchemaSettings() { + return getSchemaSettings; + } + + /** Returns the builder for the settings used for calls to listSchemas. */ + public PagedCallSettings.Builder< + ListSchemasRequest, ListSchemasResponse, ListSchemasPagedResponse> + listSchemasSettings() { + return listSchemasSettings; + } + + /** Returns the builder for the settings used for calls to listSchemaRevisions. */ + public PagedCallSettings.Builder< + ListSchemaRevisionsRequest, + ListSchemaRevisionsResponse, + ListSchemaRevisionsPagedResponse> + listSchemaRevisionsSettings() { + return listSchemaRevisionsSettings; + } + + /** Returns the builder for the settings used for calls to commitSchema. */ + public UnaryCallSettings.Builder commitSchemaSettings() { + return commitSchemaSettings; + } + + /** Returns the builder for the settings used for calls to rollbackSchema. */ + public UnaryCallSettings.Builder rollbackSchemaSettings() { + return rollbackSchemaSettings; + } + + /** Returns the builder for the settings used for calls to deleteSchemaRevision. */ + public UnaryCallSettings.Builder + deleteSchemaRevisionSettings() { + return deleteSchemaRevisionSettings; + } + + /** Returns the builder for the settings used for calls to deleteSchema. */ + public UnaryCallSettings.Builder deleteSchemaSettings() { + return deleteSchemaSettings; + } + + /** Returns the builder for the settings used for calls to validateSchema. */ + public UnaryCallSettings.Builder + validateSchemaSettings() { + return validateSchemaSettings; + } + + /** Returns the builder for the settings used for calls to validateMessage. */ + public UnaryCallSettings.Builder + validateMessageSettings() { + return validateMessageSettings; + } + + /** Returns the builder for the settings used for calls to setIamPolicy. */ + public UnaryCallSettings.Builder setIamPolicySettings() { + return setIamPolicySettings; + } + + /** Returns the builder for the settings used for calls to getIamPolicy. */ + public UnaryCallSettings.Builder getIamPolicySettings() { + return getIamPolicySettings; + } + + /** Returns the builder for the settings used for calls to testIamPermissions. */ + public UnaryCallSettings.Builder + testIamPermissionsSettings() { + return testIamPermissionsSettings; + } + + @Override + public SchemaServiceStubSettings build() throws IOException { + return new SchemaServiceStubSettings(this); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/SubscriberStub.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/SubscriberStub.java new file mode 100644 index 000000000000..115a2f2c82ae --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/SubscriberStub.java @@ -0,0 +1,155 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSubscriptionsPagedResponse; + +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.CreateSnapshotRequest; +import com.google.pubsub.v1.DeleteSnapshotRequest; +import com.google.pubsub.v1.DeleteSubscriptionRequest; +import com.google.pubsub.v1.GetSnapshotRequest; +import com.google.pubsub.v1.GetSubscriptionRequest; +import com.google.pubsub.v1.ListSnapshotsRequest; +import com.google.pubsub.v1.ListSnapshotsResponse; +import com.google.pubsub.v1.ListSubscriptionsRequest; +import com.google.pubsub.v1.ListSubscriptionsResponse; +import com.google.pubsub.v1.ModifyAckDeadlineRequest; +import com.google.pubsub.v1.ModifyPushConfigRequest; +import com.google.pubsub.v1.PullRequest; +import com.google.pubsub.v1.PullResponse; +import com.google.pubsub.v1.SeekRequest; +import com.google.pubsub.v1.SeekResponse; +import com.google.pubsub.v1.Snapshot; +import com.google.pubsub.v1.StreamingPullRequest; +import com.google.pubsub.v1.StreamingPullResponse; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.UpdateSnapshotRequest; +import com.google.pubsub.v1.UpdateSubscriptionRequest; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Base stub class for the Subscriber service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public abstract class SubscriberStub implements BackgroundResource { + + public UnaryCallable createSubscriptionCallable() { + throw new UnsupportedOperationException("Not implemented: createSubscriptionCallable()"); + } + + public UnaryCallable getSubscriptionCallable() { + throw new UnsupportedOperationException("Not implemented: getSubscriptionCallable()"); + } + + public UnaryCallable updateSubscriptionCallable() { + throw new UnsupportedOperationException("Not implemented: updateSubscriptionCallable()"); + } + + public UnaryCallable + listSubscriptionsPagedCallable() { + throw new UnsupportedOperationException("Not implemented: listSubscriptionsPagedCallable()"); + } + + public UnaryCallable + listSubscriptionsCallable() { + throw new UnsupportedOperationException("Not implemented: listSubscriptionsCallable()"); + } + + public UnaryCallable deleteSubscriptionCallable() { + throw new UnsupportedOperationException("Not implemented: deleteSubscriptionCallable()"); + } + + public UnaryCallable modifyAckDeadlineCallable() { + throw new UnsupportedOperationException("Not implemented: modifyAckDeadlineCallable()"); + } + + public UnaryCallable acknowledgeCallable() { + throw new UnsupportedOperationException("Not implemented: acknowledgeCallable()"); + } + + public UnaryCallable pullCallable() { + throw new UnsupportedOperationException("Not implemented: pullCallable()"); + } + + public BidiStreamingCallable + streamingPullCallable() { + throw new UnsupportedOperationException("Not implemented: streamingPullCallable()"); + } + + public UnaryCallable modifyPushConfigCallable() { + throw new UnsupportedOperationException("Not implemented: modifyPushConfigCallable()"); + } + + public UnaryCallable getSnapshotCallable() { + throw new UnsupportedOperationException("Not implemented: getSnapshotCallable()"); + } + + public UnaryCallable + listSnapshotsPagedCallable() { + throw new UnsupportedOperationException("Not implemented: listSnapshotsPagedCallable()"); + } + + public UnaryCallable listSnapshotsCallable() { + throw new UnsupportedOperationException("Not implemented: listSnapshotsCallable()"); + } + + public UnaryCallable createSnapshotCallable() { + throw new UnsupportedOperationException("Not implemented: createSnapshotCallable()"); + } + + public UnaryCallable updateSnapshotCallable() { + throw new UnsupportedOperationException("Not implemented: updateSnapshotCallable()"); + } + + public UnaryCallable deleteSnapshotCallable() { + throw new UnsupportedOperationException("Not implemented: deleteSnapshotCallable()"); + } + + public UnaryCallable seekCallable() { + throw new UnsupportedOperationException("Not implemented: seekCallable()"); + } + + public UnaryCallable setIamPolicyCallable() { + throw new UnsupportedOperationException("Not implemented: setIamPolicyCallable()"); + } + + public UnaryCallable getIamPolicyCallable() { + throw new UnsupportedOperationException("Not implemented: getIamPolicyCallable()"); + } + + public UnaryCallable + testIamPermissionsCallable() { + throw new UnsupportedOperationException("Not implemented: testIamPermissionsCallable()"); + } + + @Override + public abstract void close(); +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/SubscriberStubSettings.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/SubscriberStubSettings.java new file mode 100644 index 000000000000..e3489bb58079 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/stub/SubscriberStubSettings.java @@ -0,0 +1,969 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1.stub; + +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSubscriptionsPagedResponse; + +import com.google.api.core.ApiFunction; +import com.google.api.core.ApiFuture; +import com.google.api.core.BetaApi; +import com.google.api.core.ObsoleteApi; +import com.google.api.gax.core.GaxProperties; +import com.google.api.gax.core.GoogleCredentialsProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.api.gax.grpc.GaxGrpcProperties; +import com.google.api.gax.grpc.GrpcTransportChannel; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.httpjson.GaxHttpJsonProperties; +import com.google.api.gax.httpjson.HttpJsonTransportChannel; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; +import com.google.api.gax.retrying.RetrySettings; +import com.google.api.gax.rpc.ApiCallContext; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.PageContext; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.PagedListDescriptor; +import com.google.api.gax.rpc.PagedListResponseFactory; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.rpc.StreamingCallSettings; +import com.google.api.gax.rpc.StubSettings; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.CreateSnapshotRequest; +import com.google.pubsub.v1.DeleteSnapshotRequest; +import com.google.pubsub.v1.DeleteSubscriptionRequest; +import com.google.pubsub.v1.GetSnapshotRequest; +import com.google.pubsub.v1.GetSubscriptionRequest; +import com.google.pubsub.v1.ListSnapshotsRequest; +import com.google.pubsub.v1.ListSnapshotsResponse; +import com.google.pubsub.v1.ListSubscriptionsRequest; +import com.google.pubsub.v1.ListSubscriptionsResponse; +import com.google.pubsub.v1.ModifyAckDeadlineRequest; +import com.google.pubsub.v1.ModifyPushConfigRequest; +import com.google.pubsub.v1.PullRequest; +import com.google.pubsub.v1.PullResponse; +import com.google.pubsub.v1.SeekRequest; +import com.google.pubsub.v1.SeekResponse; +import com.google.pubsub.v1.Snapshot; +import com.google.pubsub.v1.StreamingPullRequest; +import com.google.pubsub.v1.StreamingPullResponse; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.UpdateSnapshotRequest; +import com.google.pubsub.v1.UpdateSubscriptionRequest; +import java.io.IOException; +import java.time.Duration; +import java.util.List; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Settings class to configure an instance of {@link SubscriberStub}. + * + *

The default instance has everything set to sensible defaults: + * + *

    + *
  • The default service address (pubsub.googleapis.com) and default port (443) are used. + *
  • Credentials are acquired automatically through Application Default Credentials. + *
  • Retries are configured for idempotent methods but not for non-idempotent methods. + *
+ * + *

The builder of this class is recursive, so contained classes are themselves builders. When + * build() is called, the tree of builders is called to create the complete settings object. + * + *

For example, to set the + * [RetrySettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.retrying.RetrySettings) + * of createSubscription: + * + *

{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SubscriberStubSettings.Builder subscriptionAdminSettingsBuilder =
+ *     SubscriberStubSettings.newBuilder();
+ * subscriptionAdminSettingsBuilder
+ *     .createSubscriptionSettings()
+ *     .setRetrySettings(
+ *         subscriptionAdminSettingsBuilder
+ *             .createSubscriptionSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setInitialRetryDelayDuration(Duration.ofSeconds(1))
+ *             .setInitialRpcTimeoutDuration(Duration.ofSeconds(5))
+ *             .setMaxAttempts(5)
+ *             .setMaxRetryDelayDuration(Duration.ofSeconds(30))
+ *             .setMaxRpcTimeoutDuration(Duration.ofSeconds(60))
+ *             .setRetryDelayMultiplier(1.3)
+ *             .setRpcTimeoutMultiplier(1.5)
+ *             .setTotalTimeoutDuration(Duration.ofSeconds(300))
+ *             .build());
+ * SubscriberStubSettings subscriptionAdminSettings = subscriptionAdminSettingsBuilder.build();
+ * }
+ * + * Please refer to the [Client Side Retry + * Guide](https://docs.cloud.google.com/java/docs/client-retries) for additional support in setting + * retries. + */ +@Generated("by gapic-generator-java") +public class SubscriberStubSettings extends StubSettings { + /** The default scopes of the service. */ + private static final ImmutableList DEFAULT_SERVICE_SCOPES = + ImmutableList.builder() + .add("https://www.googleapis.com/auth/cloud-platform") + .add("https://www.googleapis.com/auth/pubsub") + .build(); + + private final UnaryCallSettings createSubscriptionSettings; + private final UnaryCallSettings getSubscriptionSettings; + private final UnaryCallSettings + updateSubscriptionSettings; + private final PagedCallSettings< + ListSubscriptionsRequest, ListSubscriptionsResponse, ListSubscriptionsPagedResponse> + listSubscriptionsSettings; + private final UnaryCallSettings deleteSubscriptionSettings; + private final UnaryCallSettings modifyAckDeadlineSettings; + private final UnaryCallSettings acknowledgeSettings; + private final UnaryCallSettings pullSettings; + private final StreamingCallSettings + streamingPullSettings; + private final UnaryCallSettings modifyPushConfigSettings; + private final UnaryCallSettings getSnapshotSettings; + private final PagedCallSettings< + ListSnapshotsRequest, ListSnapshotsResponse, ListSnapshotsPagedResponse> + listSnapshotsSettings; + private final UnaryCallSettings createSnapshotSettings; + private final UnaryCallSettings updateSnapshotSettings; + private final UnaryCallSettings deleteSnapshotSettings; + private final UnaryCallSettings seekSettings; + private final UnaryCallSettings setIamPolicySettings; + private final UnaryCallSettings getIamPolicySettings; + private final UnaryCallSettings + testIamPermissionsSettings; + + private static final PagedListDescriptor< + ListSubscriptionsRequest, ListSubscriptionsResponse, Subscription> + LIST_SUBSCRIPTIONS_PAGE_STR_DESC = + new PagedListDescriptor< + ListSubscriptionsRequest, ListSubscriptionsResponse, Subscription>() { + @Override + public String emptyToken() { + return ""; + } + + @Override + public ListSubscriptionsRequest injectToken( + ListSubscriptionsRequest payload, String token) { + return ListSubscriptionsRequest.newBuilder(payload).setPageToken(token).build(); + } + + @Override + public ListSubscriptionsRequest injectPageSize( + ListSubscriptionsRequest payload, int pageSize) { + return ListSubscriptionsRequest.newBuilder(payload).setPageSize(pageSize).build(); + } + + @Override + public Integer extractPageSize(ListSubscriptionsRequest payload) { + return payload.getPageSize(); + } + + @Override + public String extractNextToken(ListSubscriptionsResponse payload) { + return payload.getNextPageToken(); + } + + @Override + public Iterable extractResources(ListSubscriptionsResponse payload) { + return payload.getSubscriptionsList(); + } + }; + + private static final PagedListDescriptor + LIST_SNAPSHOTS_PAGE_STR_DESC = + new PagedListDescriptor() { + @Override + public String emptyToken() { + return ""; + } + + @Override + public ListSnapshotsRequest injectToken(ListSnapshotsRequest payload, String token) { + return ListSnapshotsRequest.newBuilder(payload).setPageToken(token).build(); + } + + @Override + public ListSnapshotsRequest injectPageSize(ListSnapshotsRequest payload, int pageSize) { + return ListSnapshotsRequest.newBuilder(payload).setPageSize(pageSize).build(); + } + + @Override + public Integer extractPageSize(ListSnapshotsRequest payload) { + return payload.getPageSize(); + } + + @Override + public String extractNextToken(ListSnapshotsResponse payload) { + return payload.getNextPageToken(); + } + + @Override + public Iterable extractResources(ListSnapshotsResponse payload) { + return payload.getSnapshotsList(); + } + }; + + private static final PagedListResponseFactory< + ListSubscriptionsRequest, ListSubscriptionsResponse, ListSubscriptionsPagedResponse> + LIST_SUBSCRIPTIONS_PAGE_STR_FACT = + new PagedListResponseFactory< + ListSubscriptionsRequest, + ListSubscriptionsResponse, + ListSubscriptionsPagedResponse>() { + @Override + public ApiFuture getFuturePagedResponse( + UnaryCallable callable, + ListSubscriptionsRequest request, + ApiCallContext context, + ApiFuture futureResponse) { + PageContext + pageContext = + PageContext.create( + callable, LIST_SUBSCRIPTIONS_PAGE_STR_DESC, request, context); + return ListSubscriptionsPagedResponse.createAsync(pageContext, futureResponse); + } + }; + + private static final PagedListResponseFactory< + ListSnapshotsRequest, ListSnapshotsResponse, ListSnapshotsPagedResponse> + LIST_SNAPSHOTS_PAGE_STR_FACT = + new PagedListResponseFactory< + ListSnapshotsRequest, ListSnapshotsResponse, ListSnapshotsPagedResponse>() { + @Override + public ApiFuture getFuturePagedResponse( + UnaryCallable callable, + ListSnapshotsRequest request, + ApiCallContext context, + ApiFuture futureResponse) { + PageContext pageContext = + PageContext.create(callable, LIST_SNAPSHOTS_PAGE_STR_DESC, request, context); + return ListSnapshotsPagedResponse.createAsync(pageContext, futureResponse); + } + }; + + /** Returns the object with the settings used for calls to createSubscription. */ + public UnaryCallSettings createSubscriptionSettings() { + return createSubscriptionSettings; + } + + /** Returns the object with the settings used for calls to getSubscription. */ + public UnaryCallSettings getSubscriptionSettings() { + return getSubscriptionSettings; + } + + /** Returns the object with the settings used for calls to updateSubscription. */ + public UnaryCallSettings updateSubscriptionSettings() { + return updateSubscriptionSettings; + } + + /** Returns the object with the settings used for calls to listSubscriptions. */ + public PagedCallSettings< + ListSubscriptionsRequest, ListSubscriptionsResponse, ListSubscriptionsPagedResponse> + listSubscriptionsSettings() { + return listSubscriptionsSettings; + } + + /** Returns the object with the settings used for calls to deleteSubscription. */ + public UnaryCallSettings deleteSubscriptionSettings() { + return deleteSubscriptionSettings; + } + + /** Returns the object with the settings used for calls to modifyAckDeadline. */ + public UnaryCallSettings modifyAckDeadlineSettings() { + return modifyAckDeadlineSettings; + } + + /** Returns the object with the settings used for calls to acknowledge. */ + public UnaryCallSettings acknowledgeSettings() { + return acknowledgeSettings; + } + + /** Returns the object with the settings used for calls to pull. */ + public UnaryCallSettings pullSettings() { + return pullSettings; + } + + /** Returns the object with the settings used for calls to streamingPull. */ + public StreamingCallSettings + streamingPullSettings() { + return streamingPullSettings; + } + + /** Returns the object with the settings used for calls to modifyPushConfig. */ + public UnaryCallSettings modifyPushConfigSettings() { + return modifyPushConfigSettings; + } + + /** Returns the object with the settings used for calls to getSnapshot. */ + public UnaryCallSettings getSnapshotSettings() { + return getSnapshotSettings; + } + + /** Returns the object with the settings used for calls to listSnapshots. */ + public PagedCallSettings + listSnapshotsSettings() { + return listSnapshotsSettings; + } + + /** Returns the object with the settings used for calls to createSnapshot. */ + public UnaryCallSettings createSnapshotSettings() { + return createSnapshotSettings; + } + + /** Returns the object with the settings used for calls to updateSnapshot. */ + public UnaryCallSettings updateSnapshotSettings() { + return updateSnapshotSettings; + } + + /** Returns the object with the settings used for calls to deleteSnapshot. */ + public UnaryCallSettings deleteSnapshotSettings() { + return deleteSnapshotSettings; + } + + /** Returns the object with the settings used for calls to seek. */ + public UnaryCallSettings seekSettings() { + return seekSettings; + } + + /** Returns the object with the settings used for calls to setIamPolicy. */ + public UnaryCallSettings setIamPolicySettings() { + return setIamPolicySettings; + } + + /** Returns the object with the settings used for calls to getIamPolicy. */ + public UnaryCallSettings getIamPolicySettings() { + return getIamPolicySettings; + } + + /** Returns the object with the settings used for calls to testIamPermissions. */ + public UnaryCallSettings + testIamPermissionsSettings() { + return testIamPermissionsSettings; + } + + public SubscriberStub createStub() throws IOException { + if (getTransportChannelProvider() + .getTransportName() + .equals(GrpcTransportChannel.getGrpcTransportName())) { + return GrpcSubscriberStub.create(this); + } + if (getTransportChannelProvider() + .getTransportName() + .equals(HttpJsonTransportChannel.getHttpJsonTransportName())) { + return HttpJsonSubscriberStub.create(this); + } + throw new UnsupportedOperationException( + String.format( + "Transport not supported: %s", getTransportChannelProvider().getTransportName())); + } + + /** Returns the default service name. */ + @Override + public String getServiceName() { + return "pubsub"; + } + + /** Returns a builder for the default ExecutorProvider for this service. */ + public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { + return InstantiatingExecutorProvider.newBuilder(); + } + + /** Returns the default service endpoint. */ + @ObsoleteApi("Use getEndpoint() instead") + public static String getDefaultEndpoint() { + return "pubsub.googleapis.com:443"; + } + + /** Returns the default mTLS service endpoint. */ + public static String getDefaultMtlsEndpoint() { + return "pubsub.mtls.googleapis.com:443"; + } + + /** Returns the default service scopes. */ + public static List getDefaultServiceScopes() { + return DEFAULT_SERVICE_SCOPES; + } + + /** Returns a builder for the default credentials for this service. */ + public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { + return GoogleCredentialsProvider.newBuilder() + .setScopesToApply(DEFAULT_SERVICE_SCOPES) + .setUseJwtAccessWithScope(true); + } + + /** Returns a builder for the default gRPC ChannelProvider for this service. */ + public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { + return InstantiatingGrpcChannelProvider.newBuilder().setMaxInboundMessageSize(20 << 20); + } + + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return InstantiatingHttpJsonChannelProvider.newBuilder(); + } + + public static TransportChannelProvider defaultTransportChannelProvider() { + return defaultGrpcTransportProviderBuilder().build(); + } + + public static ApiClientHeaderProvider.Builder defaultGrpcApiClientHeaderProviderBuilder() { + return ApiClientHeaderProvider.newBuilder() + .setGeneratedLibToken( + "gapic", GaxProperties.getLibraryVersion(SubscriberStubSettings.class)) + .setTransportToken( + GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion()); + } + + public static ApiClientHeaderProvider.Builder defaultHttpJsonApiClientHeaderProviderBuilder() { + return ApiClientHeaderProvider.newBuilder() + .setGeneratedLibToken( + "gapic", GaxProperties.getLibraryVersion(SubscriberStubSettings.class)) + .setTransportToken( + GaxHttpJsonProperties.getHttpJsonTokenName(), + GaxHttpJsonProperties.getHttpJsonVersion()); + } + + public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + return SubscriberStubSettings.defaultGrpcApiClientHeaderProviderBuilder(); + } + + /** Returns a new gRPC builder for this class. */ + public static Builder newBuilder() { + return Builder.createDefault(); + } + + /** Returns a new REST builder for this class. */ + public static Builder newHttpJsonBuilder() { + return Builder.createHttpJsonDefault(); + } + + /** Returns a new builder for this class. */ + public static Builder newBuilder(ClientContext clientContext) { + return new Builder(clientContext); + } + + /** Returns a builder containing all the values of this settings class. */ + public Builder toBuilder() { + return new Builder(this); + } + + protected SubscriberStubSettings(Builder settingsBuilder) throws IOException { + super(settingsBuilder); + + createSubscriptionSettings = settingsBuilder.createSubscriptionSettings().build(); + getSubscriptionSettings = settingsBuilder.getSubscriptionSettings().build(); + updateSubscriptionSettings = settingsBuilder.updateSubscriptionSettings().build(); + listSubscriptionsSettings = settingsBuilder.listSubscriptionsSettings().build(); + deleteSubscriptionSettings = settingsBuilder.deleteSubscriptionSettings().build(); + modifyAckDeadlineSettings = settingsBuilder.modifyAckDeadlineSettings().build(); + acknowledgeSettings = settingsBuilder.acknowledgeSettings().build(); + pullSettings = settingsBuilder.pullSettings().build(); + streamingPullSettings = settingsBuilder.streamingPullSettings().build(); + modifyPushConfigSettings = settingsBuilder.modifyPushConfigSettings().build(); + getSnapshotSettings = settingsBuilder.getSnapshotSettings().build(); + listSnapshotsSettings = settingsBuilder.listSnapshotsSettings().build(); + createSnapshotSettings = settingsBuilder.createSnapshotSettings().build(); + updateSnapshotSettings = settingsBuilder.updateSnapshotSettings().build(); + deleteSnapshotSettings = settingsBuilder.deleteSnapshotSettings().build(); + seekSettings = settingsBuilder.seekSettings().build(); + setIamPolicySettings = settingsBuilder.setIamPolicySettings().build(); + getIamPolicySettings = settingsBuilder.getIamPolicySettings().build(); + testIamPermissionsSettings = settingsBuilder.testIamPermissionsSettings().build(); + } + + /** Builder for SubscriberStubSettings. */ + public static class Builder extends StubSettings.Builder { + private final ImmutableList> unaryMethodSettingsBuilders; + private final UnaryCallSettings.Builder createSubscriptionSettings; + private final UnaryCallSettings.Builder + getSubscriptionSettings; + private final UnaryCallSettings.Builder + updateSubscriptionSettings; + private final PagedCallSettings.Builder< + ListSubscriptionsRequest, ListSubscriptionsResponse, ListSubscriptionsPagedResponse> + listSubscriptionsSettings; + private final UnaryCallSettings.Builder + deleteSubscriptionSettings; + private final UnaryCallSettings.Builder + modifyAckDeadlineSettings; + private final UnaryCallSettings.Builder acknowledgeSettings; + private final UnaryCallSettings.Builder pullSettings; + private final StreamingCallSettings.Builder + streamingPullSettings; + private final UnaryCallSettings.Builder + modifyPushConfigSettings; + private final UnaryCallSettings.Builder getSnapshotSettings; + private final PagedCallSettings.Builder< + ListSnapshotsRequest, ListSnapshotsResponse, ListSnapshotsPagedResponse> + listSnapshotsSettings; + private final UnaryCallSettings.Builder createSnapshotSettings; + private final UnaryCallSettings.Builder updateSnapshotSettings; + private final UnaryCallSettings.Builder deleteSnapshotSettings; + private final UnaryCallSettings.Builder seekSettings; + private final UnaryCallSettings.Builder setIamPolicySettings; + private final UnaryCallSettings.Builder getIamPolicySettings; + private final UnaryCallSettings.Builder + testIamPermissionsSettings; + private static final ImmutableMap> + RETRYABLE_CODE_DEFINITIONS; + + static { + ImmutableMap.Builder> definitions = + ImmutableMap.builder(); + definitions.put( + "retry_policy_5_codes", + ImmutableSet.copyOf( + Lists.newArrayList( + StatusCode.Code.UNKNOWN, StatusCode.Code.ABORTED, StatusCode.Code.UNAVAILABLE))); + definitions.put( + "retry_policy_6_codes", + ImmutableSet.copyOf(Lists.newArrayList(StatusCode.Code.UNAVAILABLE))); + definitions.put( + "retry_policy_4_codes", + ImmutableSet.copyOf( + Lists.newArrayList( + StatusCode.Code.UNKNOWN, + StatusCode.Code.ABORTED, + StatusCode.Code.UNAVAILABLE, + StatusCode.Code.INTERNAL))); + definitions.put( + "retry_policy_3_codes", + ImmutableSet.copyOf( + Lists.newArrayList( + StatusCode.Code.DEADLINE_EXCEEDED, + StatusCode.Code.RESOURCE_EXHAUSTED, + StatusCode.Code.ABORTED, + StatusCode.Code.INTERNAL, + StatusCode.Code.UNAVAILABLE))); + RETRYABLE_CODE_DEFINITIONS = definitions.build(); + } + + private static final ImmutableMap RETRY_PARAM_DEFINITIONS; + + static { + ImmutableMap.Builder definitions = ImmutableMap.builder(); + RetrySettings settings = null; + settings = + RetrySettings.newBuilder() + .setInitialRetryDelayDuration(Duration.ofMillis(100L)) + .setRetryDelayMultiplier(1.3) + .setMaxRetryDelayDuration(Duration.ofMillis(60000L)) + .setInitialRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setTotalTimeoutDuration(Duration.ofMillis(60000L)) + .build(); + definitions.put("retry_policy_5_params", settings); + settings = + RetrySettings.newBuilder() + .setInitialRetryDelayDuration(Duration.ofMillis(100L)) + .setRetryDelayMultiplier(1.3) + .setMaxRetryDelayDuration(Duration.ofMillis(60000L)) + .setInitialRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setTotalTimeoutDuration(Duration.ofMillis(60000L)) + .build(); + definitions.put("retry_policy_6_params", settings); + settings = + RetrySettings.newBuilder() + .setInitialRetryDelayDuration(Duration.ofMillis(100L)) + .setRetryDelayMultiplier(1.3) + .setMaxRetryDelayDuration(Duration.ofMillis(60000L)) + .setInitialRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setTotalTimeoutDuration(Duration.ofMillis(60000L)) + .build(); + definitions.put("retry_policy_4_params", settings); + settings = + RetrySettings.newBuilder() + .setInitialRetryDelayDuration(Duration.ofMillis(100L)) + .setRetryDelayMultiplier(4.0) + .setMaxRetryDelayDuration(Duration.ofMillis(60000L)) + .setInitialRpcTimeoutDuration(Duration.ofMillis(900000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ofMillis(900000L)) + .setTotalTimeoutDuration(Duration.ofMillis(900000L)) + .build(); + definitions.put("retry_policy_3_params", settings); + RETRY_PARAM_DEFINITIONS = definitions.build(); + } + + protected Builder() { + this(((ClientContext) null)); + } + + protected Builder(ClientContext clientContext) { + super(clientContext); + + createSubscriptionSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + getSubscriptionSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + updateSubscriptionSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + listSubscriptionsSettings = PagedCallSettings.newBuilder(LIST_SUBSCRIPTIONS_PAGE_STR_FACT); + deleteSubscriptionSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + modifyAckDeadlineSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + acknowledgeSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + pullSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + streamingPullSettings = StreamingCallSettings.newBuilder(); + modifyPushConfigSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + getSnapshotSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + listSnapshotsSettings = PagedCallSettings.newBuilder(LIST_SNAPSHOTS_PAGE_STR_FACT); + createSnapshotSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + updateSnapshotSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + deleteSnapshotSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + seekSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + setIamPolicySettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + getIamPolicySettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + testIamPermissionsSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + + unaryMethodSettingsBuilders = + ImmutableList.>of( + createSubscriptionSettings, + getSubscriptionSettings, + updateSubscriptionSettings, + listSubscriptionsSettings, + deleteSubscriptionSettings, + modifyAckDeadlineSettings, + acknowledgeSettings, + pullSettings, + modifyPushConfigSettings, + getSnapshotSettings, + listSnapshotsSettings, + createSnapshotSettings, + updateSnapshotSettings, + deleteSnapshotSettings, + seekSettings, + setIamPolicySettings, + getIamPolicySettings, + testIamPermissionsSettings); + initDefaults(this); + } + + protected Builder(SubscriberStubSettings settings) { + super(settings); + + createSubscriptionSettings = settings.createSubscriptionSettings.toBuilder(); + getSubscriptionSettings = settings.getSubscriptionSettings.toBuilder(); + updateSubscriptionSettings = settings.updateSubscriptionSettings.toBuilder(); + listSubscriptionsSettings = settings.listSubscriptionsSettings.toBuilder(); + deleteSubscriptionSettings = settings.deleteSubscriptionSettings.toBuilder(); + modifyAckDeadlineSettings = settings.modifyAckDeadlineSettings.toBuilder(); + acknowledgeSettings = settings.acknowledgeSettings.toBuilder(); + pullSettings = settings.pullSettings.toBuilder(); + streamingPullSettings = settings.streamingPullSettings.toBuilder(); + modifyPushConfigSettings = settings.modifyPushConfigSettings.toBuilder(); + getSnapshotSettings = settings.getSnapshotSettings.toBuilder(); + listSnapshotsSettings = settings.listSnapshotsSettings.toBuilder(); + createSnapshotSettings = settings.createSnapshotSettings.toBuilder(); + updateSnapshotSettings = settings.updateSnapshotSettings.toBuilder(); + deleteSnapshotSettings = settings.deleteSnapshotSettings.toBuilder(); + seekSettings = settings.seekSettings.toBuilder(); + setIamPolicySettings = settings.setIamPolicySettings.toBuilder(); + getIamPolicySettings = settings.getIamPolicySettings.toBuilder(); + testIamPermissionsSettings = settings.testIamPermissionsSettings.toBuilder(); + + unaryMethodSettingsBuilders = + ImmutableList.>of( + createSubscriptionSettings, + getSubscriptionSettings, + updateSubscriptionSettings, + listSubscriptionsSettings, + deleteSubscriptionSettings, + modifyAckDeadlineSettings, + acknowledgeSettings, + pullSettings, + modifyPushConfigSettings, + getSnapshotSettings, + listSnapshotsSettings, + createSnapshotSettings, + updateSnapshotSettings, + deleteSnapshotSettings, + seekSettings, + setIamPolicySettings, + getIamPolicySettings, + testIamPermissionsSettings); + } + + private static Builder createDefault() { + Builder builder = new Builder(((ClientContext) null)); + + builder.setTransportChannelProvider(defaultTransportChannelProvider()); + builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); + builder.setInternalHeaderProvider(defaultApiClientHeaderProviderBuilder().build()); + builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); + builder.setSwitchToMtlsEndpointAllowed(true); + + return initDefaults(builder); + } + + private static Builder createHttpJsonDefault() { + Builder builder = new Builder(((ClientContext) null)); + + builder.setTransportChannelProvider(defaultHttpJsonTransportProviderBuilder().build()); + builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); + builder.setInternalHeaderProvider(defaultHttpJsonApiClientHeaderProviderBuilder().build()); + builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); + builder.setSwitchToMtlsEndpointAllowed(true); + + return initDefaults(builder); + } + + private static Builder initDefaults(Builder builder) { + builder + .createSubscriptionSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + + builder + .getSubscriptionSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + + builder + .updateSubscriptionSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); + + builder + .listSubscriptionsSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + + builder + .deleteSubscriptionSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); + + builder + .modifyAckDeadlineSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); + + builder + .acknowledgeSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); + + builder + .pullSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_4_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_4_params")); + + builder + .modifyPushConfigSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); + + builder + .getSnapshotSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + + builder + .listSnapshotsSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + + builder + .createSnapshotSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); + + builder + .updateSnapshotSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); + + builder + .deleteSnapshotSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); + + builder + .seekSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + + builder + .setIamPolicySettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); + + builder + .getIamPolicySettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + + builder + .testIamPermissionsSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); + + return builder; + } + + /** + * Applies the given settings updater function to all of the unary API methods in this service. + * + *

Note: This method does not support applying settings to streaming methods. + */ + public Builder applyToAllUnaryMethods( + ApiFunction, Void> settingsUpdater) { + super.applyToAllUnaryMethods(unaryMethodSettingsBuilders, settingsUpdater); + return this; + } + + public ImmutableList> unaryMethodSettingsBuilders() { + return unaryMethodSettingsBuilders; + } + + /** Returns the builder for the settings used for calls to createSubscription. */ + public UnaryCallSettings.Builder createSubscriptionSettings() { + return createSubscriptionSettings; + } + + /** Returns the builder for the settings used for calls to getSubscription. */ + public UnaryCallSettings.Builder + getSubscriptionSettings() { + return getSubscriptionSettings; + } + + /** Returns the builder for the settings used for calls to updateSubscription. */ + public UnaryCallSettings.Builder + updateSubscriptionSettings() { + return updateSubscriptionSettings; + } + + /** Returns the builder for the settings used for calls to listSubscriptions. */ + public PagedCallSettings.Builder< + ListSubscriptionsRequest, ListSubscriptionsResponse, ListSubscriptionsPagedResponse> + listSubscriptionsSettings() { + return listSubscriptionsSettings; + } + + /** Returns the builder for the settings used for calls to deleteSubscription. */ + public UnaryCallSettings.Builder + deleteSubscriptionSettings() { + return deleteSubscriptionSettings; + } + + /** Returns the builder for the settings used for calls to modifyAckDeadline. */ + public UnaryCallSettings.Builder modifyAckDeadlineSettings() { + return modifyAckDeadlineSettings; + } + + /** Returns the builder for the settings used for calls to acknowledge. */ + public UnaryCallSettings.Builder acknowledgeSettings() { + return acknowledgeSettings; + } + + /** Returns the builder for the settings used for calls to pull. */ + public UnaryCallSettings.Builder pullSettings() { + return pullSettings; + } + + /** Returns the builder for the settings used for calls to streamingPull. */ + public StreamingCallSettings.Builder + streamingPullSettings() { + return streamingPullSettings; + } + + /** Returns the builder for the settings used for calls to modifyPushConfig. */ + public UnaryCallSettings.Builder modifyPushConfigSettings() { + return modifyPushConfigSettings; + } + + /** Returns the builder for the settings used for calls to getSnapshot. */ + public UnaryCallSettings.Builder getSnapshotSettings() { + return getSnapshotSettings; + } + + /** Returns the builder for the settings used for calls to listSnapshots. */ + public PagedCallSettings.Builder< + ListSnapshotsRequest, ListSnapshotsResponse, ListSnapshotsPagedResponse> + listSnapshotsSettings() { + return listSnapshotsSettings; + } + + /** Returns the builder for the settings used for calls to createSnapshot. */ + public UnaryCallSettings.Builder createSnapshotSettings() { + return createSnapshotSettings; + } + + /** Returns the builder for the settings used for calls to updateSnapshot. */ + public UnaryCallSettings.Builder updateSnapshotSettings() { + return updateSnapshotSettings; + } + + /** Returns the builder for the settings used for calls to deleteSnapshot. */ + public UnaryCallSettings.Builder deleteSnapshotSettings() { + return deleteSnapshotSettings; + } + + /** Returns the builder for the settings used for calls to seek. */ + public UnaryCallSettings.Builder seekSettings() { + return seekSettings; + } + + /** Returns the builder for the settings used for calls to setIamPolicy. */ + public UnaryCallSettings.Builder setIamPolicySettings() { + return setIamPolicySettings; + } + + /** Returns the builder for the settings used for calls to getIamPolicy. */ + public UnaryCallSettings.Builder getIamPolicySettings() { + return getIamPolicySettings; + } + + /** Returns the builder for the settings used for calls to testIamPermissions. */ + public UnaryCallSettings.Builder + testIamPermissionsSettings() { + return testIamPermissionsSettings; + } + + @Override + public SubscriberStubSettings build() throws IOException { + return new SubscriberStubSettings(this); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/main/resources/META-INF/native-image/com.google.cloud.pubsub.v1/reflect-config.json b/java-pubsub/google-cloud-pubsub/src/main/resources/META-INF/native-image/com.google.cloud.pubsub.v1/reflect-config.json new file mode 100644 index 000000000000..e3938470a2d8 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/main/resources/META-INF/native-image/com.google.cloud.pubsub.v1/reflect-config.json @@ -0,0 +1,3440 @@ +[ + { + "name": "com.google.api.ClientLibraryDestination", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ClientLibraryOrganization", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ClientLibrarySettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ClientLibrarySettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.CommonLanguageSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.CommonLanguageSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.CppSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.CppSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.CustomHttpPattern", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.CustomHttpPattern$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.DotnetSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.DotnetSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.FieldBehavior", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.GoSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.GoSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.Http", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.Http$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.HttpRule", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.HttpRule$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.JavaSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.JavaSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.LaunchStage", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.MethodSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.MethodSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.MethodSettings$LongRunning", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.MethodSettings$LongRunning$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.NodeSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.NodeSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.PhpSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.PhpSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.Publishing", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.Publishing$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.PythonSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.PythonSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.PythonSettings$ExperimentalFeatures", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.PythonSettings$ExperimentalFeatures$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ResourceDescriptor", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ResourceDescriptor$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ResourceDescriptor$History", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ResourceDescriptor$Style", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ResourceReference", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ResourceReference$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.RubySettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.RubySettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.SelectiveGapicGeneration", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.SelectiveGapicGeneration$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.AuditConfig", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.AuditConfig$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.AuditConfigDelta", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.AuditConfigDelta$Action", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.AuditConfigDelta$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.AuditLogConfig", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.AuditLogConfig$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.AuditLogConfig$LogType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.Binding", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.Binding$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.BindingDelta", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.BindingDelta$Action", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.BindingDelta$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.GetIamPolicyRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.GetIamPolicyRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.GetPolicyOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.GetPolicyOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.Policy", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.Policy$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.PolicyDelta", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.PolicyDelta$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.SetIamPolicyRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.SetIamPolicyRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.TestIamPermissionsRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.TestIamPermissionsRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.TestIamPermissionsResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.iam.v1.TestIamPermissionsResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$DescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$DescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$DescriptorProto$ExtensionRange", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$DescriptorProto$ExtensionRange$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$DescriptorProto$ReservedRange", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$DescriptorProto$ReservedRange$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$Edition", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumDescriptorProto$EnumReservedRange", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumDescriptorProto$EnumReservedRange$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumValueDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumValueDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumValueOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumValueOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ExtensionRangeOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ExtensionRangeOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ExtensionRangeOptions$Declaration", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ExtensionRangeOptions$Declaration$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ExtensionRangeOptions$VerificationState", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$EnforceNamingStyle", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$EnumType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$FieldPresence", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$JsonFormat", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$MessageEncoding", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$RepeatedFieldEncoding", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$Utf8Validation", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$VisibilityFeature$DefaultSymbolVisibility", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSetDefaults", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSetDefaults$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSetDefaults$FeatureSetEditionDefault", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSetDefaults$FeatureSetEditionDefault$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldDescriptorProto$Label", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldDescriptorProto$Type", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$CType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$EditionDefault", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$EditionDefault$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$FeatureSupport", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$FeatureSupport$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$JSType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$OptionRetention", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$OptionTargetType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileDescriptorSet", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileDescriptorSet$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileOptions$OptimizeMode", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$GeneratedCodeInfo", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$GeneratedCodeInfo$Annotation", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$GeneratedCodeInfo$Annotation$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$GeneratedCodeInfo$Annotation$Semantic", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$GeneratedCodeInfo$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MessageOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MessageOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MethodDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MethodDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MethodOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MethodOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MethodOptions$IdempotencyLevel", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$OneofDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$OneofDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$OneofOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$OneofOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ServiceDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ServiceDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ServiceOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ServiceOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$SourceCodeInfo", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$SourceCodeInfo$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$SourceCodeInfo$Location", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$SourceCodeInfo$Location$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$SymbolVisibility", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$UninterpretedOption", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$UninterpretedOption$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$UninterpretedOption$NamePart", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$UninterpretedOption$NamePart$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Duration", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Duration$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Empty", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Empty$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.FieldMask", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.FieldMask$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.ListValue", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.ListValue$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.NullValue", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Struct", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Struct$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Timestamp", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Timestamp$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Value", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Value$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.AIInference", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.AIInference$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.AIInference$UnstructuredInference", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.AIInference$UnstructuredInference$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.AcknowledgeRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.AcknowledgeRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.BigQueryConfig", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.BigQueryConfig$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.BigQueryConfig$State", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.BigtableConfig", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.BigtableConfig$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.BigtableConfig$State", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.CloudStorageConfig", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.CloudStorageConfig$AvroConfig", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.CloudStorageConfig$AvroConfig$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.CloudStorageConfig$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.CloudStorageConfig$State", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.CloudStorageConfig$TextConfig", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.CloudStorageConfig$TextConfig$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.CommitSchemaRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.CommitSchemaRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.CreateSchemaRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.CreateSchemaRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.CreateSnapshotRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.CreateSnapshotRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DeadLetterPolicy", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DeadLetterPolicy$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DeleteSchemaRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DeleteSchemaRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DeleteSchemaRevisionRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DeleteSchemaRevisionRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DeleteSnapshotRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DeleteSnapshotRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DeleteSubscriptionRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DeleteSubscriptionRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DeleteTopicRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DeleteTopicRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DetachSubscriptionRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DetachSubscriptionRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DetachSubscriptionResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.DetachSubscriptionResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Encoding", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ExpirationPolicy", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ExpirationPolicy$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.GetSchemaRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.GetSchemaRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.GetSnapshotRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.GetSnapshotRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.GetSubscriptionRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.GetSubscriptionRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.GetTopicRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.GetTopicRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$AwsKinesis", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$AwsKinesis$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$AwsKinesis$State", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$AwsMsk", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$AwsMsk$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$AwsMsk$State", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$AzureEventHubs", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$AzureEventHubs$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$AzureEventHubs$State", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$CloudStorage", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$CloudStorage$AvroFormat", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$CloudStorage$AvroFormat$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$CloudStorage$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$CloudStorage$PubSubAvroFormat", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$CloudStorage$PubSubAvroFormat$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$CloudStorage$State", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$CloudStorage$TextFormat", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$CloudStorage$TextFormat$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$ConfluentCloud", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$ConfluentCloud$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionDataSourceSettings$ConfluentCloud$State", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$ApiViolationReason", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$ApiViolationReason$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$AvroFailureReason", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$AvroFailureReason$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$AwsKinesisFailureReason", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$AwsKinesisFailureReason$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$AwsMskFailureReason", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$AwsMskFailureReason$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$AzureEventHubsFailureReason", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$AzureEventHubsFailureReason$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$CloudStorageFailure", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$CloudStorageFailure$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$ConfluentCloudFailureReason", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$ConfluentCloudFailureReason$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$MessageTransformationFailureReason", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$MessageTransformationFailureReason$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$SchemaViolationReason", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.IngestionFailureEvent$SchemaViolationReason$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.JavaScriptUDF", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.JavaScriptUDF$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSchemaRevisionsRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSchemaRevisionsRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSchemaRevisionsResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSchemaRevisionsResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSchemasRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSchemasRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSchemasResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSchemasResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSnapshotsRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSnapshotsRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSnapshotsResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSnapshotsResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSubscriptionsRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSubscriptionsRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSubscriptionsResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListSubscriptionsResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListTopicSnapshotsRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListTopicSnapshotsRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListTopicSnapshotsResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListTopicSnapshotsResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListTopicSubscriptionsRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListTopicSubscriptionsRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListTopicSubscriptionsResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListTopicSubscriptionsResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListTopicsRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListTopicsRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListTopicsResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ListTopicsResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.MessageStoragePolicy", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.MessageStoragePolicy$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.MessageTransform", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.MessageTransform$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ModifyAckDeadlineRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ModifyAckDeadlineRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ModifyPushConfigRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ModifyPushConfigRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PlatformLogsSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PlatformLogsSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PlatformLogsSettings$Severity", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PublishRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PublishRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PublishResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PublishResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PubsubMessage", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PubsubMessage$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PullRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PullRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PullResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PullResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PushConfig", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PushConfig$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PushConfig$NoWrapper", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PushConfig$NoWrapper$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PushConfig$OidcToken", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PushConfig$OidcToken$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PushConfig$PubsubWrapper", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.PushConfig$PubsubWrapper$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ReceivedMessage", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ReceivedMessage$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.RetryPolicy", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.RetryPolicy$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.RollbackSchemaRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.RollbackSchemaRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Schema", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Schema$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Schema$Type", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.SchemaSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.SchemaSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.SchemaView", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.SeekRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.SeekRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.SeekResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.SeekResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Snapshot", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Snapshot$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.StreamingPullRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.StreamingPullRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.StreamingPullResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.StreamingPullResponse$AcknowledgeConfirmation", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.StreamingPullResponse$AcknowledgeConfirmation$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.StreamingPullResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.StreamingPullResponse$ModifyAckDeadlineConfirmation", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.StreamingPullResponse$ModifyAckDeadlineConfirmation$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.StreamingPullResponse$SubscriptionProperties", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.StreamingPullResponse$SubscriptionProperties$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Subscription", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Subscription$AnalyticsHubSubscriptionInfo", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Subscription$AnalyticsHubSubscriptionInfo$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Subscription$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Subscription$State", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Topic", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Topic$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.Topic$State", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.UpdateSnapshotRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.UpdateSnapshotRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.UpdateSubscriptionRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.UpdateSubscriptionRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.UpdateTopicRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.UpdateTopicRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ValidateMessageRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ValidateMessageRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ValidateMessageResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ValidateMessageResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ValidateSchemaRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ValidateSchemaRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ValidateSchemaResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.pubsub.v1.ValidateSchemaResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.type.Expr", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.type.Expr$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] \ No newline at end of file diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/it/ITPubSubTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/it/ITPubSubTest.java new file mode 100644 index 000000000000..290b9927db20 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/it/ITPubSubTest.java @@ -0,0 +1,507 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.it; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assume.assumeTrue; + +import com.google.api.gax.rpc.PermissionDeniedException; +import com.google.auto.value.AutoValue; +import com.google.cloud.ServiceOptions; +import com.google.cloud.pubsub.v1.*; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.iam.v1.Binding; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.*; +import java.util.Collections; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Future; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; +import org.junit.*; +import org.junit.rules.Timeout; + +public class ITPubSubTest { + + private static final String NAME_SUFFIX = UUID.randomUUID().toString(); + private static TopicAdminClient topicAdminClient; + private static SubscriptionAdminClient subscriptionAdminClient; + private static String projectId; + private static final boolean IS_VPC_TEST = + System.getenv("GOOGLE_CLOUD_TESTS_IN_VPCSC") != null + && System.getenv("GOOGLE_CLOUD_TESTS_IN_VPCSC").equalsIgnoreCase("true"); + + private static final int MAX_INBOUND_MESSAGE_SIZE = 20 * 1024 * 1024; + + @Rule public Timeout globalTimeout = Timeout.seconds(300); + + @AutoValue + abstract static class MessageAndConsumer { + abstract PubsubMessage message(); + + abstract AckReplyConsumer consumer(); + + static MessageAndConsumer create(PubsubMessage message, AckReplyConsumer consumer) { + return new AutoValue_ITPubSubTest_MessageAndConsumer(message, consumer); + } + } + + @AutoValue + abstract static class MessageAndConsumerWithResponse { + abstract PubsubMessage message(); + + abstract AckReplyConsumerWithResponse consumerWithResponse(); + + static MessageAndConsumerWithResponse create( + PubsubMessage message, AckReplyConsumerWithResponse consumerWithResponse) { + return new AutoValue_ITPubSubTest_MessageAndConsumerWithResponse( + message, consumerWithResponse); + } + } + + @BeforeClass + public static void setupClass() throws Exception { + topicAdminClient = TopicAdminClient.create(); + subscriptionAdminClient = SubscriptionAdminClient.create(); + projectId = ServiceOptions.getDefaultProjectId(); + } + + @AfterClass + public static void tearDownClass() { + topicAdminClient.close(); + subscriptionAdminClient.close(); + } + + private String formatForTest(String resourceName) { + return resourceName + "-" + NAME_SUFFIX; + } + + private Subscription getSubscription( + SubscriptionName subscriptionName, + TopicName topicName, + PushConfig pushConfig, + int ackDeadline, + boolean enableExactlyOnceDelivery) { + return Subscription.newBuilder() + .setName(subscriptionName.toString()) + .setTopic(topicName.toString()) + .setPushConfig(pushConfig) + .setAckDeadlineSeconds(ackDeadline) + .setEnableExactlyOnceDelivery(enableExactlyOnceDelivery) + .build(); + } + + @Test + public void testTopicPolicy() { + TopicName topicName = + TopicName.newBuilder() + .setProject(projectId) + .setTopic(formatForTest("testing-topic-policy")) + .build(); + topicAdminClient.createTopic(topicName); + + Policy policy = + topicAdminClient.getIamPolicy( + GetIamPolicyRequest.newBuilder().setResource(topicName.toString()).build()); + Binding binding = + Binding.newBuilder().setRole("roles/viewer").addMembers("allAuthenticatedUsers").build(); + + Policy newPolicy = + topicAdminClient.setIamPolicy( + SetIamPolicyRequest.newBuilder() + .setResource(topicName.toString()) + .setPolicy(policy.toBuilder().addBindings(binding).build()) + .build()); + assertThat(newPolicy.getBindingsList()).contains(binding); + + String permissionName = "pubsub.topics.get"; + List permissions = + topicAdminClient + .testIamPermissions( + TestIamPermissionsRequest.newBuilder() + .setResource(topicName.toString()) + .addAllPermissions(Collections.singletonList(permissionName)) + .build()) + .getPermissionsList(); + assertThat(permissions).contains(permissionName); + + topicAdminClient.deleteTopic(topicName); + } + + @Test + public void testVPCPushSubscriber() { + assumeTrue(IS_VPC_TEST); + TopicName topicName = + TopicName.newBuilder() + .setProject(projectId) + .setTopic(formatForTest("testing-vpc-push-subscriber-topic")) + .build(); + SubscriptionName subscriptionName = + SubscriptionName.of(projectId, formatForTest("testing-vpc-push-subscriber-subscription")); + topicAdminClient.createTopic(topicName); + + try { + subscriptionAdminClient.createSubscription( + getSubscription( + subscriptionName, + topicName, + PushConfig.newBuilder().setPushEndpoint("https://random_point").build(), + 10, + false)); + subscriptionAdminClient.deleteSubscription(subscriptionName); + Assert.fail("No exception raised"); + } catch (PermissionDeniedException e) { + // expected + } + + topicAdminClient.deleteTopic(topicName); + } + + @Test + public void testPublishSubscribe() throws Exception { + TopicName topicName = + TopicName.newBuilder() + .setProject(projectId) + .setTopic(formatForTest("testing-publish-subscribe-topic")) + .build(); + SubscriptionName subscriptionName = + SubscriptionName.of(projectId, formatForTest("testing-publish-subscribe-subscription")); + + topicAdminClient.createTopic(topicName); + + subscriptionAdminClient.createSubscription( + getSubscription(subscriptionName, topicName, PushConfig.newBuilder().build(), 10, false)); + + final BlockingQueue receiveQueue = new LinkedBlockingQueue<>(); + Subscriber subscriber = + Subscriber.newBuilder( + subscriptionName.toString(), + new MessageReceiver() { + @Override + public void receiveMessage( + final PubsubMessage message, final AckReplyConsumer consumer) { + receiveQueue.offer(MessageAndConsumer.create(message, consumer)); + } + }) + .build(); + subscriber.addListener( + new Subscriber.Listener() { + public void failed(Subscriber.State from, Throwable failure) { + receiveQueue.offer(failure); + } + }, + MoreExecutors.directExecutor()); + subscriber.startAsync(); + + Publisher publisher = Publisher.newBuilder(topicName).build(); + publisher + .publish(PubsubMessage.newBuilder().setData(ByteString.copyFromUtf8("msg1")).build()) + .get(); + publisher + .publish(PubsubMessage.newBuilder().setData(ByteString.copyFromUtf8("msg2")).build()) + .get(); + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + + MessageAndConsumer toAck = pollQueueMessageAndConsumer(receiveQueue); + // Ack the first message. + toAck.consumer().ack(); + + MessageAndConsumer toNack = pollQueueMessageAndConsumer(receiveQueue); + // Because we are not using ordering keys, we have to compare the received messages to each + // other + assertNotEquals(toNack.message().getData(), toAck.message().getData()); + // Nack + toNack.consumer().nack(); + + // We should get the nacked message back. + MessageAndConsumer redeliveredToAck = pollQueueMessageAndConsumer(receiveQueue); + assertEquals(toNack.message().getData(), redeliveredToAck.message().getData()); + redeliveredToAck.consumer().ack(); + + subscriber.stopAsync().awaitTerminated(); + subscriptionAdminClient.deleteSubscription(subscriptionName); + topicAdminClient.deleteTopic(topicName); + } + + @Test + public void testPublishSubscribeMessageFutures() throws Exception { + TopicName topicName = + TopicName.newBuilder() + .setProject(projectId) + .setTopic(formatForTest("testing-publish-subscribe-message-futures")) + .build(); + SubscriptionName subscriptionName = + SubscriptionName.of(projectId, formatForTest("testing-publish-subscribe-message-futures")); + + topicAdminClient.createTopic(topicName); + subscriptionAdminClient.createSubscription( + getSubscription(subscriptionName, topicName, PushConfig.newBuilder().build(), 10, false)); + + final BlockingQueue receiveQueue = new LinkedBlockingQueue<>(); + Subscriber subscriber = + Subscriber.newBuilder( + subscriptionName.toString(), + new MessageReceiverWithAckResponse() { + @Override + public void receiveMessage( + final PubsubMessage message, + final AckReplyConsumerWithResponse consumerWithResponse) { + receiveQueue.offer( + MessageAndConsumerWithResponse.create(message, consumerWithResponse)); + } + }) + .setChannelProvider( + SubscriptionAdminSettings.defaultGrpcTransportProviderBuilder() + .setMaxInboundMessageSize(MAX_INBOUND_MESSAGE_SIZE) + .build()) + .build(); + subscriber.addListener( + new Subscriber.Listener() { + public void failed(Subscriber.State from, Throwable failure) { + receiveQueue.offer(failure); + } + }, + MoreExecutors.directExecutor()); + subscriber.startAsync(); + + Publisher publisher = Publisher.newBuilder(topicName).build(); + publisher + .publish(PubsubMessage.newBuilder().setData(ByteString.copyFromUtf8("msg1")).build()) + .get(); + publisher + .publish(PubsubMessage.newBuilder().setData(ByteString.copyFromUtf8("msg2")).build()) + .get(); + + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + + // Ack the first message. + MessageAndConsumerWithResponse toAck = pollQueueMessageAndConsumerWithResponse(receiveQueue); + Future ackResponseFuture = toAck.consumerWithResponse().ack(); + assertEquals(AckResponse.SUCCESSFUL, ackResponseFuture.get()); + + MessageAndConsumerWithResponse toNack = pollQueueMessageAndConsumerWithResponse(receiveQueue); + // Because we are not using ordering keys, we have to compare the received messages to each + // other + assertNotEquals(toNack.message().getData(), toAck.message().getData()); + Future nackResponseFuture = toNack.consumerWithResponse().nack(); + assertEquals(AckResponse.SUCCESSFUL, nackResponseFuture.get()); + + MessageAndConsumerWithResponse redeliveredToAck = + pollQueueMessageAndConsumerWithResponse(receiveQueue); + Future redeliveredToAckResponse = redeliveredToAck.consumerWithResponse().ack(); + + assertEquals(toNack.message().getData(), redeliveredToAck.message().getData()); + assertEquals(AckResponse.SUCCESSFUL, redeliveredToAckResponse.get()); + + subscriber.stopAsync().awaitTerminated(); + subscriptionAdminClient.deleteSubscription(subscriptionName); + topicAdminClient.deleteTopic(topicName); + } + + @Test + public void testPublishSubscribeExactlyOnce() throws Exception { + TopicName topicName = + TopicName.newBuilder() + .setProject(projectId) + .setTopic(formatForTest("testing-publish-subscribe-exactly-once-topic")) + .build(); + SubscriptionName subscriptionName = + SubscriptionName.of( + projectId, formatForTest("testing-publish-subscribe-exactly-once-subscription")); + + topicAdminClient.createTopic(topicName); + subscriptionAdminClient.createSubscription( + getSubscription(subscriptionName, topicName, PushConfig.newBuilder().build(), 60, true)); + + final BlockingQueue receiveQueue = new LinkedBlockingQueue<>(); + Subscriber subscriber = + Subscriber.newBuilder( + subscriptionName.toString(), + new MessageReceiverWithAckResponse() { + @Override + public void receiveMessage( + final PubsubMessage message, + final AckReplyConsumerWithResponse consumerWithResponse) { + receiveQueue.offer( + MessageAndConsumerWithResponse.create(message, consumerWithResponse)); + } + }) + .setChannelProvider( + SubscriptionAdminSettings.defaultGrpcTransportProviderBuilder() + .setMaxInboundMessageSize(MAX_INBOUND_MESSAGE_SIZE) + .build()) + .build(); + subscriber.addListener( + new Subscriber.Listener() { + public void failed(Subscriber.State from, Throwable failure) { + receiveQueue.offer(failure); + } + }, + MoreExecutors.directExecutor()); + subscriber.startAsync(); + + Publisher publisher = Publisher.newBuilder(topicName).build(); + publisher + .publish(PubsubMessage.newBuilder().setData(ByteString.copyFromUtf8("msg1")).build()) + .get(); + publisher + .publish(PubsubMessage.newBuilder().setData(ByteString.copyFromUtf8("msg2")).build()) + .get(); + + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + + // Ack the first message. + MessageAndConsumerWithResponse toAck = pollQueueMessageAndConsumerWithResponse(receiveQueue); + Future ackResponseFuture = toAck.consumerWithResponse().ack(); + assertEquals(AckResponse.SUCCESSFUL, ackResponseFuture.get()); + + MessageAndConsumerWithResponse toNack = pollQueueMessageAndConsumerWithResponse(receiveQueue); + // Because we are not using ordering keys, we have to compare the received messages to each + // other + assertNotEquals(toNack.message().getData(), toAck.message().getData()); + Future nackResponseFuture = toNack.consumerWithResponse().nack(); + assertEquals(AckResponse.SUCCESSFUL, nackResponseFuture.get()); + + MessageAndConsumerWithResponse redeliveredToAck = + pollQueueMessageAndConsumerWithResponse(receiveQueue); + Future redeliveredToAckResponse = redeliveredToAck.consumerWithResponse().ack(); + + assertEquals(toNack.message().getData(), redeliveredToAck.message().getData()); + assertEquals(AckResponse.SUCCESSFUL, redeliveredToAckResponse.get()); + + subscriber.stopAsync().awaitTerminated(); + subscriptionAdminClient.deleteSubscription(subscriptionName); + topicAdminClient.deleteTopic(topicName); + } + + @Test + public void testPublishSubscribeWithCompression() throws Exception { + TopicName topicName = + TopicName.newBuilder() + .setProject(projectId) + .setTopic(formatForTest("testing-compression-topic")) + .build(); + SubscriptionName subscriptionName = + SubscriptionName.of(projectId, formatForTest("testing-compression-subscription")); + + topicAdminClient.createTopic(topicName); + + subscriptionAdminClient.createSubscription( + getSubscription(subscriptionName, topicName, PushConfig.newBuilder().build(), 10, false)); + + final BlockingQueue receiveQueue = new LinkedBlockingQueue<>(); + Subscriber subscriber = + Subscriber.newBuilder( + subscriptionName.toString(), + new MessageReceiver() { + @Override + public void receiveMessage( + final PubsubMessage message, final AckReplyConsumer consumer) { + receiveQueue.offer(MessageAndConsumer.create(message, consumer)); + } + }) + .build(); + subscriber.addListener( + new Subscriber.Listener() { + public void failed(Subscriber.State from, Throwable failure) { + receiveQueue.offer(failure); + } + }, + MoreExecutors.directExecutor()); + subscriber.startAsync(); + + Publisher publisher = Publisher.newBuilder(topicName).setEnableCompression(true).build(); + + String msg1 = generateMessage("msg1", 1000); + String msg2 = generateMessage("msg2", 1500); + publisher + .publish(PubsubMessage.newBuilder().setData(ByteString.copyFromUtf8(msg1)).build()) + .get(); + publisher + .publish(PubsubMessage.newBuilder().setData(ByteString.copyFromUtf8(msg2)).build()) + .get(); + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + + // Ack the first message. + MessageAndConsumer toAck1 = pollQueueMessageAndConsumer(receiveQueue); + toAck1.consumer().ack(); + + // Ack the second message. + MessageAndConsumer toAck2 = pollQueueMessageAndConsumer(receiveQueue); + toAck2.consumer().ack(); + + assertNotEquals(toAck1.message().getData(), toAck2.message().getData()); + + subscriber.stopAsync().awaitTerminated(); + subscriptionAdminClient.deleteSubscription(subscriptionName); + topicAdminClient.deleteTopic(topicName); + } + + private MessageAndConsumer pollQueueMessageAndConsumer(BlockingQueue queue) + throws InterruptedException { + Object obj = pollQueue(queue); + if (obj instanceof MessageAndConsumer) { + return (MessageAndConsumer) obj; + } + throw new IllegalStateException( + "expected either MessageAndConsumer or Throwable, found: " + obj); + } + + private MessageAndConsumerWithResponse pollQueueMessageAndConsumerWithResponse( + BlockingQueue queue) throws InterruptedException { + Object obj = pollQueue(queue); + if (obj instanceof MessageAndConsumerWithResponse) { + return (MessageAndConsumerWithResponse) obj; + } + throw new IllegalStateException( + "expected either MessageAndConsumerWithResponse or Throwable, found: " + obj); + } + + private Object pollQueue(BlockingQueue queue) throws InterruptedException { + Object obj = queue.poll(10, TimeUnit.MINUTES); + if (obj == null) { + return null; + } + if (obj instanceof Throwable) { + throw new IllegalStateException("unexpected error", (Throwable) obj); + } + + return obj; + } + + /** Generates message of given bytes by repeatedly concatenating a token. */ + private String generateMessage(String token, int bytes) { + String result = ""; + int tokenBytes = token.length(); + for (int i = 0; i < Math.floor(bytes / tokenBytes) + 1; i++) { + result = result.concat(token); + } + return result; + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/CustomArgumentMatchers.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/CustomArgumentMatchers.java new file mode 100644 index 000000000000..a98e5c4e1f75 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/CustomArgumentMatchers.java @@ -0,0 +1,208 @@ +/* + * Copyright 2022 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.ModifyAckDeadlineRequest; +import java.util.*; +import org.mockito.ArgumentMatcher; + +/** Shared Custom Argument Matchers for Tests w/ Mock Futures */ +public class CustomArgumentMatchers { + public static class AcknowledgeRequestMatcher implements ArgumentMatcher { + private AcknowledgeRequest left; + + AcknowledgeRequestMatcher(AcknowledgeRequest acknowledgeRequest) { + this.left = acknowledgeRequest; + } + + @Override + public boolean matches(AcknowledgeRequest right) { + Set leftAckIdSet = new HashSet(this.left.getAckIdsList()); + Set rightAckIdSet = new HashSet(right.getAckIdsList()); + return this.left.getSubscription().equals(right.getSubscription()) + && leftAckIdSet.equals(rightAckIdSet); + } + } + + public static class ModifyAckDeadlineRequestMatcher + implements ArgumentMatcher { + private ModifyAckDeadlineRequest left; + + ModifyAckDeadlineRequestMatcher(ModifyAckDeadlineRequest modifyAckDeadlineRequest) { + this.left = modifyAckDeadlineRequest; + } + + @Override + public boolean matches(ModifyAckDeadlineRequest right) { + Set leftAckIdSet = new HashSet(this.left.getAckIdsList()); + Set rightAckIdSet = new HashSet(right.getAckIdsList()); + return this.left.getSubscription().equals(right.getSubscription()) + && this.left.getAckDeadlineSeconds() == right.getAckDeadlineSeconds() + && leftAckIdSet.equals(rightAckIdSet); + } + } + + public static class AckRequestDataMatcher implements ArgumentMatcher { + private AckRequestData left; + + private static Comparator comparator = + new Comparator() { + + @Override + public int compare(AckRequestData ackRequestData, AckRequestData t1) { + return ackRequestData.getAckId().compareTo(t1.getAckId()); + } + }; + + AckRequestDataMatcher(AckRequestData left) { + this.left = left; + } + + @Override + public boolean matches(AckRequestData right) { + return this.left.getAckId() == right.getAckId(); + } + } + + public static class AckRequestDataListMatcher implements ArgumentMatcher> { + private List left; + + AckRequestDataListMatcher(List ackRequestDataList) { + this.left = ackRequestDataList; + } + + @Override + public boolean matches(List right) { + // We only really care about the ackIds, the futures will be mocked + if (this.left.size() != right.size()) { + return false; + } + + // We just want to compare the ackIds not the futures and do not care about order (or + // duplicates) + this.left.sort(AckRequestDataMatcher.comparator); + right.sort(AckRequestDataMatcher.comparator); + + Iterator iteratorLeft = this.left.iterator(); + Iterator iteratorRight = right.iterator(); + + while (iteratorLeft.hasNext() && iteratorRight.hasNext()) { + if (iteratorLeft.next().getAckId() != iteratorRight.next().getAckId()) { + return false; + } + } + return true; + } + } + + public static class ModackRequestDataMatcher implements ArgumentMatcher { + private ModackRequestData left; + + private static Comparator comparator = + new Comparator() { + + @Override + public int compare(ModackRequestData left, ModackRequestData right) { + // Compare deadline extensions first + int deadlineExtensionDifference = + left.getDeadlineExtensionSeconds() - right.getDeadlineExtensionSeconds(); + if (deadlineExtensionDifference != 0) { + return deadlineExtensionDifference; + } + + // Then sort and compare ackIds + List ackRequestDataListLeft = left.getAckRequestData(); + List ackRequestDataListRight = right.getAckRequestData(); + + ackRequestDataListLeft.sort(AckRequestDataMatcher.comparator); + ackRequestDataListRight.sort(AckRequestDataMatcher.comparator); + + Iterator iteratorLeft = ackRequestDataListLeft.iterator(); + Iterator iteratorRight = ackRequestDataListRight.iterator(); + int compareAcks; + + while (iteratorLeft.hasNext() && iteratorRight.hasNext()) { + String ackIdLeft = iteratorLeft.next().getAckId(); + String ackIdRight = iteratorRight.next().getAckId(); + compareAcks = ackIdLeft.compareTo(ackIdRight); + + if (compareAcks != 0) { + return compareAcks; + } + } + + if (iteratorLeft.hasNext()) { + return 1; + } + if (iteratorRight.hasNext()) { + return -1; + } else { + return 0; + } + } + }; + + ModackRequestDataMatcher(ModackRequestData left) { + this.left = left; + } + + @Override + public boolean matches(ModackRequestData right) { + return ModackRequestDataMatcher.comparator.compare(this.left, right) == 0; + } + } + + public static class ModackRequestDataListMatcher + implements ArgumentMatcher> { + private List left; + + ModackRequestDataListMatcher(List modackRequestDataList) { + this.left = modackRequestDataList; + } + + @Override + public boolean matches(List right) { + // First check size + if (this.left.size() != right.size()) { + return false; + } + + // Sort first + this.left.sort(ModackRequestDataMatcher.comparator); + right.sort(ModackRequestDataMatcher.comparator); + + Iterator iteratorLeft = this.left.iterator(); + Iterator iteratorRight = right.iterator(); + + ModackRequestData modackRequestDataLeft; + ModackRequestData modackRequestDataRight; + + while (iteratorLeft.hasNext() && iteratorRight.hasNext()) { + + ModackRequestDataMatcher modackRequestDataMatcher = + new ModackRequestDataMatcher(iteratorLeft.next()); + + if (!modackRequestDataMatcher.matches(iteratorRight.next())) { + return false; + } + } + + return true; + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakeClock.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakeClock.java new file mode 100644 index 000000000000..278ef589b2c5 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakeClock.java @@ -0,0 +1,42 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.ApiClock; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +/** A Clock to help with testing time-based logic. */ +public class FakeClock implements ApiClock { + + private final AtomicLong millis = new AtomicLong(); + + // Advances the clock value by {@code time} in {@code timeUnit}. + public void advance(long time, TimeUnit timeUnit) { + millis.addAndGet(timeUnit.toMillis(time)); + } + + @Override + public long nanoTime() { + return millisTime() * 1000_000L; + } + + @Override + public long millisTime() { + return millis.get(); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakePublisherServiceImpl.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakePublisherServiceImpl.java new file mode 100644 index 000000000000..9ab1dec73471 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakePublisherServiceImpl.java @@ -0,0 +1,163 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.common.base.Optional; +import com.google.pubsub.v1.PublishRequest; +import com.google.pubsub.v1.PublishResponse; +import com.google.pubsub.v1.PublisherGrpc.PublisherImplBase; +import io.grpc.stub.StreamObserver; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * A fake implementation of {@link PublisherImplBase}, that can be used to test clients of a Cloud + * Pub/Sub Publisher. + */ +class FakePublisherServiceImpl extends PublisherImplBase { + + private final LinkedBlockingQueue requests = new LinkedBlockingQueue<>(); + private final LinkedBlockingQueue publishResponses = new LinkedBlockingQueue<>(); + private final AtomicInteger nextMessageId = new AtomicInteger(1); + private boolean autoPublishResponse; + private ScheduledExecutorService executor = null; + private Duration responseDelay = Duration.ZERO; + + /** Class used to save the state of a possible response. */ + private static class Response { + Optional publishResponse; + Optional error; + + public Response(PublishResponse publishResponse) { + this.publishResponse = Optional.of(publishResponse); + this.error = Optional.absent(); + } + + public Response(Throwable exception) { + this.publishResponse = Optional.absent(); + this.error = Optional.of(exception); + } + + public PublishResponse getPublishResponse() { + return publishResponse.get(); + } + + public Throwable getError() { + return error.get(); + } + + boolean isError() { + return error.isPresent(); + } + + @Override + public String toString() { + if (isError()) { + return error.get().toString(); + } + return publishResponse.get().toString(); + } + } + + @Override + public void publish( + PublishRequest request, final StreamObserver responseObserver) { + requests.add(request); + Response response; + try { + if (autoPublishResponse) { + PublishResponse.Builder builder = PublishResponse.newBuilder(); + for (int i = 0; i < request.getMessagesCount(); i++) { + builder.addMessageIds(Integer.toString(nextMessageId.getAndIncrement())); + } + response = new Response(builder.build()); + } else { + response = publishResponses.take(); + } + } catch (InterruptedException e) { + throw new IllegalArgumentException(e); + } + if (responseDelay == Duration.ZERO) { + sendResponse(response, responseObserver); + } else { + final Response responseToSend = response; + executor.schedule( + new Runnable() { + @Override + public void run() { + sendResponse(responseToSend, responseObserver); + } + }, + responseDelay.toMillis(), + TimeUnit.MILLISECONDS); + } + } + + private void sendResponse(Response response, StreamObserver responseObserver) { + if (response.isError()) { + responseObserver.onError(response.getError()); + } else { + responseObserver.onNext(response.getPublishResponse()); + responseObserver.onCompleted(); + } + } + + /** + * If enabled, PublishResponse is generated with a unique message id automatically when publish() + * is called. + */ + public FakePublisherServiceImpl setAutoPublishResponse(boolean autoPublishResponse) { + this.autoPublishResponse = autoPublishResponse; + return this; + } + + /** Set an executor to use to delay publish responses. */ + public FakePublisherServiceImpl setExecutor(ScheduledExecutorService executor) { + this.executor = executor; + return this; + } + + /** Set an amount of time by which to delay publish responses. */ + public FakePublisherServiceImpl setPublishResponseDelay(Duration responseDelay) { + this.responseDelay = responseDelay; + return this; + } + + public FakePublisherServiceImpl addPublishResponse(PublishResponse publishResponse) { + publishResponses.add(new Response(publishResponse)); + return this; + } + + public FakePublisherServiceImpl addPublishResponse( + PublishResponse.Builder publishResponseBuilder) { + return addPublishResponse(publishResponseBuilder.build()); + } + + public FakePublisherServiceImpl addPublishError(Throwable error) { + publishResponses.add(new Response(error)); + return this; + } + + public List getCapturedRequests() { + return new ArrayList(requests); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakeScheduledExecutorService.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakeScheduledExecutorService.java new file mode 100644 index 000000000000..b17eaddb01cf --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakeScheduledExecutorService.java @@ -0,0 +1,336 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.common.primitives.Ints; +import com.google.common.util.concurrent.SettableFuture; +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Deque; +import java.util.LinkedList; +import java.util.List; +import java.util.PriorityQueue; +import java.util.concurrent.AbstractExecutorService; +import java.util.concurrent.Callable; +import java.util.concurrent.Delayed; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Fake implementation of {@link ScheduledExecutorService} that allows tests control the reference + * time of the executor and decide when to execute any outstanding task. + */ +public class FakeScheduledExecutorService extends AbstractExecutorService + implements ScheduledExecutorService { + + private final AtomicBoolean shutdown = new AtomicBoolean(false); + private final PriorityQueue> pendingCallables = new PriorityQueue<>(); + private final FakeClock clock = new FakeClock(); + private final Deque expectedWorkQueue = new LinkedList<>(); + + public FakeClock getClock() { + return clock; + } + + @Override + public ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) { + return schedulePendingCallable( + new PendingCallable<>( + Duration.ofMillis(unit.toMillis(delay)), command, null, PendingCallableType.NORMAL)); + } + + @Override + public ScheduledFuture schedule(Callable callable, long delay, TimeUnit unit) { + return schedulePendingCallable( + new PendingCallable<>( + Duration.ofMillis(unit.toMillis(delay)), callable, null, PendingCallableType.NORMAL)); + } + + @Override + public ScheduledFuture scheduleAtFixedRate( + Runnable command, long initialDelay, long period, TimeUnit unit) { + return schedulePendingCallable( + new PendingCallable<>( + Duration.ofMillis(unit.toMillis(initialDelay)), + command, + Duration.ofMillis(unit.toMillis(period)), + PendingCallableType.FIXED_RATE)); + } + + @Override + public ScheduledFuture scheduleWithFixedDelay( + Runnable command, long initialDelay, long delay, TimeUnit unit) { + return schedulePendingCallable( + new PendingCallable<>( + Duration.ofMillis(unit.toMillis(initialDelay)), + command, + Duration.ofMillis(unit.toMillis(delay)), + PendingCallableType.FIXED_DELAY)); + } + + /** + * This will advance the reference time of the executor and execute (in the same thread) any + * outstanding callable which execution time has passed. + */ + public void advanceTime(Duration toAdvance) { + clock.advance(toAdvance.toMillis(), TimeUnit.MILLISECONDS); + work(); + } + + private void work() { + Instant cmpTime = Instant.ofEpochMilli(clock.millisTime()); + + for (; ; ) { + PendingCallable callable = null; + synchronized (pendingCallables) { + if (pendingCallables.isEmpty() + || pendingCallables.peek().getScheduledTime().isAfter(cmpTime)) { + break; + } + callable = pendingCallables.poll(); + } + if (callable != null) { + try { + callable.call(); + } catch (Exception e) { + // We ignore any callable exception, which should be set to the future but not relevant to + // advanceTime. + } + } + } + + synchronized (pendingCallables) { + if (shutdown.get() && pendingCallables.isEmpty()) { + pendingCallables.notifyAll(); + } + } + } + + @Override + public void shutdown() { + if (shutdown.getAndSet(true)) { + throw new IllegalStateException("This executor has been shutdown already"); + } + } + + @Override + public List shutdownNow() { + if (shutdown.getAndSet(true)) { + throw new IllegalStateException("This executor has been shutdown already"); + } + List pending = new ArrayList<>(); + for (final PendingCallable pendingCallable : pendingCallables) { + pending.add( + new Runnable() { + @Override + public void run() { + pendingCallable.call(); + } + }); + } + synchronized (pendingCallables) { + pendingCallables.notifyAll(); + pendingCallables.clear(); + } + return pending; + } + + @Override + public boolean isShutdown() { + return shutdown.get(); + } + + @Override + public boolean isTerminated() { + return pendingCallables.isEmpty(); + } + + @Override + public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { + synchronized (pendingCallables) { + if (pendingCallables.isEmpty()) { + return true; + } + pendingCallables.wait(unit.toMillis(timeout)); + return pendingCallables.isEmpty(); + } + } + + @Override + public void execute(Runnable command) { + if (shutdown.get()) { + throw new IllegalStateException("This executor has been shutdown"); + } + command.run(); + } + + ScheduledFuture schedulePendingCallable(PendingCallable callable) { + if (shutdown.get()) { + throw new IllegalStateException("This executor has been shutdown"); + } + synchronized (pendingCallables) { + pendingCallables.add(callable); + } + work(); + synchronized (expectedWorkQueue) { + // We compare by the callable delay in order decide when to remove expectations from the + // expected work queue, i.e. only the expected work that matches the delay of the scheduled + // callable is removed from the queue. + if (!expectedWorkQueue.isEmpty() && expectedWorkQueue.peek().equals(callable.delay)) { + expectedWorkQueue.poll(); + } + expectedWorkQueue.notifyAll(); + } + + return callable.getScheduledFuture(); + } + + enum PendingCallableType { + NORMAL, + FIXED_RATE, + FIXED_DELAY + } + + /** Class that saves the state of an scheduled pending callable. */ + class PendingCallable implements Comparable> { + Instant creationTime = Instant.ofEpochMilli(clock.millisTime()); + Duration delay; + Duration period; + Callable pendingCallable; + SettableFuture future = SettableFuture.create(); + AtomicBoolean cancelled = new AtomicBoolean(false); + AtomicBoolean done = new AtomicBoolean(false); + PendingCallableType type; + + PendingCallable( + Duration delay, final Runnable runnable, Duration period, PendingCallableType type) { + pendingCallable = + new Callable() { + @Override + public T call() { + runnable.run(); + return null; + } + }; + this.type = type; + this.delay = delay; + this.period = period; + } + + PendingCallable( + Duration delay, Callable callable, Duration period, PendingCallableType type) { + pendingCallable = callable; + this.type = type; + this.delay = delay; + this.period = period; + } + + private Instant getScheduledTime() { + return creationTime.plus(delay); + } + + ScheduledFuture getScheduledFuture() { + return new ScheduledFuture() { + @Override + public long getDelay(TimeUnit unit) { + return unit.convert( + getScheduledTime().toEpochMilli() - clock.millisTime(), TimeUnit.MILLISECONDS); + } + + @Override + public int compareTo(Delayed o) { + return Ints.saturatedCast( + getDelay(TimeUnit.MILLISECONDS) - o.getDelay(TimeUnit.MILLISECONDS)); + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + synchronized (this) { + future.cancel(mayInterruptIfRunning); + cancelled.set(true); + return !done.get(); + } + } + + @Override + public boolean isCancelled() { + return cancelled.get(); + } + + @Override + public boolean isDone() { + return done.get(); + } + + @Override + public T get() throws InterruptedException, ExecutionException { + return future.get(); + } + + @Override + public T get(long timeout, TimeUnit unit) + throws InterruptedException, ExecutionException, TimeoutException { + return future.get(timeout, unit); + } + }; + } + + T call() { + T result = null; + synchronized (this) { + if (cancelled.get()) { + return null; + } + try { + result = pendingCallable.call(); + future.set(result); + } catch (Exception e) { + future.setException(e); + } finally { + switch (type) { + case NORMAL: + done.set(true); + break; + case FIXED_DELAY: + this.creationTime = Instant.ofEpochMilli(clock.millisTime()); + this.delay = period; + schedulePendingCallable(this); + break; + case FIXED_RATE: + this.creationTime = this.creationTime.plus(delay); + this.delay = period; + schedulePendingCallable(this); + break; + default: + // Nothing to do + } + } + } + return result; + } + + @Override + public int compareTo(PendingCallable other) { + return getScheduledTime().compareTo(other.getScheduledTime()); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakeSubscriberServiceImpl.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakeSubscriberServiceImpl.java new file mode 100644 index 000000000000..3b2bd2f5d89a --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/FakeSubscriberServiceImpl.java @@ -0,0 +1,366 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.client.util.Preconditions; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.GetSubscriptionRequest; +import com.google.pubsub.v1.ModifyAckDeadlineRequest; +import com.google.pubsub.v1.PublisherGrpc.PublisherImplBase; +import com.google.pubsub.v1.PullRequest; +import com.google.pubsub.v1.PullResponse; +import com.google.pubsub.v1.ReceivedMessage; +import com.google.pubsub.v1.StreamingPullRequest; +import com.google.pubsub.v1.StreamingPullResponse; +import com.google.pubsub.v1.SubscriberGrpc.SubscriberImplBase; +import com.google.pubsub.v1.Subscription; +import io.grpc.Status; +import io.grpc.Status.Code; +import io.grpc.StatusException; +import io.grpc.stub.StreamObserver; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * A fake implementation of {@link PublisherImplBase}, that can be used to test clients of a Cloud + * Pub/Sub Publisher. + */ +class FakeSubscriberServiceImpl extends SubscriberImplBase { + private final AtomicBoolean subscriptionInitialized = new AtomicBoolean(false); + private String subscription = ""; + private final AtomicInteger messageAckDeadline = + new AtomicInteger(Math.toIntExact(Subscriber.STREAM_ACK_DEADLINE_DEFAULT.getSeconds())); + private final AtomicInteger getSubscriptionCalled = new AtomicInteger(); + private StreamingPullRequest lastSeenRequest; + private final List openedStreams = new ArrayList<>(); + private final List closedStreams = new ArrayList<>(); + private final List acks = new ArrayList<>(); + private final List modAckDeadlines = new ArrayList<>(); + private final List receivedPullRequest = new ArrayList<>(); + private final BlockingQueue pullResponses = new LinkedBlockingDeque<>(); + private int currentStream; + + public enum CloseSide { + SERVER, + CLIENT + } + + public static final class ModifyAckDeadline { + private final String ackId; + private final long seconds; + + public ModifyAckDeadline(String ackId, long seconds) { + Preconditions.checkNotNull(ackId); + this.ackId = ackId; + this.seconds = seconds; + } + + public long getSeconds() { + return seconds; + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof ModifyAckDeadline)) { + return false; + } + ModifyAckDeadline other = (ModifyAckDeadline) obj; + return other.ackId.equals(this.ackId) && other.seconds == this.seconds; + } + + @Override + public int hashCode() { + return ackId.hashCode(); + } + + @Override + public String toString() { + return "Ack ID: " + ackId + ", deadline seconds: " + seconds; + } + } + + private static class Stream { + private StreamObserver requestObserver; + private StreamObserver responseObserver; + } + + private class StreamingPullRequestObserver implements StreamObserver { + private final Stream stream; + private final StreamObserver responseObserver; + + StreamingPullRequestObserver( + Stream stream, StreamObserver responseObserver) { + this.stream = stream; + this.responseObserver = responseObserver; + } + + @Override + public void onNext(StreamingPullRequest request) { + synchronized (stream) { + if (!request.getSubscription().isEmpty()) { + if (!subscription.isEmpty() && !subscription.equals(request.getSubscription())) { + responseObserver.onError( + new StatusException( + Status.fromCode(Code.ABORTED) + .withDescription("Can only set one subscription."))); + return; + } + + synchronized (subscriptionInitialized) { + if (subscription.isEmpty()) { + if (request.getStreamAckDeadlineSeconds() == 0) { + responseObserver.onError( + new StatusException( + Status.fromCode(Code.INVALID_ARGUMENT) + .withDescription("A stream must be initialized with a ack deadline."))); + } + + subscription = request.getSubscription(); + subscriptionInitialized.set(true); + subscriptionInitialized.notifyAll(); + } + } + setLastSeenRequest(request); + addOpenedStream(stream); + stream.notifyAll(); + } + + if (request.getStreamAckDeadlineSeconds() > 0) { + synchronized (messageAckDeadline) { + messageAckDeadline.set(request.getStreamAckDeadlineSeconds()); + messageAckDeadline.notifyAll(); + } + } + if (subscription.isEmpty()) { + closeStream(stream); + responseObserver.onError( + new StatusException( + Status.fromCode(Code.ABORTED) + .withDescription( + "The stream has not been properly initialized with a " + + "subscription."))); + return; + } + if (request.getAckIdsCount() > 0) { + addReceivedAcks(request.getAckIdsList()); + } + if (request.getModifyDeadlineAckIdsCount() > 0) { + if (request.getModifyDeadlineAckIdsCount() != request.getModifyDeadlineSecondsCount()) { + closeStream(stream); + responseObserver.onError( + new StatusException( + Status.fromCode(Code.ABORTED) + .withDescription("Invalid modify ack deadline request."))); + return; + } + Iterator ackIds = request.getModifyDeadlineAckIdsList().iterator(); + Iterator seconds = request.getModifyDeadlineSecondsList().iterator(); + while (ackIds.hasNext() && seconds.hasNext()) { + addReceivedModifyAckDeadline(new ModifyAckDeadline(ackIds.next(), seconds.next())); + } + } + } + } + + @Override + public void onError(Throwable error) { + closeStream(stream); + } + + @Override + public void onCompleted() { + closeStream(stream); + stream.responseObserver.onCompleted(); + } + } + + @Override + public StreamObserver streamingPull( + StreamObserver responseObserver) { + Stream stream = new Stream(); + stream.requestObserver = new StreamingPullRequestObserver(stream, responseObserver); + stream.responseObserver = responseObserver; + return stream.requestObserver; + } + + @Override + public void getSubscription( + GetSubscriptionRequest request, StreamObserver responseObserver) { + getSubscriptionCalled.incrementAndGet(); + responseObserver.onNext( + Subscription.newBuilder() + .setName(request.getSubscription()) + .setAckDeadlineSeconds(messageAckDeadline.get()) + .setTopic("fake-topic") + .build()); + responseObserver.onCompleted(); + } + + @Override + public void pull(PullRequest request, StreamObserver responseObserver) { + synchronized (receivedPullRequest) { + receivedPullRequest.add(request); + } + try { + responseObserver.onNext(pullResponses.take()); + responseObserver.onCompleted(); + } catch (InterruptedException e) { + responseObserver.onError(e); + } + } + + @Override + public void acknowledge( + AcknowledgeRequest request, io.grpc.stub.StreamObserver responseObserver) { + addReceivedAcks(request.getAckIdsList()); + responseObserver.onNext(Empty.getDefaultInstance()); + responseObserver.onCompleted(); + } + + @Override + public void modifyAckDeadline( + ModifyAckDeadlineRequest request, StreamObserver responseObserver) { + for (String ackId : request.getAckIdsList()) { + addReceivedModifyAckDeadline(new ModifyAckDeadline(ackId, request.getAckDeadlineSeconds())); + } + responseObserver.onNext(Empty.getDefaultInstance()); + responseObserver.onCompleted(); + } + + public void sendMessages(int numMessages) throws InterruptedException { + waitForRegisteredSubscription(); + synchronized (openedStreams) { + waitForOpenedStreams(1); + Stream stream = openedStreams.get(getAndAdvanceCurrentStream()); + StreamingPullResponse.Builder response = StreamingPullResponse.newBuilder(); + for (int i = 0; i < numMessages; i++) { + response.addReceivedMessages( + ReceivedMessage.newBuilder() + .setAckId("ackid" + i) + .setMessage( + com.google.pubsub.v1.PubsubMessage.newBuilder().setMessageId("id" + i).build()) + .build()); + } + stream.responseObserver.onNext(response.build()); + } + } + + public void sendError(Throwable error) throws InterruptedException { + waitForRegisteredSubscription(); + synchronized (openedStreams) { + waitForOpenedStreams(1); + Stream stream = openedStreams.get(getAndAdvanceCurrentStream()); + stream.responseObserver.onError(error); + closeStream(stream); + } + } + + public String waitForRegisteredSubscription() throws InterruptedException { + synchronized (subscriptionInitialized) { + while (!subscriptionInitialized.get()) { + subscriptionInitialized.wait(); + } + } + return subscription; + } + + public int waitForClosedStreams(int expectedCount) throws InterruptedException { + synchronized (closedStreams) { + waitAtLeast(closedStreams, expectedCount); + return closedStreams.size(); + } + } + + public int waitForOpenedStreams(int expectedCount) throws InterruptedException { + synchronized (openedStreams) { + waitAtLeast(openedStreams, expectedCount); + return openedStreams.size(); + } + } + + // wait until the collection has at least target number of elements. + // caller MUST hold the monitor for the collection. + private static void waitAtLeast(Collection collection, int target) + throws InterruptedException { + long untilMillis = System.currentTimeMillis() + 20_000; + while (collection.size() < target) { + long now = System.currentTimeMillis(); + if (now >= untilMillis) { + throw new IllegalStateException("timed out, last state: " + collection); + } + collection.wait(untilMillis - now); + } + } + + public StreamingPullRequest getLastSeenRequest() { + synchronized (lastSeenRequest) { + return lastSeenRequest; + } + } + + public void setLastSeenRequest(StreamingPullRequest lastSeenRequest) { + synchronized (lastSeenRequest) { + this.lastSeenRequest = lastSeenRequest; + } + } + + private void addOpenedStream(Stream stream) { + synchronized (openedStreams) { + openedStreams.add(stream); + openedStreams.notifyAll(); + } + } + + private void closeStream(Stream stream) { + synchronized (openedStreams) { + openedStreams.remove(stream); + closedStreams.add(stream); + } + synchronized (closedStreams) { + closedStreams.notifyAll(); + } + } + + private int getAndAdvanceCurrentStream() { + int current = currentStream; + synchronized (openedStreams) { + currentStream = (currentStream + 1) % openedStreams.size(); + } + return current; + } + + private void addReceivedAcks(Collection newAckIds) { + synchronized (acks) { + acks.addAll(newAckIds); + acks.notifyAll(); + } + } + + private void addReceivedModifyAckDeadline(ModifyAckDeadline newAckDeadline) { + synchronized (modAckDeadlines) { + modAckDeadlines.add(newAckDeadline); + modAckDeadlines.notifyAll(); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MessageDataMatcher.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MessageDataMatcher.java new file mode 100644 index 000000000000..745b18244bcd --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MessageDataMatcher.java @@ -0,0 +1,35 @@ +/* + * Copyright 2017 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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import org.mockito.ArgumentMatcher; + +public class MessageDataMatcher implements ArgumentMatcher { + + private ByteString expectedData; + + public MessageDataMatcher(ByteString expectedData) { + this.expectedData = expectedData; + } + + @Override + public boolean matches(PubsubMessage message2) { + return (expectedData.equals(message2.getData())); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MessageDispatcherTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MessageDispatcherTest.java new file mode 100644 index 000000000000..1285fadd5938 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MessageDispatcherTest.java @@ -0,0 +1,953 @@ +/* + * Copyright 2017 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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + +import com.google.api.gax.batching.FlowController; +import com.google.api.gax.core.Distribution; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.ReceivedMessage; +import java.time.Duration; +import java.util.*; +import java.util.concurrent.*; +import org.junit.Before; +import org.junit.Test; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; + +public class MessageDispatcherTest { + private static final String MOCK_SUBSCRIPTION_NAME = + "projects/MOCK-PROJECT/subscriptions/MOCK-SUBSCRIPTION"; + private static final ByteString MESSAGE_DATA = ByteString.copyFromUtf8("message-data"); + private static final int DELIVERY_INFO_COUNT = 3; + private static final String ACK_ID = "ACK-ID"; + private static final String ORDERING_KEY = "KEY"; + private static final ReceivedMessage TEST_MESSAGE = + ReceivedMessage.newBuilder() + .setAckId(ACK_ID) + .setMessage(PubsubMessage.newBuilder().setData(MESSAGE_DATA).build()) + .setDeliveryAttempt(DELIVERY_INFO_COUNT) + .build(); + private static final ByteString ORDERED_MESSAGE_DATA_1 = ByteString.copyFromUtf8("message-data1"); + private static final ReceivedMessage ORDERED_TEST_MESSAGE_1 = + ReceivedMessage.newBuilder() + .setAckId("ACK-ID-1") + .setMessage( + PubsubMessage.newBuilder() + .setData(ORDERED_MESSAGE_DATA_1) + .setOrderingKey(ORDERING_KEY) + .build()) + .build(); + private static final ByteString ORDERED_MESSAGE_DATA_2 = ByteString.copyFromUtf8("message-data2"); + private static final ReceivedMessage ORDERED_TEST_MESSAGE_2 = + ReceivedMessage.newBuilder() + .setAckId("ACK-ID-2") + .setMessage( + PubsubMessage.newBuilder() + .setData(ORDERED_MESSAGE_DATA_2) + .setOrderingKey(ORDERING_KEY) + .build()) + .build(); + private static final int MAX_SECONDS_PER_ACK_EXTENSION = 60; + private static final int MIN_ACK_DEADLINE_SECONDS = 10; + private static final Duration MAX_ACK_EXTENSION_PERIOD = Duration.ofMinutes(60); + private static final Duration ACK_EXPIRATION_PADDING_DEFAULT = + Subscriber.ACK_EXPIRATION_PADDING_DEFAULT; + + private Distribution mockAckLatencyDistribution; + + private MessageDispatcher.AckProcessor mockAckProcessor; + private FakeClock clock; + private boolean messageContainsDeliveryAttempt; + + private FakeScheduledExecutorService systemExecutor; + + private static MessageReceiver messageReceiver; + private static MessageReceiverWithAckResponse messageReceiverWithAckResponse; + + private LinkedBlockingQueue consumers; + private LinkedBlockingQueue consumersWithResponse; + + @Before + public void setUp() { + systemExecutor = new FakeScheduledExecutorService(); + clock = new FakeClock(); + mockAckLatencyDistribution = mock(Distribution.class); + + mockAckProcessor = mock(MessageDispatcher.AckProcessor.class); + messageContainsDeliveryAttempt = true; + + consumers = new LinkedBlockingQueue<>(); + consumersWithResponse = new LinkedBlockingQueue<>(); + + // We are instantiating "real" message receivers to easily ack/nack messages + messageReceiver = + new MessageReceiver() { + @Override + public void receiveMessage( + final PubsubMessage message, final AckReplyConsumer ackReplyConsumer) { + assertThat(message.getData()).isEqualTo(MESSAGE_DATA); + if (messageContainsDeliveryAttempt) { + assertTrue(message.containsAttributes("googclient_deliveryattempt")); + assertThat(message.getAttributesOrThrow("googclient_deliveryattempt")) + .isEqualTo(Integer.toString(DELIVERY_INFO_COUNT)); + } else { + assertFalse(message.containsAttributes("googclient_deliveryattempt")); + } + consumers.add(ackReplyConsumer); + } + }; + + messageReceiverWithAckResponse = + new MessageReceiverWithAckResponse() { + @Override + public void receiveMessage( + PubsubMessage message, AckReplyConsumerWithResponse ackReplyConsumerWithResponse) { + assertThat(message.getData()).isEqualTo(MESSAGE_DATA); + if (messageContainsDeliveryAttempt) { + assertTrue(message.containsAttributes("googclient_deliveryattempt")); + assertThat(message.getAttributesOrThrow("googclient_deliveryattempt")) + .isEqualTo(Integer.toString(DELIVERY_INFO_COUNT)); + } else { + assertFalse(message.containsAttributes("googclient_deliveryattempt")); + } + consumersWithResponse.add(ackReplyConsumerWithResponse); + } + }; + } + + @Test + public void testSetupAndTeardown() { + MessageDispatcher messageDispatcher = getMessageDispatcher(); + + messageDispatcher.start(); + messageDispatcher.stop(); + } + + @Test + public void testReceiptMessageReceiver() { + MessageReceiver mockMessageReceiver = mock(MessageReceiver.class); + MessageDispatcher messageDispatcher = getMessageDispatcher(mockMessageReceiver); + messageDispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + messageDispatcher.processOutstandingOperations(); + + // Assert expected behavior + List modackRequestDataList = new ArrayList(); + modackRequestDataList.add( + new ModackRequestData( + MIN_ACK_DEADLINE_SECONDS, AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build())); + + verify(mockAckProcessor, times(1)) + .sendModackOperations( + argThat( + new CustomArgumentMatchers.ModackRequestDataListMatcher(modackRequestDataList))); + verify(mockMessageReceiver, never()) + .receiveMessage(eq(TEST_MESSAGE.getMessage()), any(AckReplyConsumer.class)); + } + + @Test + public void testReceiptModackWithOrderingForExactlyOnceDelivered() { + + MessageReceiverWithAckResponse mockMessageReceiverWithAckResponse = + mock(MessageReceiverWithAckResponse.class); + MessageDispatcher messageDispatcher = getMessageDispatcher(mockMessageReceiverWithAckResponse); + messageDispatcher.setExactlyOnceDeliveryEnabled(true); + + ReceivedMessage TEST_MESSAGE1 = + ReceivedMessage.newBuilder() + .setAckId("ACK_ID1") + .setMessage( + PubsubMessage.newBuilder() + .setData(ByteString.copyFromUtf8("message-data1")) + .build()) + .setDeliveryAttempt(DELIVERY_INFO_COUNT) + .build(); + ReceivedMessage TEST_MESSAGE2 = + ReceivedMessage.newBuilder() + .setAckId("ACK_ID2") + .setMessage( + PubsubMessage.newBuilder() + .setData(ByteString.copyFromUtf8("message-data2")) + .build()) + .setDeliveryAttempt(DELIVERY_INFO_COUNT) + .build(); + ReceivedMessage TEST_MESSAGE3 = + ReceivedMessage.newBuilder() + .setAckId("ACK_ID3") + .setMessage( + PubsubMessage.newBuilder() + .setData(ByteString.copyFromUtf8("message-data3")) + .build()) + .setDeliveryAttempt(DELIVERY_INFO_COUNT) + .build(); + + messageDispatcher.processReceivedMessages( + Arrays.asList(TEST_MESSAGE3, TEST_MESSAGE2, TEST_MESSAGE1)); + + messageDispatcher.processOutstandingOperations(); + verify(mockMessageReceiverWithAckResponse, never()) + .receiveMessage(eq(TEST_MESSAGE.getMessage()), any(AckReplyConsumerWithResponse.class)); + + AckRequestData ackRequestData1 = AckRequestData.newBuilder(TEST_MESSAGE1.getAckId()).build(); + AckRequestData ackRequestData2 = AckRequestData.newBuilder(TEST_MESSAGE2.getAckId()).build(); + AckRequestData ackRequestData3 = AckRequestData.newBuilder(TEST_MESSAGE3.getAckId()).build(); + messageDispatcher.notifyAckSuccess(ackRequestData2); + messageDispatcher.processOutstandingOperations(); + + messageDispatcher.notifyAckSuccess(ackRequestData1); + messageDispatcher.notifyAckSuccess(ackRequestData3); + messageDispatcher.processOutstandingOperations(); + + verify(mockMessageReceiverWithAckResponse, times(1)) + .receiveMessage( + argThat(new MessageDataMatcher(TEST_MESSAGE3.getMessage().getData())), + any(AckReplyConsumerWithResponse.class)); + verify(mockMessageReceiverWithAckResponse, times(1)) + .receiveMessage( + argThat(new MessageDataMatcher(TEST_MESSAGE2.getMessage().getData())), + any(AckReplyConsumerWithResponse.class)); + verify(mockMessageReceiverWithAckResponse, times(1)) + .receiveMessage( + argThat(new MessageDataMatcher(TEST_MESSAGE1.getMessage().getData())), + any(AckReplyConsumerWithResponse.class)); + } + + @Test + public void testReceiptModackForExactlyOnceDelivered() { + + MessageReceiverWithAckResponse mockMessageReceiverWithAckResponse = + mock(MessageReceiverWithAckResponse.class); + MessageDispatcher messageDispatcher = getMessageDispatcher(mockMessageReceiverWithAckResponse); + messageDispatcher.setExactlyOnceDeliveryEnabled(true); + + messageDispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + + messageDispatcher.processOutstandingOperations(); + verify(mockMessageReceiverWithAckResponse, never()) + .receiveMessage(eq(TEST_MESSAGE.getMessage()), any(AckReplyConsumerWithResponse.class)); + + AckRequestData ackRequestData = AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build(); + messageDispatcher.notifyAckSuccess(ackRequestData); + messageDispatcher.processOutstandingOperations(); + + List modackRequestDataList = new ArrayList(); + modackRequestDataList.add(new ModackRequestData(MIN_ACK_DEADLINE_SECONDS, ackRequestData)); + + verify(mockMessageReceiverWithAckResponse, times(1)) + .receiveMessage( + argThat(new MessageDataMatcher(TEST_MESSAGE.getMessage().getData())), + any(AckReplyConsumerWithResponse.class)); + } + + @Test + public void testReceiptMessageReceiverWithAckResponse() { + MessageReceiverWithAckResponse mockMessageReceiverWithAckResponse = + mock(MessageReceiverWithAckResponse.class); + MessageDispatcher messageDispatcher = getMessageDispatcher(mockMessageReceiverWithAckResponse); + messageDispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + messageDispatcher.processOutstandingOperations(); + + // Assert expected behavior + List modackRequestDataList = new ArrayList(); + modackRequestDataList.add( + new ModackRequestData( + MIN_ACK_DEADLINE_SECONDS, AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build())); + + verify(mockAckProcessor, times(1)) + .sendModackOperations( + argThat( + new CustomArgumentMatchers.ModackRequestDataListMatcher(modackRequestDataList))); + verify(mockMessageReceiverWithAckResponse, never()) + .receiveMessage(eq(TEST_MESSAGE.getMessage()), any(AckReplyConsumerWithResponse.class)); + } + + @Test + public void testConsumerAckMessageReceiver() { + MessageDispatcher messageDispatcher = getMessageDispatcher(messageReceiver); + messageDispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + + try { + // Ack a message + consumers.take().ack(); + } catch (Throwable t) { + // In case our consumers fail + throw new AssertionError(); + } + + messageDispatcher.processOutstandingOperations(); + + // Assert expected behavior + List ackRequestDataList = new ArrayList(); + AckRequestData ackRequestData = AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build(); + ackRequestDataList.add(ackRequestData); + + List modackRequestDataList = new ArrayList(); + modackRequestDataList.add(new ModackRequestData(MIN_ACK_DEADLINE_SECONDS, ackRequestData)); + + verify(mockAckProcessor, times(1)) + .sendModackOperations( + argThat( + new CustomArgumentMatchers.ModackRequestDataListMatcher(modackRequestDataList))); + verify(mockAckProcessor, times(1)) + .sendAckOperations( + argThat(new CustomArgumentMatchers.AckRequestDataListMatcher(ackRequestDataList))); + } + + @Test + public void testConsumerAckMessageReceiverWithAckResponse() { + MessageDispatcher messageDispatcher = getMessageDispatcher(messageReceiverWithAckResponse); + messageDispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + Future ackResponseFuture; + + try { + // Ack a message - at this point we do not care about the message future so just drop it + consumersWithResponse.take().ack(); + } catch (Throwable t) { + // In case our consumers fail + throw new AssertionError(); + } + + messageDispatcher.processOutstandingOperations(); + + // Assert expected behavior + List ackRequestDataList = new ArrayList(); + AckRequestData ackRequestData = AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build(); + ackRequestDataList.add(ackRequestData); + + List modackRequestDataList = new ArrayList(); + modackRequestDataList.add(new ModackRequestData(MIN_ACK_DEADLINE_SECONDS, ackRequestData)); + + verify(mockAckProcessor, times(1)) + .sendModackOperations( + argThat( + new CustomArgumentMatchers.ModackRequestDataListMatcher(modackRequestDataList))); + verify(mockAckProcessor, times(1)) + .sendAckOperations( + argThat(new CustomArgumentMatchers.AckRequestDataListMatcher(ackRequestDataList))); + } + + @Test + public void testConsumerNackMessageReceiver() { + MessageDispatcher messageDispatcher = getMessageDispatcher(messageReceiver); + messageDispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + + try { + consumers.take().nack(); + } catch (Throwable t) { + // Just in case something went wrong with our consumers + throw new AssertionError(); + } + + messageDispatcher.processOutstandingOperations(); + + // Assert expected behavior + AckRequestData ackRequestData = AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build(); + List modackRequestDataList = new ArrayList(); + modackRequestDataList.add(new ModackRequestData(0, ackRequestData)); + modackRequestDataList.add(new ModackRequestData(MIN_ACK_DEADLINE_SECONDS, ackRequestData)); + + verify(mockAckProcessor, times(1)) + .sendModackOperations( + argThat( + new CustomArgumentMatchers.ModackRequestDataListMatcher(modackRequestDataList))); + } + + @Test + public void testConsumerNackMessageReceiverWithAckResponse() { + MessageDispatcher messageDispatcher = getMessageDispatcher(messageReceiverWithAckResponse); + messageDispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + + try { + // Ack a message - at this point we do not care about the message future so just drop it + consumersWithResponse.take().nack(); + } catch (Throwable t) { + // Just in case something went wrong with our consumers + throw new AssertionError(); + } + + messageDispatcher.processOutstandingOperations(); + + // Assert expected behavior + AckRequestData ackRequestData = AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build(); + List modackRequestDataList = new ArrayList(); + modackRequestDataList.add(new ModackRequestData(0, ackRequestData)); + modackRequestDataList.add(new ModackRequestData(MIN_ACK_DEADLINE_SECONDS, ackRequestData)); + + verify(mockAckProcessor, times(1)) + .sendModackOperations( + argThat( + new CustomArgumentMatchers.ModackRequestDataListMatcher(modackRequestDataList))); + } + + @Test + public void testExtension() { + MessageDispatcher messageDispatcher = getMessageDispatcher(); + messageDispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + messageDispatcher.extendDeadlines(); + + // Assert expected behavior + List ackRequestDataList = new ArrayList(); + + AckRequestData ackRequestData = AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build(); + ackRequestDataList.add(ackRequestData); + + List modackRequestDataList = new ArrayList(); + modackRequestDataList.add(new ModackRequestData(MIN_ACK_DEADLINE_SECONDS, ackRequestData)); + + verify(mockAckProcessor, times(1)) + .sendModackOperations( + argThat( + new CustomArgumentMatchers.ModackRequestDataListMatcher(modackRequestDataList))); + } + + @Test + public void testExtension_ExpirationExtension() { + MessageDispatcher messageDispatcher = getMessageDispatcher(); + messageDispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + int secondsLeft = 5; + // Advance clock to have 5 seconds left in extension period + clock.advance(MAX_ACK_EXTENSION_PERIOD.getSeconds() - secondsLeft, TimeUnit.SECONDS); + messageDispatcher.extendDeadlines(); + + // Assert expected behavior + List ackRequestDataList = new ArrayList(); + AckRequestData ackRequestData = AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build(); + ackRequestDataList.add(ackRequestData); + List modackRequestDataList = new ArrayList(); + modackRequestDataList.add(new ModackRequestData(secondsLeft, ackRequestData)); + + verify(mockAckProcessor, times(1)) + .sendModackOperations( + argThat( + new CustomArgumentMatchers.ModackRequestDataListMatcher(modackRequestDataList))); + } + + @Test + public void testExtension_GiveUp() throws Exception { + MessageDispatcher messageDispatcher = getMessageDispatcher(); + messageDispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + + // If we run extendDeadlines after totalExpiration, we shouldn't send anything. + clock.advance(1, TimeUnit.DAYS); + messageDispatcher.extendDeadlines(); + + // Assert expected behavior + verify(mockAckProcessor, times(0)).sendAckOperations(eq(Collections.emptyList())); + verify(mockAckProcessor, times(0)).sendModackOperations(eq(Collections.emptyList())); + } + + @Test + public void testAckExtensionDefaultsExactlyOnceDeliveryDisabledThenEnabled() { + MessageDispatcher messageDispatcher = + MessageDispatcher.newBuilder(mock(MessageReceiver.class)) + .setAckLatencyDistribution(mockAckLatencyDistribution) + .setMinDurationPerAckExtension(Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION) + .setMinDurationPerAckExtensionDefaultUsed(true) + .setMaxDurationPerAckExtension(Subscriber.DEFAULT_MAX_ACK_DEADLINE_EXTENSION) + .setMaxDurationPerAckExtensionDefaultUsed(true) + .setSubscriptionName(MOCK_SUBSCRIPTION_NAME) + .build(); + + // ExactlyOnceDeliveryEnabled is turned off by default + + // We should be using the Subscriber set hard deadlines + assertMinAndMaxAckDeadlines( + messageDispatcher, + Math.toIntExact(Subscriber.MIN_STREAM_ACK_DEADLINE.getSeconds()), + Math.toIntExact(Subscriber.MAX_STREAM_ACK_DEADLINE.getSeconds())); + + // This would normally be set from the streaming pull response in the + // StreamingSubscriberConnection + messageDispatcher.setExactlyOnceDeliveryEnabled(true); + + // Should only change min deadline + assertMinAndMaxAckDeadlines( + messageDispatcher, + Math.toIntExact( + Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION_EXACTLY_ONCE_DELIVERY.getSeconds()), + Math.toIntExact(Subscriber.MAX_STREAM_ACK_DEADLINE.getSeconds())); + } + + @Test + public void testAckExtensionDefaultsExactlyOnceDeliveryEnabledThenDisabled() { + MessageDispatcher messageDispatcher = + MessageDispatcher.newBuilder(mock(MessageReceiver.class)) + .setAckLatencyDistribution(mockAckLatencyDistribution) + .setMinDurationPerAckExtension( + Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION_EXACTLY_ONCE_DELIVERY) + .setMinDurationPerAckExtensionDefaultUsed(true) + .setMaxDurationPerAckExtension(Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION) + .setMaxDurationPerAckExtensionDefaultUsed(true) + .setSubscriptionName(MOCK_SUBSCRIPTION_NAME) + .build(); + + // This would normally be set from the streaming pull response in the + // StreamingSubscriberConnection + messageDispatcher.setExactlyOnceDeliveryEnabled(true); + + assertMinAndMaxAckDeadlines( + messageDispatcher, + Math.toIntExact( + Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION_EXACTLY_ONCE_DELIVERY.getSeconds()), + Math.toIntExact(Subscriber.MAX_STREAM_ACK_DEADLINE.getSeconds())); + + // This would normally be set from the streaming pull response in the + // StreamingSubscriberConnection + messageDispatcher.setExactlyOnceDeliveryEnabled(false); + + // Should change min deadline + assertMinAndMaxAckDeadlines( + messageDispatcher, + Math.toIntExact(Subscriber.MIN_STREAM_ACK_DEADLINE.getSeconds()), + Math.toIntExact(Subscriber.MAX_STREAM_ACK_DEADLINE.getSeconds())); + } + + @Test + public void testOrderedDeliveryOrderingDisabled() throws Exception { + MessageReceiver mockMessageReceiver = mock(MessageReceiver.class); + MessageDispatcher messageDispatcher = + getMessageDispatcher(mockMessageReceiver, Executors.newFixedThreadPool(5)); + + // This would normally be set from the streaming pull response in the + // StreamingSubscriberConnection + messageDispatcher.setMessageOrderingEnabled(false); + + CountDownLatch receiveCalls = new CountDownLatch(2); + + doAnswer( + new Answer() { + public Void answer(InvocationOnMock invocation) throws Exception { + Thread.sleep(1000); + receiveCalls.countDown(); + return null; + } + }) + .when(mockMessageReceiver) + .receiveMessage(eq(ORDERED_TEST_MESSAGE_1.getMessage()), any(AckReplyConsumer.class)); + doAnswer( + new Answer() { + public Void answer(InvocationOnMock invocation) { + // Ensure the previous method didn't finish and we could process in parallel. + assertEquals(2, receiveCalls.getCount()); + receiveCalls.countDown(); + return null; + } + }) + .when(mockMessageReceiver) + .receiveMessage(eq(ORDERED_TEST_MESSAGE_2.getMessage()), any(AckReplyConsumer.class)); + + messageDispatcher.processReceivedMessages( + Arrays.asList(ORDERED_TEST_MESSAGE_1, ORDERED_TEST_MESSAGE_2)); + receiveCalls.await(); + } + + @Test + public void testOrderedDeliveryOrderingEnabled() throws Exception { + MessageReceiver mockMessageReceiver = mock(MessageReceiver.class); + MessageDispatcher messageDispatcher = + getMessageDispatcher(mockMessageReceiver, Executors.newFixedThreadPool(5)); + + // This would normally be set from the streaming pull response in the + // StreamingSubscriberConnection + messageDispatcher.setMessageOrderingEnabled(true); + + CountDownLatch receiveCalls = new CountDownLatch(2); + + doAnswer( + new Answer() { + public Void answer(InvocationOnMock invocation) throws Exception { + Thread.sleep(1000); + receiveCalls.countDown(); + return null; + } + }) + .when(mockMessageReceiver) + .receiveMessage(eq(ORDERED_TEST_MESSAGE_1.getMessage()), any(AckReplyConsumer.class)); + doAnswer( + new Answer() { + public Void answer(InvocationOnMock invocation) { + // Ensure the previous method has finished completely. + assertEquals(1, receiveCalls.getCount()); + receiveCalls.countDown(); + return null; + } + }) + .when(mockMessageReceiver) + .receiveMessage(eq(ORDERED_TEST_MESSAGE_2.getMessage()), any(AckReplyConsumer.class)); + + messageDispatcher.processReceivedMessages( + Arrays.asList(ORDERED_TEST_MESSAGE_1, ORDERED_TEST_MESSAGE_2)); + receiveCalls.await(); + } + + @Test + public void testAckExtensionCustomMinExactlyOnceDeliveryDisabledThenEnabled() { + int customMinSeconds = 30; + MessageDispatcher messageDispatcher = + MessageDispatcher.newBuilder(mock(MessageReceiver.class)) + .setAckLatencyDistribution(mockAckLatencyDistribution) + .setMinDurationPerAckExtension(Duration.ofSeconds(customMinSeconds)) + .setMinDurationPerAckExtensionDefaultUsed(false) + .setMaxDurationPerAckExtension(Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION) + .setMaxDurationPerAckExtensionDefaultUsed(true) + .setSubscriptionName(MOCK_SUBSCRIPTION_NAME) + .build(); + + // ExactlyOnceDeliveryEnabled is turned off by default + assertMinAndMaxAckDeadlines( + messageDispatcher, + customMinSeconds, + Math.toIntExact(Subscriber.MAX_STREAM_ACK_DEADLINE.getSeconds())); + + // This would normally be set from the streaming pull response in the + // StreamingSubscriberConnection + messageDispatcher.setExactlyOnceDeliveryEnabled(true); + + // no changes should occur + assertMinAndMaxAckDeadlines( + messageDispatcher, + customMinSeconds, + Math.toIntExact(Subscriber.MAX_STREAM_ACK_DEADLINE.getSeconds())); + } + + @Test + public void testAckExtensionCustomMaxExactlyOnceDeliveryDisabledThenEnabled() { + int customMaxSeconds = 30; + MessageDispatcher messageDispatcher = + MessageDispatcher.newBuilder(mock(MessageReceiver.class)) + .setAckLatencyDistribution(mockAckLatencyDistribution) + .setMinDurationPerAckExtension(Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION) + .setMinDurationPerAckExtensionDefaultUsed(true) + .setMaxDurationPerAckExtension(Duration.ofSeconds(customMaxSeconds)) + .setMaxDurationPerAckExtensionDefaultUsed(false) + .setSubscriptionName(MOCK_SUBSCRIPTION_NAME) + .build(); + + // ExactlyOnceDeliveryEnabled is turned off by default + assertMinAndMaxAckDeadlines( + messageDispatcher, + Math.toIntExact(Subscriber.MIN_STREAM_ACK_DEADLINE.getSeconds()), + customMaxSeconds); + + // This would normally be set from the streaming pull response in the + // StreamingSubscriberConnection + messageDispatcher.setExactlyOnceDeliveryEnabled(true); + + // Because the customMaxSeconds is above the + // DEFAULT_MIN_ACK_DEADLINE_EXTENSION_EXACTLY_ONCE_DELIVERY, we should use the customMaxSeconds + // as the new min + assertMinAndMaxAckDeadlines(messageDispatcher, customMaxSeconds, customMaxSeconds); + } + + private void assertMinAndMaxAckDeadlines( + MessageDispatcher messageDispatcher, int minAckDeadline, int maxAckDeadline) { + // Helper function to assert if min and max deadlines are being respected + + // Set distribution to return a low value to assert min value + when(mockAckLatencyDistribution.getPercentile( + MessageDispatcher.PERCENTILE_FOR_ACK_DEADLINE_UPDATES)) + .thenReturn(0); + assertEquals(minAckDeadline, messageDispatcher.computeDeadlineSeconds()); + + // Set distribution to return a high value to assert max value + when(mockAckLatencyDistribution.getPercentile( + MessageDispatcher.PERCENTILE_FOR_ACK_DEADLINE_UPDATES)) + .thenReturn(60 * 60); + assertEquals(maxAckDeadline, messageDispatcher.computeDeadlineSeconds()); + } + + private MessageDispatcher getMessageDispatcher() { + return getMessageDispatcher(mock(MessageReceiver.class), MoreExecutors.directExecutor()); + } + + private MessageDispatcher getMessageDispatcher(MessageReceiver messageReceiver) { + return getMessageDispatcherFromBuilder( + MessageDispatcher.newBuilder(messageReceiver), MoreExecutors.directExecutor()); + } + + private MessageDispatcher getMessageDispatcher( + MessageReceiver messageReceiver, Executor executor) { + return getMessageDispatcherFromBuilder(MessageDispatcher.newBuilder(messageReceiver), executor); + } + + private MessageDispatcher getMessageDispatcher( + MessageReceiverWithAckResponse messageReceiverWithAckResponse) { + return getMessageDispatcherFromBuilder( + MessageDispatcher.newBuilder(messageReceiverWithAckResponse), + MoreExecutors.directExecutor()); + } + + private MessageDispatcher getMessageDispatcherFromBuilder( + MessageDispatcher.Builder builder, Executor executor) { + MessageDispatcher messageDispatcher = + builder + .setAckProcessor(mockAckProcessor) + .setAckExpirationPadding(ACK_EXPIRATION_PADDING_DEFAULT) + .setMaxAckExtensionPeriod(MAX_ACK_EXTENSION_PERIOD) + .setMinDurationPerAckExtension(Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION) + .setMinDurationPerAckExtensionDefaultUsed(true) + .setMaxDurationPerAckExtension(Subscriber.DEFAULT_MAX_ACK_DEADLINE_EXTENSION) + .setMaxDurationPerAckExtensionDefaultUsed(true) + .setAckLatencyDistribution(mock(Distribution.class)) + .setFlowController(mock(FlowController.class)) + .setExecutor(executor) + .setSubscriptionName(MOCK_SUBSCRIPTION_NAME) + .setSystemExecutor(systemExecutor) + .setApiClock(clock) + .setSubscriberShutdownSettings(SubscriberShutdownSettings.newBuilder().build()) + .build(); + + messageDispatcher.setMessageDeadlineSeconds(MIN_ACK_DEADLINE_SECONDS); + return messageDispatcher; + } + + private MessageDispatcher getMessageDispatcherFromBuilder( + MessageDispatcher.Builder builder, SubscriberShutdownSettings shutdownSettings) { + MessageDispatcher messageDispatcher = + builder + .setAckProcessor(mockAckProcessor) + .setAckExpirationPadding(ACK_EXPIRATION_PADDING_DEFAULT) + .setMaxAckExtensionPeriod(MAX_ACK_EXTENSION_PERIOD) + .setMinDurationPerAckExtension(Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION) + .setMinDurationPerAckExtensionDefaultUsed(true) + .setMaxDurationPerAckExtension(Subscriber.DEFAULT_MAX_ACK_DEADLINE_EXTENSION) + .setMaxDurationPerAckExtensionDefaultUsed(true) + .setAckLatencyDistribution(mock(Distribution.class)) + .setFlowController(mock(FlowController.class)) + .setExecutor(MoreExecutors.newDirectExecutorService()) + .setSubscriptionName(MOCK_SUBSCRIPTION_NAME) + .setSystemExecutor(systemExecutor) + .setApiClock(clock) + .setSubscriberShutdownSettings(shutdownSettings) + .build(); + + messageDispatcher.setMessageDeadlineSeconds(MIN_ACK_DEADLINE_SECONDS); + return messageDispatcher; + } + + @Test + public void testStop_waitForProcessing_indefinite() throws Exception { + SubscriberShutdownSettings shutdownSettings = + SubscriberShutdownSettings.newBuilder() + .setMode(SubscriberShutdownSettings.ShutdownMode.WAIT_FOR_PROCESSING) + .setTimeout(Duration.ofSeconds(-1)) + .build(); + MessageDispatcher dispatcher = + getMessageDispatcherFromBuilder( + MessageDispatcher.newBuilder(messageReceiver), shutdownSettings); + + dispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + + Thread stopThread = new Thread(dispatcher::stop); + stopThread.start(); + + // Wait for the stop thread to block on the waiter. + Thread.sleep(100); + assertTrue(stopThread.isAlive()); + + // Ack the message, which should allow the stop thread to complete. + consumers.take().ack(); + + List ackRequestDataList = new ArrayList(); + AckRequestData ackRequestData = AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build(); + ackRequestDataList.add(ackRequestData); + + stopThread.join(); + assertFalse(stopThread.isAlive()); + + verify(mockAckProcessor, times(1)) + .sendAckOperations( + argThat(new CustomArgumentMatchers.AckRequestDataListMatcher(ackRequestDataList))); + } + + @Test + public void testStop_waitForProcessing_withTimeout_success() { + SubscriberShutdownSettings shutdownSettings = + SubscriberShutdownSettings.newBuilder() + .setMode(SubscriberShutdownSettings.ShutdownMode.WAIT_FOR_PROCESSING) + .setTimeout(Duration.ofSeconds(5)) + .build(); + MessageDispatcher dispatcher = + getMessageDispatcherFromBuilder( + MessageDispatcher.newBuilder(messageReceiver), shutdownSettings); + + dispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + + Thread stopThread = new Thread(dispatcher::stop); + stopThread.start(); + + // Ack the message before the timeout expires. + try { + consumers.take().ack(); + } catch (InterruptedException e) { + fail("Interrupted while taking consumer"); + } + + try { + stopThread.join(1000); + } catch (InterruptedException e) { + fail("Interrupted while joining stop thread"); + } + + List ackRequestDataList = new ArrayList(); + AckRequestData ackRequestData = AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build(); + ackRequestDataList.add(ackRequestData); + + verify(mockAckProcessor, times(1)) + .sendAckOperations( + argThat(new CustomArgumentMatchers.AckRequestDataListMatcher(ackRequestDataList))); + assertFalse(stopThread.isAlive()); + } + + @Test + public void testStop_waitForProcessing_withTimeout_nackWithOneSecondLeft() { + SubscriberShutdownSettings shutdownSettings = + SubscriberShutdownSettings.newBuilder() + .setMode(SubscriberShutdownSettings.ShutdownMode.WAIT_FOR_PROCESSING) + .setTimeout(Duration.ofSeconds(2)) + .build(); + MessageDispatcher dispatcher = + getMessageDispatcherFromBuilder( + MessageDispatcher.newBuilder(messageReceiver), shutdownSettings); + + dispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + Thread stopThread = new Thread(dispatcher::stop); + stopThread.start(); + + // Wait for the stop thread to block on the waiter. + try { + Thread.sleep(100); + } catch (InterruptedException e) { + fail("Interrupted while sleeping"); + } + + clock.advance(1500, TimeUnit.MILLISECONDS); + + try { + stopThread.join(); + } catch (InterruptedException e) { + fail("Interrupted while joining stop thread"); + } + // Assert expected behavior + List modackRequestDataList = new ArrayList(); + modackRequestDataList.add( + new ModackRequestData(0, AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build())); + + verify(mockAckProcessor, times(1)) + .sendModackOperations( + argThat( + new CustomArgumentMatchers.ModackRequestDataListMatcher(modackRequestDataList))); + verify(mockAckProcessor, times(1)) + .sendAckOperations( + argThat(new CustomArgumentMatchers.AckRequestDataListMatcher(Collections.emptyList()))); + } + + @Test + public void testStop_nackImmediately() { + SubscriberShutdownSettings shutdownSettings = + SubscriberShutdownSettings.newBuilder() + .setMode(SubscriberShutdownSettings.ShutdownMode.NACK_IMMEDIATELY) + .build(); + MessageDispatcher dispatcher = + getMessageDispatcherFromBuilder( + MessageDispatcher.newBuilder(messageReceiver), shutdownSettings); + + dispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + dispatcher.stop(); + + // Assert expected behavior + List modackRequestDataList = new ArrayList(); + modackRequestDataList.add( + new ModackRequestData(0, AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build())); + + verify(mockAckProcessor, times(1)) + .sendModackOperations( + argThat( + new CustomArgumentMatchers.ModackRequestDataListMatcher(modackRequestDataList))); + verify(mockAckProcessor, times(1)) + .sendAckOperations( + argThat(new CustomArgumentMatchers.AckRequestDataListMatcher(Collections.emptyList()))); + } + + @Test + public void testAckDuringNackImmediatelyShutdown() throws Exception { + SubscriberShutdownSettings shutdownSettings = + SubscriberShutdownSettings.newBuilder() + .setMode(SubscriberShutdownSettings.ShutdownMode.NACK_IMMEDIATELY) + .build(); + MessageDispatcher dispatcher = + getMessageDispatcherFromBuilder( + MessageDispatcher.newBuilder(messageReceiverWithAckResponse), shutdownSettings); + dispatcher.setExactlyOnceDeliveryEnabled(true); + + dispatcher.processReceivedMessages(Collections.singletonList(TEST_MESSAGE)); + dispatcher.processOutstandingOperations(); + + List receiptModackRequestDataList = new ArrayList(); + AckRequestData receiptModackRequestData = + AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build(); + receiptModackRequestDataList.add( + new ModackRequestData(MIN_ACK_DEADLINE_SECONDS, receiptModackRequestData)); + dispatcher.notifyAckSuccess(receiptModackRequestData); + + verify(mockAckProcessor, times(1)) + .sendModackOperations( + argThat( + new CustomArgumentMatchers.ModackRequestDataListMatcher( + receiptModackRequestDataList))); + + Thread stopThread = + new Thread( + () -> { + dispatcher.stop(); + }); + stopThread.start(); + + // Wait for the stop process to start. + while (!dispatcher.getNackImmediatelyShutdownInProgress()) { + Thread.sleep(1); + } + + // Try to ack the message. + AckResponse reply = consumersWithResponse.take().ack().get(); + assertThat(reply.equals(AckResponse.OTHER)); + + stopThread.join(); + + // Assert expected behavior + List modackRequestDataList = new ArrayList(); + modackRequestDataList.add( + new ModackRequestData(0, AckRequestData.newBuilder(TEST_MESSAGE.getAckId()).build())); + + // The message should have been nacked, not acked. + verify(mockAckProcessor, times(1)) + .sendModackOperations( + argThat( + new CustomArgumentMatchers.ModackRequestDataListMatcher(modackRequestDataList))); + verify(mockAckProcessor, times(2)) + .sendAckOperations( + argThat(new CustomArgumentMatchers.AckRequestDataListMatcher(Collections.emptyList()))); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockIAMPolicy.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockIAMPolicy.java new file mode 100644 index 000000000000..3c447fc4f4fe --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockIAMPolicy.java @@ -0,0 +1,59 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.BetaApi; +import com.google.api.gax.grpc.testing.MockGrpcService; +import com.google.protobuf.AbstractMessage; +import io.grpc.ServerServiceDefinition; +import java.util.List; +import javax.annotation.Generated; + +@BetaApi +@Generated("by gapic-generator-java") +public class MockIAMPolicy implements MockGrpcService { + private final MockIAMPolicyImpl serviceImpl; + + public MockIAMPolicy() { + serviceImpl = new MockIAMPolicyImpl(); + } + + @Override + public List getRequests() { + return serviceImpl.getRequests(); + } + + @Override + public void addResponse(AbstractMessage response) { + serviceImpl.addResponse(response); + } + + @Override + public void addException(Exception exception) { + serviceImpl.addException(exception); + } + + @Override + public ServerServiceDefinition getServiceDefinition() { + return serviceImpl.bindService(); + } + + @Override + public void reset() { + serviceImpl.reset(); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockIAMPolicyImpl.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockIAMPolicyImpl.java new file mode 100644 index 000000000000..9b3838e1f125 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockIAMPolicyImpl.java @@ -0,0 +1,127 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.BetaApi; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.IAMPolicyGrpc.IAMPolicyImplBase; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.AbstractMessage; +import io.grpc.stub.StreamObserver; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; +import javax.annotation.Generated; + +@BetaApi +@Generated("by gapic-generator-java") +public class MockIAMPolicyImpl extends IAMPolicyImplBase { + private List requests; + private Queue responses; + + public MockIAMPolicyImpl() { + requests = new ArrayList<>(); + responses = new LinkedList<>(); + } + + public List getRequests() { + return requests; + } + + public void addResponse(AbstractMessage response) { + responses.add(response); + } + + public void setResponses(List responses) { + this.responses = new LinkedList(responses); + } + + public void addException(Exception exception) { + responses.add(exception); + } + + public void reset() { + requests = new ArrayList<>(); + responses = new LinkedList<>(); + } + + @Override + public void testIamPermissions( + TestIamPermissionsRequest request, + StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof TestIamPermissionsResponse) { + requests.add(request); + responseObserver.onNext(((TestIamPermissionsResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method TestIamPermissions, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + TestIamPermissionsResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void setIamPolicy(SetIamPolicyRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Policy) { + requests.add(request); + responseObserver.onNext(((Policy) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method SetIamPolicy, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Policy.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void getIamPolicy(GetIamPolicyRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Policy) { + requests.add(request); + responseObserver.onNext(((Policy) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method GetIamPolicy, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Policy.class.getName(), + Exception.class.getName()))); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockPublisher.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockPublisher.java new file mode 100644 index 000000000000..f992f4bbab2d --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockPublisher.java @@ -0,0 +1,59 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.BetaApi; +import com.google.api.gax.grpc.testing.MockGrpcService; +import com.google.protobuf.AbstractMessage; +import io.grpc.ServerServiceDefinition; +import java.util.List; +import javax.annotation.Generated; + +@BetaApi +@Generated("by gapic-generator-java") +public class MockPublisher implements MockGrpcService { + private final MockPublisherImpl serviceImpl; + + public MockPublisher() { + serviceImpl = new MockPublisherImpl(); + } + + @Override + public List getRequests() { + return serviceImpl.getRequests(); + } + + @Override + public void addResponse(AbstractMessage response) { + serviceImpl.addResponse(response); + } + + @Override + public void addException(Exception exception) { + serviceImpl.addException(exception); + } + + @Override + public ServerServiceDefinition getServiceDefinition() { + return serviceImpl.bindService(); + } + + @Override + public void reset() { + serviceImpl.reset(); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockPublisherImpl.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockPublisherImpl.java new file mode 100644 index 000000000000..5e9ecad09837 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockPublisherImpl.java @@ -0,0 +1,263 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.BetaApi; +import com.google.protobuf.AbstractMessage; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.DeleteTopicRequest; +import com.google.pubsub.v1.DetachSubscriptionRequest; +import com.google.pubsub.v1.DetachSubscriptionResponse; +import com.google.pubsub.v1.GetTopicRequest; +import com.google.pubsub.v1.ListTopicSnapshotsRequest; +import com.google.pubsub.v1.ListTopicSnapshotsResponse; +import com.google.pubsub.v1.ListTopicSubscriptionsRequest; +import com.google.pubsub.v1.ListTopicSubscriptionsResponse; +import com.google.pubsub.v1.ListTopicsRequest; +import com.google.pubsub.v1.ListTopicsResponse; +import com.google.pubsub.v1.PublishRequest; +import com.google.pubsub.v1.PublishResponse; +import com.google.pubsub.v1.PublisherGrpc.PublisherImplBase; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.UpdateTopicRequest; +import io.grpc.stub.StreamObserver; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; +import javax.annotation.Generated; + +@BetaApi +@Generated("by gapic-generator-java") +public class MockPublisherImpl extends PublisherImplBase { + private List requests; + private Queue responses; + + public MockPublisherImpl() { + requests = new ArrayList<>(); + responses = new LinkedList<>(); + } + + public List getRequests() { + return requests; + } + + public void addResponse(AbstractMessage response) { + responses.add(response); + } + + public void setResponses(List responses) { + this.responses = new LinkedList(responses); + } + + public void addException(Exception exception) { + responses.add(exception); + } + + public void reset() { + requests = new ArrayList<>(); + responses = new LinkedList<>(); + } + + @Override + public void createTopic(Topic request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Topic) { + requests.add(request); + responseObserver.onNext(((Topic) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method CreateTopic, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Topic.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void updateTopic(UpdateTopicRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Topic) { + requests.add(request); + responseObserver.onNext(((Topic) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method UpdateTopic, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Topic.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void publish(PublishRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof PublishResponse) { + requests.add(request); + responseObserver.onNext(((PublishResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method Publish, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + PublishResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void getTopic(GetTopicRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Topic) { + requests.add(request); + responseObserver.onNext(((Topic) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method GetTopic, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Topic.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void listTopics( + ListTopicsRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof ListTopicsResponse) { + requests.add(request); + responseObserver.onNext(((ListTopicsResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method ListTopics, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + ListTopicsResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void listTopicSubscriptions( + ListTopicSubscriptionsRequest request, + StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof ListTopicSubscriptionsResponse) { + requests.add(request); + responseObserver.onNext(((ListTopicSubscriptionsResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method ListTopicSubscriptions, expected %s or" + + " %s", + response == null ? "null" : response.getClass().getName(), + ListTopicSubscriptionsResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void listTopicSnapshots( + ListTopicSnapshotsRequest request, + StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof ListTopicSnapshotsResponse) { + requests.add(request); + responseObserver.onNext(((ListTopicSnapshotsResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method ListTopicSnapshots, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + ListTopicSnapshotsResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void deleteTopic(DeleteTopicRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Empty) { + requests.add(request); + responseObserver.onNext(((Empty) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method DeleteTopic, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Empty.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void detachSubscription( + DetachSubscriptionRequest request, + StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof DetachSubscriptionResponse) { + requests.add(request); + responseObserver.onNext(((DetachSubscriptionResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method DetachSubscription, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + DetachSubscriptionResponse.class.getName(), + Exception.class.getName()))); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockSchemaService.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockSchemaService.java new file mode 100644 index 000000000000..e986b7ed54e8 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockSchemaService.java @@ -0,0 +1,59 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.BetaApi; +import com.google.api.gax.grpc.testing.MockGrpcService; +import com.google.protobuf.AbstractMessage; +import io.grpc.ServerServiceDefinition; +import java.util.List; +import javax.annotation.Generated; + +@BetaApi +@Generated("by gapic-generator-java") +public class MockSchemaService implements MockGrpcService { + private final MockSchemaServiceImpl serviceImpl; + + public MockSchemaService() { + serviceImpl = new MockSchemaServiceImpl(); + } + + @Override + public List getRequests() { + return serviceImpl.getRequests(); + } + + @Override + public void addResponse(AbstractMessage response) { + serviceImpl.addResponse(response); + } + + @Override + public void addException(Exception exception) { + serviceImpl.addException(exception); + } + + @Override + public ServerServiceDefinition getServiceDefinition() { + return serviceImpl.bindService(); + } + + @Override + public void reset() { + serviceImpl.reset(); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockSchemaServiceImpl.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockSchemaServiceImpl.java new file mode 100644 index 000000000000..92c412f103c6 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockSchemaServiceImpl.java @@ -0,0 +1,284 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.BetaApi; +import com.google.protobuf.AbstractMessage; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.CommitSchemaRequest; +import com.google.pubsub.v1.CreateSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRevisionRequest; +import com.google.pubsub.v1.GetSchemaRequest; +import com.google.pubsub.v1.ListSchemaRevisionsRequest; +import com.google.pubsub.v1.ListSchemaRevisionsResponse; +import com.google.pubsub.v1.ListSchemasRequest; +import com.google.pubsub.v1.ListSchemasResponse; +import com.google.pubsub.v1.RollbackSchemaRequest; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.SchemaServiceGrpc.SchemaServiceImplBase; +import com.google.pubsub.v1.ValidateMessageRequest; +import com.google.pubsub.v1.ValidateMessageResponse; +import com.google.pubsub.v1.ValidateSchemaRequest; +import com.google.pubsub.v1.ValidateSchemaResponse; +import io.grpc.stub.StreamObserver; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; +import javax.annotation.Generated; + +@BetaApi +@Generated("by gapic-generator-java") +public class MockSchemaServiceImpl extends SchemaServiceImplBase { + private List requests; + private Queue responses; + + public MockSchemaServiceImpl() { + requests = new ArrayList<>(); + responses = new LinkedList<>(); + } + + public List getRequests() { + return requests; + } + + public void addResponse(AbstractMessage response) { + responses.add(response); + } + + public void setResponses(List responses) { + this.responses = new LinkedList(responses); + } + + public void addException(Exception exception) { + responses.add(exception); + } + + public void reset() { + requests = new ArrayList<>(); + responses = new LinkedList<>(); + } + + @Override + public void createSchema(CreateSchemaRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Schema) { + requests.add(request); + responseObserver.onNext(((Schema) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method CreateSchema, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Schema.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void getSchema(GetSchemaRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Schema) { + requests.add(request); + responseObserver.onNext(((Schema) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method GetSchema, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Schema.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void listSchemas( + ListSchemasRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof ListSchemasResponse) { + requests.add(request); + responseObserver.onNext(((ListSchemasResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method ListSchemas, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + ListSchemasResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void listSchemaRevisions( + ListSchemaRevisionsRequest request, + StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof ListSchemaRevisionsResponse) { + requests.add(request); + responseObserver.onNext(((ListSchemaRevisionsResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method ListSchemaRevisions, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + ListSchemaRevisionsResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void commitSchema(CommitSchemaRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Schema) { + requests.add(request); + responseObserver.onNext(((Schema) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method CommitSchema, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Schema.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void rollbackSchema( + RollbackSchemaRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Schema) { + requests.add(request); + responseObserver.onNext(((Schema) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method RollbackSchema, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Schema.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void deleteSchemaRevision( + DeleteSchemaRevisionRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Schema) { + requests.add(request); + responseObserver.onNext(((Schema) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method DeleteSchemaRevision, expected %s or" + + " %s", + response == null ? "null" : response.getClass().getName(), + Schema.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void deleteSchema(DeleteSchemaRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Empty) { + requests.add(request); + responseObserver.onNext(((Empty) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method DeleteSchema, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Empty.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void validateSchema( + ValidateSchemaRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof ValidateSchemaResponse) { + requests.add(request); + responseObserver.onNext(((ValidateSchemaResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method ValidateSchema, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + ValidateSchemaResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void validateMessage( + ValidateMessageRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof ValidateMessageResponse) { + requests.add(request); + responseObserver.onNext(((ValidateMessageResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method ValidateMessage, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + ValidateMessageResponse.class.getName(), + Exception.class.getName()))); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockSubscriber.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockSubscriber.java new file mode 100644 index 000000000000..a0547f660e95 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockSubscriber.java @@ -0,0 +1,59 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.BetaApi; +import com.google.api.gax.grpc.testing.MockGrpcService; +import com.google.protobuf.AbstractMessage; +import io.grpc.ServerServiceDefinition; +import java.util.List; +import javax.annotation.Generated; + +@BetaApi +@Generated("by gapic-generator-java") +public class MockSubscriber implements MockGrpcService { + private final MockSubscriberImpl serviceImpl; + + public MockSubscriber() { + serviceImpl = new MockSubscriberImpl(); + } + + @Override + public List getRequests() { + return serviceImpl.getRequests(); + } + + @Override + public void addResponse(AbstractMessage response) { + serviceImpl.addResponse(response); + } + + @Override + public void addException(Exception exception) { + serviceImpl.addException(exception); + } + + @Override + public ServerServiceDefinition getServiceDefinition() { + return serviceImpl.bindService(); + } + + @Override + public void reset() { + serviceImpl.reset(); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockSubscriberImpl.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockSubscriberImpl.java new file mode 100644 index 000000000000..81d0ddef2333 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/MockSubscriberImpl.java @@ -0,0 +1,433 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import com.google.api.core.BetaApi; +import com.google.protobuf.AbstractMessage; +import com.google.protobuf.Empty; +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.CreateSnapshotRequest; +import com.google.pubsub.v1.DeleteSnapshotRequest; +import com.google.pubsub.v1.DeleteSubscriptionRequest; +import com.google.pubsub.v1.GetSnapshotRequest; +import com.google.pubsub.v1.GetSubscriptionRequest; +import com.google.pubsub.v1.ListSnapshotsRequest; +import com.google.pubsub.v1.ListSnapshotsResponse; +import com.google.pubsub.v1.ListSubscriptionsRequest; +import com.google.pubsub.v1.ListSubscriptionsResponse; +import com.google.pubsub.v1.ModifyAckDeadlineRequest; +import com.google.pubsub.v1.ModifyPushConfigRequest; +import com.google.pubsub.v1.PullRequest; +import com.google.pubsub.v1.PullResponse; +import com.google.pubsub.v1.SeekRequest; +import com.google.pubsub.v1.SeekResponse; +import com.google.pubsub.v1.Snapshot; +import com.google.pubsub.v1.StreamingPullRequest; +import com.google.pubsub.v1.StreamingPullResponse; +import com.google.pubsub.v1.SubscriberGrpc.SubscriberImplBase; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.UpdateSnapshotRequest; +import com.google.pubsub.v1.UpdateSubscriptionRequest; +import io.grpc.stub.StreamObserver; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; +import javax.annotation.Generated; + +@BetaApi +@Generated("by gapic-generator-java") +public class MockSubscriberImpl extends SubscriberImplBase { + private List requests; + private Queue responses; + + public MockSubscriberImpl() { + requests = new ArrayList<>(); + responses = new LinkedList<>(); + } + + public List getRequests() { + return requests; + } + + public void addResponse(AbstractMessage response) { + responses.add(response); + } + + public void setResponses(List responses) { + this.responses = new LinkedList(responses); + } + + public void addException(Exception exception) { + responses.add(exception); + } + + public void reset() { + requests = new ArrayList<>(); + responses = new LinkedList<>(); + } + + @Override + public void createSubscription( + Subscription request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Subscription) { + requests.add(request); + responseObserver.onNext(((Subscription) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method CreateSubscription, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Subscription.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void getSubscription( + GetSubscriptionRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Subscription) { + requests.add(request); + responseObserver.onNext(((Subscription) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method GetSubscription, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Subscription.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void updateSubscription( + UpdateSubscriptionRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Subscription) { + requests.add(request); + responseObserver.onNext(((Subscription) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method UpdateSubscription, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Subscription.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void listSubscriptions( + ListSubscriptionsRequest request, + StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof ListSubscriptionsResponse) { + requests.add(request); + responseObserver.onNext(((ListSubscriptionsResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method ListSubscriptions, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + ListSubscriptionsResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void deleteSubscription( + DeleteSubscriptionRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Empty) { + requests.add(request); + responseObserver.onNext(((Empty) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method DeleteSubscription, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Empty.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void modifyAckDeadline( + ModifyAckDeadlineRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Empty) { + requests.add(request); + responseObserver.onNext(((Empty) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method ModifyAckDeadline, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Empty.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void acknowledge(AcknowledgeRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Empty) { + requests.add(request); + responseObserver.onNext(((Empty) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method Acknowledge, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Empty.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void pull(PullRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof PullResponse) { + requests.add(request); + responseObserver.onNext(((PullResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method Pull, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + PullResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public StreamObserver streamingPull( + final StreamObserver responseObserver) { + StreamObserver requestObserver = + new StreamObserver() { + @Override + public void onNext(StreamingPullRequest value) { + requests.add(value); + final Object response = responses.remove(); + if (response instanceof StreamingPullResponse) { + responseObserver.onNext(((StreamingPullResponse) response)); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method StreamingPull, expected %s or" + + " %s", + response == null ? "null" : response.getClass().getName(), + StreamingPullResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void onError(Throwable t) { + responseObserver.onError(t); + } + + @Override + public void onCompleted() { + responseObserver.onCompleted(); + } + }; + return requestObserver; + } + + @Override + public void modifyPushConfig( + ModifyPushConfigRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Empty) { + requests.add(request); + responseObserver.onNext(((Empty) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method ModifyPushConfig, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Empty.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void getSnapshot(GetSnapshotRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Snapshot) { + requests.add(request); + responseObserver.onNext(((Snapshot) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method GetSnapshot, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Snapshot.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void listSnapshots( + ListSnapshotsRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof ListSnapshotsResponse) { + requests.add(request); + responseObserver.onNext(((ListSnapshotsResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method ListSnapshots, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + ListSnapshotsResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void createSnapshot( + CreateSnapshotRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Snapshot) { + requests.add(request); + responseObserver.onNext(((Snapshot) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method CreateSnapshot, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Snapshot.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void updateSnapshot( + UpdateSnapshotRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Snapshot) { + requests.add(request); + responseObserver.onNext(((Snapshot) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method UpdateSnapshot, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Snapshot.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void deleteSnapshot( + DeleteSnapshotRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Empty) { + requests.add(request); + responseObserver.onNext(((Empty) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method DeleteSnapshot, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Empty.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void seek(SeekRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof SeekResponse) { + requests.add(request); + responseObserver.onNext(((SeekResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method Seek, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + SeekResponse.class.getName(), + Exception.class.getName()))); + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/OpenCensusUtilTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/OpenCensusUtilTest.java new file mode 100644 index 000000000000..afa316220681 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/OpenCensusUtilTest.java @@ -0,0 +1,162 @@ +/* + * Copyright 2019 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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.cloud.pubsub.v1.OpenCensusUtil.MESSAGE_RECEIVER_SPAN_NAME; +import static com.google.cloud.pubsub.v1.OpenCensusUtil.OPEN_CENSUS_MESSAGE_TRANSFORM; +import static com.google.cloud.pubsub.v1.OpenCensusUtil.TAG_CONTEXT_KEY; +import static com.google.cloud.pubsub.v1.OpenCensusUtil.TRACE_CONTEXT_KEY; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.fail; + +import com.google.common.base.Stopwatch; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import io.opencensus.common.Scope; +import io.opencensus.tags.TagContext; +import io.opencensus.tags.TagKey; +import io.opencensus.tags.TagValue; +import io.opencensus.tags.Tagger; +import io.opencensus.tags.Tags; +import io.opencensus.trace.Link; +import io.opencensus.trace.SpanContext; +import io.opencensus.trace.Tracer; +import io.opencensus.trace.Tracing; +import io.opencensus.trace.export.RunningSpanStore; +import io.opencensus.trace.export.RunningSpanStore.Filter; +import io.opencensus.trace.export.SpanData; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.TimeUnit; +import org.junit.BeforeClass; +import org.junit.Test; + +/** Tests for {@link OpenCensusUtil}. */ +public class OpenCensusUtilTest { + private static final Tagger tagger = Tags.getTagger(); + private static final Tracer tracer = Tracing.getTracer(); + private static final TagKey TEST_TAG_KEY = TagKey.create("TEST_TAG_KEY"); + private static final TagValue TEST_TAG_VAL = TagValue.create("TEST_TAG_VAL"); + private static final String TEST_PARENT_LINK_NAME = "TEST_PARENT_LINK"; + + @BeforeClass + public static void configureOpenCensus() { + Tracing.getExportComponent().getRunningSpanStore().setMaxNumberOfSpans(5); + } + + // Verifies that trace contexts propagated as an attribute are set as the parent link in the + // message receiver and that the tag context is not change (for now). + @Test + public void testOpenCensusMessageReceiver() { + PubsubMessage message; + SpanContext publisherContext; + try (Scope traceScope = OpenCensusUtil.createScopedSpan(TEST_PARENT_LINK_NAME); + Scope tagScope = createScopeTags()) { + message = OPEN_CENSUS_MESSAGE_TRANSFORM.apply(generatePubsubMessage(500)); + publisherContext = tracer.getCurrentSpan().getContext(); + } + MessageReceiver receiver = + new OpenCensusUtil.OpenCensusMessageReceiver( + new TestMessageReceiver(publisherContext, tagger.getCurrentTagContext())); + receiver.receiveMessage(message, new NoOpAckReplyConsumer()); + } + + // Verifies that the current span context is added as an attribute and that (for now) the tag + // context is not added as an attribute. + @Test + public void testOpenCensusMessageTransformer() { + try (Scope traceScope = OpenCensusUtil.createScopedSpan("PublisherTestRoot"); + Scope tagScope = createScopeTags()) { + PubsubMessage originalMessage = generatePubsubMessage(500); + assertEquals("", originalMessage.getAttributesOrDefault(TRACE_CONTEXT_KEY, "")); + assertEquals("", originalMessage.getAttributesOrDefault(TAG_CONTEXT_KEY, "")); + + PubsubMessage attributedMessage = OPEN_CENSUS_MESSAGE_TRANSFORM.apply(originalMessage); + String encodedSpanContext = + OpenCensusUtil.encodeSpanContext(tracer.getCurrentSpan().getContext()); + assertNotEquals("", encodedSpanContext); + assertEquals( + encodedSpanContext, attributedMessage.getAttributesOrDefault(TRACE_CONTEXT_KEY, "")); + assertEquals("", attributedMessage.getAttributesOrDefault(TAG_CONTEXT_KEY, "")); + } + } + + private static PubsubMessage generatePubsubMessage(int size) { + byte[] bytes = new byte[size]; + for (int i = 0; i < size; i++) { + bytes[i] = (byte) (120 + i % 20); + } + return PubsubMessage.newBuilder().setData(ByteString.copyFrom(bytes)).build(); + } + + private static Scope createScopeTags() { + return tagger.currentBuilder().put(TEST_TAG_KEY, TEST_TAG_VAL).buildScoped(); + } + + private static final class NoOpAckReplyConsumer implements AckReplyConsumer { + @Override + public void ack() {} + + @Override + public void nack() {} + } + + private static final class TestMessageReceiver implements MessageReceiver { + private static final RunningSpanStore runningSpanStore = + Tracing.getExportComponent().getRunningSpanStore(); + private static final Filter RECEIVER_FILTER = Filter.create(MESSAGE_RECEIVER_SPAN_NAME, 0); + + SpanContext parentLinkedSpan; + TagContext originalTagContext; + + private TestMessageReceiver(SpanContext parentLinkedSpan, TagContext originalTagContext) { + this.parentLinkedSpan = parentLinkedSpan; + this.originalTagContext = originalTagContext; + } + + @Override + public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) { + assertEquals(originalTagContext, tagger.getCurrentTagContext()); + assertSpanCount(1); + Collection spanDatas = runningSpanStore.getRunningSpans(RECEIVER_FILTER); + for (SpanData spanData : spanDatas) { + List links = spanData.getLinks().getLinks(); + assertEquals(links.size(), 1); + Link link = links.get(0); + assertEquals(Link.Type.PARENT_LINKED_SPAN, link.getType()); + assertEquals(parentLinkedSpan.getTraceId(), link.getTraceId()); + assertEquals(parentLinkedSpan.getSpanId(), link.getSpanId()); + } + consumer.ack(); + } + + private void assertSpanCount(int expected) { + Stopwatch watch = Stopwatch.createStarted(); + while (true) { + Collection spanDatas = runningSpanStore.getRunningSpans(RECEIVER_FILTER); + if (spanDatas.size() == expected) { + break; + } + Thread.yield(); + if (watch.elapsed(TimeUnit.SECONDS) >= 5) { + fail("failed to get spans in 5 seconds"); + } + } + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/OpenTelemetryTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/OpenTelemetryTest.java new file mode 100644 index 000000000000..52351ddef466 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/OpenTelemetryTest.java @@ -0,0 +1,665 @@ +/* + * 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. + */ + +package com.google.cloud.pubsub.v1; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.TopicName; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.api.trace.StatusCode; +import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.sdk.testing.assertj.AttributesAssert; +import io.opentelemetry.sdk.testing.assertj.EventDataAssert; +import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; +import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; +import io.opentelemetry.sdk.testing.junit4.OpenTelemetryRule; +import io.opentelemetry.sdk.trace.data.LinkData; +import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.sdk.trace.data.StatusData; +import java.util.Arrays; +import java.util.List; +import org.junit.Test; + +public class OpenTelemetryTest { + private static final TopicName FULL_TOPIC_NAME = + TopicName.parse("projects/test-project/topics/test-topic"); + private static final SubscriptionName FULL_SUBSCRIPTION_NAME = + SubscriptionName.parse("projects/test-project/subscriptions/test-sub"); + private static final String PROJECT_NAME = "test-project"; + private static final String ORDERING_KEY = "abc"; + private static final String MESSAGE_ID = "m0"; + private static final String ACK_ID = "def"; + private static final int DELIVERY_ATTEMPT = 1; + private static final int ACK_DEADLINE = 10; + private static final boolean EXACTLY_ONCE_ENABLED = true; + + private static final String PUBLISHER_SPAN_NAME = FULL_TOPIC_NAME.getTopic() + " create"; + private static final String PUBLISH_FLOW_CONTROL_SPAN_NAME = "publisher flow control"; + private static final String PUBLISH_BATCHING_SPAN_NAME = "publisher batching"; + private static final String PUBLISH_RPC_SPAN_NAME = FULL_TOPIC_NAME.getTopic() + " publish"; + private static final String PUBLISH_START_EVENT = "publish start"; + private static final String PUBLISH_END_EVENT = "publish end"; + + private static final String SUBSCRIBER_SPAN_NAME = + FULL_SUBSCRIPTION_NAME.getSubscription() + " subscribe"; + private static final String SUBSCRIBE_CONCURRENCY_CONTROL_SPAN_NAME = + "subscriber concurrency control"; + private static final String SUBSCRIBE_SCHEDULER_SPAN_NAME = "subscriber scheduler"; + private static final String SUBSCRIBE_PROCESS_SPAN_NAME = + FULL_SUBSCRIPTION_NAME.getSubscription() + " process"; + private static final String SUBSCRIBE_MODACK_RPC_SPAN_NAME = + FULL_SUBSCRIPTION_NAME.getSubscription() + " modack"; + private static final String SUBSCRIBE_ACK_RPC_SPAN_NAME = + FULL_SUBSCRIPTION_NAME.getSubscription() + " ack"; + private static final String SUBSCRIBE_NACK_RPC_SPAN_NAME = + FULL_SUBSCRIPTION_NAME.getSubscription() + " nack"; + + private static final String PROCESS_ACTION = "ack"; + private static final String MODACK_START_EVENT = "modack start"; + private static final String MODACK_END_EVENT = "modack end"; + private static final String NACK_START_EVENT = "nack start"; + private static final String NACK_END_EVENT = "nack end"; + private static final String ACK_START_EVENT = "ack start"; + private static final String ACK_END_EVENT = "ack end"; + + private static final String MESSAGING_SYSTEM_ATTR_KEY = "messaging.system"; + private static final String MESSAGING_DESTINATION_NAME_ATTR_KEY = "messaging.destination.name"; + private static final String CODE_FUNCTION_ATTR_KEY = "code.function"; + private static final String MESSAGING_OPERATION_ATTR_KEY = "messaging.operation"; + private static final String MESSAGING_BATCH_MESSAGE_COUNT_ATTR_KEY = + "messaging.batch.message_count"; + private static final String MESSAGING_MESSAGE_ID_ATTR_KEY = "messaging.message.id"; + private static final String MESSAGING_SYSTEM_VALUE = "gcp_pubsub"; + private static final String PROJECT_ATTR_KEY = "gcp.project_id"; + private static final String MESSAGE_SIZE_ATTR_KEY = "messaging.message.body.size"; + private static final String ORDERING_KEY_ATTR_KEY = "messaging.gcp_pubsub.message.ordering_key"; + private static final String ACK_DEADLINE_ATTR_KEY = "messaging.gcp_pubsub.message.ack_deadline"; + private static final String RECEIPT_MODACK_ATTR_KEY = "messaging.gcp_pubsub.is_receipt_modack"; + private static final String MESSAGE_ACK_ID_ATTR_KEY = "messaging.gcp_pubsub.message.ack_id"; + private static final String MESSAGE_EXACTLY_ONCE_ATTR_KEY = + "messaging.gcp_pubsub.message.exactly_once_delivery"; + private static final String MESSAGE_RESULT_ATTR_KEY = "messaging.gcp_pubsub.result"; + private static final String MESSAGE_DELIVERY_ATTEMPT_ATTR_KEY = + "messaging.gcp_pubsub.message.delivery_attempt"; + + private static final String TRACEPARENT_ATTRIBUTE = "googclient_traceparent"; + + private static final OpenTelemetryRule openTelemetryTesting = OpenTelemetryRule.create(); + + @Test + public void testPublishSpansSuccess() { + openTelemetryTesting.clearSpans(); + + PubsubMessageWrapper messageWrapper = + PubsubMessageWrapper.newBuilder(getPubsubMessage(), FULL_TOPIC_NAME).build(); + List messageWrappers = Arrays.asList(messageWrapper); + + long messageSize = messageWrapper.getPubsubMessage().getData().size(); + Tracer openTelemetryTracer = openTelemetryTesting.getOpenTelemetry().getTracer("test"); + OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(openTelemetryTracer, true); + + // Call all span start/end methods in the expected order + tracer.startPublisherSpan(messageWrapper); + tracer.startPublishFlowControlSpan(messageWrapper); + tracer.endPublishFlowControlSpan(messageWrapper); + tracer.startPublishBatchingSpan(messageWrapper); + tracer.endPublishBatchingSpan(messageWrapper); + Span publishRpcSpan = tracer.startPublishRpcSpan(FULL_TOPIC_NAME, messageWrappers); + tracer.endPublishRpcSpan(publishRpcSpan); + tracer.setPublisherMessageIdSpanAttribute(messageWrapper, MESSAGE_ID); + tracer.endPublisherSpan(messageWrapper); + + List allSpans = openTelemetryTesting.getSpans(); + assertEquals(4, allSpans.size()); + SpanData flowControlSpanData = allSpans.get(0); + SpanData batchingSpanData = allSpans.get(1); + SpanData publishRpcSpanData = allSpans.get(2); + SpanData publisherSpanData = allSpans.get(3); + + SpanDataAssert flowControlSpanDataAssert = + OpenTelemetryAssertions.assertThat(flowControlSpanData); + flowControlSpanDataAssert + .hasName(PUBLISH_FLOW_CONTROL_SPAN_NAME) + .hasParent(publisherSpanData) + .hasEnded(); + + SpanDataAssert batchingSpanDataAssert = OpenTelemetryAssertions.assertThat(batchingSpanData); + batchingSpanDataAssert + .hasName(PUBLISH_BATCHING_SPAN_NAME) + .hasParent(publisherSpanData) + .hasEnded(); + + // Check span data, links, and attributes for the publish RPC span + SpanDataAssert publishRpcSpanDataAssert = + OpenTelemetryAssertions.assertThat(publishRpcSpanData); + publishRpcSpanDataAssert + .hasName(PUBLISH_RPC_SPAN_NAME) + .hasKind(SpanKind.CLIENT) + .hasNoParent() + .hasEnded(); + + List publishRpcLinks = publishRpcSpanData.getLinks(); + assertEquals(messageWrappers.size(), publishRpcLinks.size()); + assertEquals(publisherSpanData.getSpanContext(), publishRpcLinks.get(0).getSpanContext()); + + assertEquals(6, publishRpcSpanData.getAttributes().size()); + AttributesAssert publishRpcSpanAttributesAssert = + OpenTelemetryAssertions.assertThat(publishRpcSpanData.getAttributes()); + publishRpcSpanAttributesAssert + .containsEntry(MESSAGING_SYSTEM_ATTR_KEY, MESSAGING_SYSTEM_VALUE) + .containsEntry(MESSAGING_DESTINATION_NAME_ATTR_KEY, FULL_TOPIC_NAME.getTopic()) + .containsEntry(PROJECT_ATTR_KEY, FULL_TOPIC_NAME.getProject()) + .containsEntry(CODE_FUNCTION_ATTR_KEY, "publishCall") + .containsEntry(MESSAGING_OPERATION_ATTR_KEY, "publish") + .containsEntry(MESSAGING_BATCH_MESSAGE_COUNT_ATTR_KEY, messageWrappers.size()); + + // Check span data, events, links, and attributes for the publisher create span + SpanDataAssert publisherSpanDataAssert = OpenTelemetryAssertions.assertThat(publisherSpanData); + publisherSpanDataAssert + .hasName(PUBLISHER_SPAN_NAME) + .hasKind(SpanKind.PRODUCER) + .hasNoParent() + .hasEnded(); + + assertEquals(2, publisherSpanData.getEvents().size()); + EventDataAssert startEventAssert = + OpenTelemetryAssertions.assertThat(publisherSpanData.getEvents().get(0)); + startEventAssert.hasName(PUBLISH_START_EVENT); + EventDataAssert endEventAssert = + OpenTelemetryAssertions.assertThat(publisherSpanData.getEvents().get(1)); + endEventAssert.hasName(PUBLISH_END_EVENT); + + List publisherLinks = publisherSpanData.getLinks(); + assertEquals(1, publisherLinks.size()); + assertEquals(publishRpcSpanData.getSpanContext(), publisherLinks.get(0).getSpanContext()); + + assertEquals(8, publisherSpanData.getAttributes().size()); + AttributesAssert publisherSpanAttributesAssert = + OpenTelemetryAssertions.assertThat(publisherSpanData.getAttributes()); + publisherSpanAttributesAssert + .containsEntry(MESSAGING_SYSTEM_ATTR_KEY, MESSAGING_SYSTEM_VALUE) + .containsEntry(MESSAGING_DESTINATION_NAME_ATTR_KEY, FULL_TOPIC_NAME.getTopic()) + .containsEntry(PROJECT_ATTR_KEY, PROJECT_NAME) + .containsEntry(CODE_FUNCTION_ATTR_KEY, "publish") + .containsEntry(MESSAGING_OPERATION_ATTR_KEY, "create") + .containsEntry(ORDERING_KEY_ATTR_KEY, ORDERING_KEY) + .containsEntry(MESSAGE_SIZE_ATTR_KEY, messageSize) + .containsEntry(MESSAGING_MESSAGE_ID_ATTR_KEY, MESSAGE_ID); + + // Check that the message has the attribute containing the trace context. + PubsubMessage message = messageWrapper.getPubsubMessage(); + assertEquals(1, message.getAttributesMap().size()); + assertTrue(message.containsAttributes(TRACEPARENT_ATTRIBUTE)); + assertTrue( + message + .getAttributesOrDefault(TRACEPARENT_ATTRIBUTE, "") + .contains(publisherSpanData.getTraceId())); + assertTrue( + message + .getAttributesOrDefault(TRACEPARENT_ATTRIBUTE, "") + .contains(publisherSpanData.getSpanId())); + } + + @Test + public void testPublishFlowControlSpanFailure() { + openTelemetryTesting.clearSpans(); + + PubsubMessageWrapper messageWrapper = + PubsubMessageWrapper.newBuilder(getPubsubMessage(), FULL_TOPIC_NAME).build(); + + Tracer openTelemetryTracer = openTelemetryTesting.getOpenTelemetry().getTracer("test"); + OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(openTelemetryTracer, true); + + tracer.startPublisherSpan(messageWrapper); + tracer.startPublishFlowControlSpan(messageWrapper); + + Exception e = new Exception("test-exception"); + tracer.setPublishFlowControlSpanException(messageWrapper, e); + + List allSpans = openTelemetryTesting.getSpans(); + assertEquals(2, allSpans.size()); + SpanData flowControlSpanData = allSpans.get(0); + SpanData publisherSpanData = allSpans.get(1); + + SpanDataAssert flowControlSpanDataAssert = + OpenTelemetryAssertions.assertThat(flowControlSpanData); + StatusData expectedStatus = + StatusData.create(StatusCode.ERROR, "Exception thrown during publish flow control."); + flowControlSpanDataAssert + .hasName(PUBLISH_FLOW_CONTROL_SPAN_NAME) + .hasParent(publisherSpanData) + .hasStatus(expectedStatus) + .hasException(e) + .hasEnded(); + + SpanDataAssert publisherSpanDataAssert = OpenTelemetryAssertions.assertThat(publisherSpanData); + publisherSpanDataAssert + .hasName(PUBLISHER_SPAN_NAME) + .hasKind(SpanKind.PRODUCER) + .hasNoParent() + .hasEnded(); + } + + @Test + public void testPublishRpcSpanFailure() { + openTelemetryTesting.clearSpans(); + + PubsubMessageWrapper messageWrapper = + PubsubMessageWrapper.newBuilder(getPubsubMessage(), FULL_TOPIC_NAME).build(); + + List messageWrappers = Arrays.asList(messageWrapper); + Tracer openTelemetryTracer = openTelemetryTesting.getOpenTelemetry().getTracer("test"); + OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(openTelemetryTracer, true); + + tracer.startPublisherSpan(messageWrapper); + Span publishRpcSpan = tracer.startPublishRpcSpan(FULL_TOPIC_NAME, messageWrappers); + + Exception e = new Exception("test-exception"); + tracer.setPublishRpcSpanException(publishRpcSpan, e); + tracer.endPublisherSpan(messageWrapper); + + List allSpans = openTelemetryTesting.getSpans(); + assertEquals(2, allSpans.size()); + SpanData rpcSpanData = allSpans.get(0); + SpanData publisherSpanData = allSpans.get(1); + + SpanDataAssert rpcSpanDataAssert = OpenTelemetryAssertions.assertThat(rpcSpanData); + StatusData expectedStatus = + StatusData.create(StatusCode.ERROR, "Exception thrown on publish RPC."); + rpcSpanDataAssert + .hasName(PUBLISH_RPC_SPAN_NAME) + .hasKind(SpanKind.CLIENT) + .hasStatus(expectedStatus) + .hasException(e) + .hasEnded(); + + SpanDataAssert publisherSpanDataAssert = OpenTelemetryAssertions.assertThat(publisherSpanData); + publisherSpanDataAssert + .hasName(PUBLISHER_SPAN_NAME) + .hasKind(SpanKind.PRODUCER) + .hasNoParent() + .hasEnded(); + } + + @Test + public void testSubscribeSpansSuccess() { + openTelemetryTesting.clearSpans(); + + Tracer openTelemetryTracer = openTelemetryTesting.getOpenTelemetry().getTracer("test"); + OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(openTelemetryTracer, true); + + PubsubMessageWrapper publishMessageWrapper = + PubsubMessageWrapper.newBuilder(getPubsubMessage(), FULL_TOPIC_NAME).build(); + // Initialize the Publisher span to inject the context in the message + tracer.startPublisherSpan(publishMessageWrapper); + tracer.endPublisherSpan(publishMessageWrapper); + + PubsubMessage publishedMessage = + publishMessageWrapper.getPubsubMessage().toBuilder().setMessageId(MESSAGE_ID).build(); + PubsubMessageWrapper subscribeMessageWrapper = + PubsubMessageWrapper.newBuilder(publishedMessage, FULL_SUBSCRIPTION_NAME, ACK_ID, 1) + .build(); + List subscribeMessageWrappers = Arrays.asList(subscribeMessageWrapper); + + long messageSize = subscribeMessageWrapper.getPubsubMessage().getData().size(); + + // Call all span start/end methods in the expected order + tracer.startSubscriberSpan(subscribeMessageWrapper, EXACTLY_ONCE_ENABLED); + tracer.startSubscribeConcurrencyControlSpan(subscribeMessageWrapper); + tracer.endSubscribeConcurrencyControlSpan(subscribeMessageWrapper); + tracer.startSubscribeSchedulerSpan(subscribeMessageWrapper); + tracer.endSubscribeSchedulerSpan(subscribeMessageWrapper); + tracer.startSubscribeProcessSpan(subscribeMessageWrapper); + tracer.endSubscribeProcessSpan(subscribeMessageWrapper, PROCESS_ACTION); + Span subscribeModackRpcSpan = + tracer.startSubscribeRpcSpan( + FULL_SUBSCRIPTION_NAME, "modack", subscribeMessageWrappers, ACK_DEADLINE, true); + tracer.endSubscribeRpcSpan(subscribeModackRpcSpan); + tracer.addEndRpcEvent(subscribeMessageWrapper, true, true, ACK_DEADLINE); + Span subscribeAckRpcSpan = + tracer.startSubscribeRpcSpan( + FULL_SUBSCRIPTION_NAME, "ack", subscribeMessageWrappers, 0, false); + tracer.endSubscribeRpcSpan(subscribeAckRpcSpan); + tracer.addEndRpcEvent(subscribeMessageWrapper, true, false, 0); + Span subscribeNackRpcSpan = + tracer.startSubscribeRpcSpan( + FULL_SUBSCRIPTION_NAME, "nack", subscribeMessageWrappers, 0, false); + tracer.endSubscribeRpcSpan(subscribeNackRpcSpan); + tracer.addEndRpcEvent(subscribeMessageWrapper, true, true, 0); + tracer.endSubscriberSpan(subscribeMessageWrapper); + + List allSpans = openTelemetryTesting.getSpans(); + assertEquals(8, allSpans.size()); + + SpanData publisherSpanData = allSpans.get(0); + SpanData concurrencyControlSpanData = allSpans.get(1); + SpanData schedulerSpanData = allSpans.get(2); + SpanData processSpanData = allSpans.get(3); + SpanData modackRpcSpanData = allSpans.get(4); + SpanData ackRpcSpanData = allSpans.get(5); + SpanData nackRpcSpanData = allSpans.get(6); + SpanData subscriberSpanData = allSpans.get(7); + + SpanDataAssert concurrencyControlSpanDataAssert = + OpenTelemetryAssertions.assertThat(concurrencyControlSpanData); + concurrencyControlSpanDataAssert + .hasName(SUBSCRIBE_CONCURRENCY_CONTROL_SPAN_NAME) + .hasParent(subscriberSpanData) + .hasEnded(); + + SpanDataAssert schedulerSpanDataAssert = OpenTelemetryAssertions.assertThat(schedulerSpanData); + schedulerSpanDataAssert + .hasName(SUBSCRIBE_SCHEDULER_SPAN_NAME) + .hasParent(subscriberSpanData) + .hasEnded(); + + SpanDataAssert processSpanDataAssert = OpenTelemetryAssertions.assertThat(processSpanData); + processSpanDataAssert + .hasName(SUBSCRIBE_PROCESS_SPAN_NAME) + .hasParent(subscriberSpanData) + .hasEnded(); + + assertEquals(1, processSpanData.getEvents().size()); + EventDataAssert actionCalledEventAssert = + OpenTelemetryAssertions.assertThat(processSpanData.getEvents().get(0)); + actionCalledEventAssert.hasName(PROCESS_ACTION + " called"); + + // Check span data, links, and attributes for the modack RPC span + SpanDataAssert modackRpcSpanDataAssert = OpenTelemetryAssertions.assertThat(modackRpcSpanData); + modackRpcSpanDataAssert + .hasName(SUBSCRIBE_MODACK_RPC_SPAN_NAME) + .hasKind(SpanKind.CLIENT) + .hasNoParent() + .hasEnded(); + + List modackRpcLinks = modackRpcSpanData.getLinks(); + assertEquals(subscribeMessageWrappers.size(), modackRpcLinks.size()); + assertEquals(subscriberSpanData.getSpanContext(), modackRpcLinks.get(0).getSpanContext()); + + assertEquals(8, modackRpcSpanData.getAttributes().size()); + AttributesAssert modackRpcSpanAttributesAssert = + OpenTelemetryAssertions.assertThat(modackRpcSpanData.getAttributes()); + modackRpcSpanAttributesAssert + .containsEntry(MESSAGING_SYSTEM_ATTR_KEY, MESSAGING_SYSTEM_VALUE) + .containsEntry( + MESSAGING_DESTINATION_NAME_ATTR_KEY, FULL_SUBSCRIPTION_NAME.getSubscription()) + .containsEntry(PROJECT_ATTR_KEY, FULL_TOPIC_NAME.getProject()) + .containsEntry(CODE_FUNCTION_ATTR_KEY, "sendModAckOperations") + .containsEntry(MESSAGING_OPERATION_ATTR_KEY, "modack") + .containsEntry(MESSAGING_BATCH_MESSAGE_COUNT_ATTR_KEY, subscribeMessageWrappers.size()) + .containsEntry(ACK_DEADLINE_ATTR_KEY, 10) + .containsEntry(RECEIPT_MODACK_ATTR_KEY, true); + + // Check span data, links, and attributes for the ack RPC span + SpanDataAssert ackRpcSpanDataAssert = OpenTelemetryAssertions.assertThat(ackRpcSpanData); + ackRpcSpanDataAssert + .hasName(SUBSCRIBE_ACK_RPC_SPAN_NAME) + .hasKind(SpanKind.CLIENT) + .hasNoParent() + .hasEnded(); + + List ackRpcLinks = ackRpcSpanData.getLinks(); + assertEquals(subscribeMessageWrappers.size(), ackRpcLinks.size()); + assertEquals(subscriberSpanData.getSpanContext(), ackRpcLinks.get(0).getSpanContext()); + + assertEquals(6, ackRpcSpanData.getAttributes().size()); + AttributesAssert ackRpcSpanAttributesAssert = + OpenTelemetryAssertions.assertThat(ackRpcSpanData.getAttributes()); + ackRpcSpanAttributesAssert + .containsEntry(MESSAGING_SYSTEM_ATTR_KEY, MESSAGING_SYSTEM_VALUE) + .containsEntry( + MESSAGING_DESTINATION_NAME_ATTR_KEY, FULL_SUBSCRIPTION_NAME.getSubscription()) + .containsEntry(PROJECT_ATTR_KEY, FULL_TOPIC_NAME.getProject()) + .containsEntry(CODE_FUNCTION_ATTR_KEY, "sendAckOperations") + .containsEntry(MESSAGING_OPERATION_ATTR_KEY, "ack") + .containsEntry(MESSAGING_BATCH_MESSAGE_COUNT_ATTR_KEY, subscribeMessageWrappers.size()); + + // Check span data, links, and attributes for the nack RPC span + SpanDataAssert nackRpcSpanDataAssert = OpenTelemetryAssertions.assertThat(nackRpcSpanData); + nackRpcSpanDataAssert + .hasName(SUBSCRIBE_NACK_RPC_SPAN_NAME) + .hasKind(SpanKind.CLIENT) + .hasNoParent() + .hasEnded(); + + List nackRpcLinks = nackRpcSpanData.getLinks(); + assertEquals(subscribeMessageWrappers.size(), nackRpcLinks.size()); + assertEquals(subscriberSpanData.getSpanContext(), nackRpcLinks.get(0).getSpanContext()); + + assertEquals(6, nackRpcSpanData.getAttributes().size()); + AttributesAssert nackRpcSpanAttributesAssert = + OpenTelemetryAssertions.assertThat(nackRpcSpanData.getAttributes()); + nackRpcSpanAttributesAssert + .containsEntry(MESSAGING_SYSTEM_ATTR_KEY, MESSAGING_SYSTEM_VALUE) + .containsEntry( + MESSAGING_DESTINATION_NAME_ATTR_KEY, FULL_SUBSCRIPTION_NAME.getSubscription()) + .containsEntry(PROJECT_ATTR_KEY, FULL_TOPIC_NAME.getProject()) + .containsEntry(CODE_FUNCTION_ATTR_KEY, "sendModAckOperations") + .containsEntry(MESSAGING_OPERATION_ATTR_KEY, "nack") + .containsEntry(MESSAGING_BATCH_MESSAGE_COUNT_ATTR_KEY, subscribeMessageWrappers.size()); + + // Check span data, events, links, and attributes for the publisher create span + SpanDataAssert subscriberSpanDataAssert = + OpenTelemetryAssertions.assertThat(subscriberSpanData); + subscriberSpanDataAssert + .hasName(SUBSCRIBER_SPAN_NAME) + .hasKind(SpanKind.CONSUMER) + .hasParent(publisherSpanData) + .hasEnded(); + + assertEquals(6, subscriberSpanData.getEvents().size()); + EventDataAssert startModackEventAssert = + OpenTelemetryAssertions.assertThat(subscriberSpanData.getEvents().get(0)); + startModackEventAssert.hasName(MODACK_START_EVENT); + EventDataAssert endModackEventAssert = + OpenTelemetryAssertions.assertThat(subscriberSpanData.getEvents().get(1)); + endModackEventAssert.hasName(MODACK_END_EVENT); + EventDataAssert startAckEventAssert = + OpenTelemetryAssertions.assertThat(subscriberSpanData.getEvents().get(2)); + startAckEventAssert.hasName(ACK_START_EVENT); + EventDataAssert endAckEventAssert = + OpenTelemetryAssertions.assertThat(subscriberSpanData.getEvents().get(3)); + endAckEventAssert.hasName(ACK_END_EVENT); + EventDataAssert startNackEventAssert = + OpenTelemetryAssertions.assertThat(subscriberSpanData.getEvents().get(4)); + startNackEventAssert.hasName(NACK_START_EVENT); + EventDataAssert endNackEventAssert = + OpenTelemetryAssertions.assertThat(subscriberSpanData.getEvents().get(5)); + endNackEventAssert.hasName(NACK_END_EVENT); + + List subscriberLinks = subscriberSpanData.getLinks(); + assertEquals(3, subscriberLinks.size()); + assertEquals(modackRpcSpanData.getSpanContext(), subscriberLinks.get(0).getSpanContext()); + assertEquals(ackRpcSpanData.getSpanContext(), subscriberLinks.get(1).getSpanContext()); + assertEquals(nackRpcSpanData.getSpanContext(), subscriberLinks.get(2).getSpanContext()); + + assertEquals(11, subscriberSpanData.getAttributes().size()); + AttributesAssert subscriberSpanAttributesAssert = + OpenTelemetryAssertions.assertThat(subscriberSpanData.getAttributes()); + subscriberSpanAttributesAssert + .containsEntry(MESSAGING_SYSTEM_ATTR_KEY, MESSAGING_SYSTEM_VALUE) + .containsEntry( + MESSAGING_DESTINATION_NAME_ATTR_KEY, FULL_SUBSCRIPTION_NAME.getSubscription()) + .containsEntry(PROJECT_ATTR_KEY, PROJECT_NAME) + .containsEntry(CODE_FUNCTION_ATTR_KEY, "onResponse") + .containsEntry(MESSAGE_SIZE_ATTR_KEY, messageSize) + .containsEntry(ORDERING_KEY_ATTR_KEY, ORDERING_KEY) + .containsEntry(MESSAGE_ACK_ID_ATTR_KEY, ACK_ID) + .containsEntry(MESSAGE_DELIVERY_ATTEMPT_ATTR_KEY, DELIVERY_ATTEMPT) + .containsEntry(MESSAGE_EXACTLY_ONCE_ATTR_KEY, EXACTLY_ONCE_ENABLED) + .containsEntry(MESSAGE_RESULT_ATTR_KEY, PROCESS_ACTION) + .containsEntry(MESSAGING_MESSAGE_ID_ATTR_KEY, MESSAGE_ID); + } + + @Test + public void testSubscribeConcurrencyControlSpanFailure() { + openTelemetryTesting.clearSpans(); + + PubsubMessageWrapper messageWrapper = + PubsubMessageWrapper.newBuilder( + getPubsubMessage(), FULL_SUBSCRIPTION_NAME, ACK_ID, DELIVERY_ATTEMPT) + .build(); + + Tracer openTelemetryTracer = openTelemetryTesting.getOpenTelemetry().getTracer("test"); + OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(openTelemetryTracer, true); + + tracer.startSubscriberSpan(messageWrapper, EXACTLY_ONCE_ENABLED); + tracer.startSubscribeConcurrencyControlSpan(messageWrapper); + + Exception e = new Exception("test-exception"); + tracer.setSubscribeConcurrencyControlSpanException(messageWrapper, e); + + List allSpans = openTelemetryTesting.getSpans(); + assertEquals(2, allSpans.size()); + SpanData concurrencyControlSpanData = allSpans.get(0); + SpanData subscriberSpanData = allSpans.get(1); + + SpanDataAssert concurrencyControlSpanDataAssert = + OpenTelemetryAssertions.assertThat(concurrencyControlSpanData); + StatusData expectedStatus = + StatusData.create( + StatusCode.ERROR, "Exception thrown during subscribe concurrency control."); + concurrencyControlSpanDataAssert + .hasName(SUBSCRIBE_CONCURRENCY_CONTROL_SPAN_NAME) + .hasParent(subscriberSpanData) + .hasStatus(expectedStatus) + .hasException(e) + .hasEnded(); + + SpanDataAssert subscriberSpanDataAssert = + OpenTelemetryAssertions.assertThat(subscriberSpanData); + subscriberSpanDataAssert + .hasName(SUBSCRIBER_SPAN_NAME) + .hasKind(SpanKind.CONSUMER) + .hasNoParent() + .hasEnded(); + } + + @Test + public void testSubscriberSpanFailure() { + openTelemetryTesting.clearSpans(); + + PubsubMessageWrapper messageWrapper = + PubsubMessageWrapper.newBuilder( + getPubsubMessage(), FULL_SUBSCRIPTION_NAME, ACK_ID, DELIVERY_ATTEMPT) + .build(); + + Tracer openTelemetryTracer = openTelemetryTesting.getOpenTelemetry().getTracer("test"); + OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(openTelemetryTracer, true); + + tracer.startSubscriberSpan(messageWrapper, EXACTLY_ONCE_ENABLED); + + Exception e = new Exception("test-exception"); + tracer.setSubscriberSpanException(messageWrapper, e, "Test exception"); + + List allSpans = openTelemetryTesting.getSpans(); + assertEquals(1, allSpans.size()); + SpanData subscriberSpanData = allSpans.get(0); + + StatusData expectedStatus = StatusData.create(StatusCode.ERROR, "Test exception"); + SpanDataAssert subscriberSpanDataAssert = + OpenTelemetryAssertions.assertThat(subscriberSpanData); + subscriberSpanDataAssert + .hasName(SUBSCRIBER_SPAN_NAME) + .hasKind(SpanKind.CONSUMER) + .hasNoParent() + .hasStatus(expectedStatus) + .hasException(e) + .hasEnded(); + } + + @Test + public void testSubscribeRpcSpanFailures() { + openTelemetryTesting.clearSpans(); + + PubsubMessageWrapper messageWrapper = + PubsubMessageWrapper.newBuilder( + getPubsubMessage(), FULL_SUBSCRIPTION_NAME, ACK_ID, DELIVERY_ATTEMPT) + .build(); + List messageWrappers = Arrays.asList(messageWrapper); + + Tracer openTelemetryTracer = openTelemetryTesting.getOpenTelemetry().getTracer("test"); + OpenTelemetryPubsubTracer tracer = new OpenTelemetryPubsubTracer(openTelemetryTracer, true); + + tracer.startSubscriberSpan(messageWrapper, EXACTLY_ONCE_ENABLED); + Span subscribeModackRpcSpan = + tracer.startSubscribeRpcSpan( + FULL_SUBSCRIPTION_NAME, "modack", messageWrappers, ACK_DEADLINE, true); + Span subscribeAckRpcSpan = + tracer.startSubscribeRpcSpan(FULL_SUBSCRIPTION_NAME, "ack", messageWrappers, 0, false); + Span subscribeNackRpcSpan = + tracer.startSubscribeRpcSpan(FULL_SUBSCRIPTION_NAME, "nack", messageWrappers, 0, false); + + Exception e = new Exception("test-exception"); + tracer.setSubscribeRpcSpanException(subscribeModackRpcSpan, true, ACK_DEADLINE, e); + tracer.setSubscribeRpcSpanException(subscribeAckRpcSpan, false, 0, e); + tracer.setSubscribeRpcSpanException(subscribeNackRpcSpan, true, 0, e); + tracer.endSubscriberSpan(messageWrapper); + + List allSpans = openTelemetryTesting.getSpans(); + assertEquals(4, allSpans.size()); + SpanData modackSpanData = allSpans.get(0); + SpanData ackSpanData = allSpans.get(1); + SpanData nackSpanData = allSpans.get(2); + SpanData subscriberSpanData = allSpans.get(3); + + StatusData expectedModackStatus = + StatusData.create(StatusCode.ERROR, "Exception thrown on modack RPC."); + SpanDataAssert modackSpanDataAssert = OpenTelemetryAssertions.assertThat(modackSpanData); + modackSpanDataAssert + .hasName(SUBSCRIBE_MODACK_RPC_SPAN_NAME) + .hasKind(SpanKind.CLIENT) + .hasNoParent() + .hasStatus(expectedModackStatus) + .hasException(e) + .hasEnded(); + + StatusData expectedAckStatus = + StatusData.create(StatusCode.ERROR, "Exception thrown on ack RPC."); + SpanDataAssert ackSpanDataAssert = OpenTelemetryAssertions.assertThat(ackSpanData); + ackSpanDataAssert + .hasName(SUBSCRIBE_ACK_RPC_SPAN_NAME) + .hasKind(SpanKind.CLIENT) + .hasNoParent() + .hasStatus(expectedAckStatus) + .hasException(e) + .hasEnded(); + + StatusData expectedNackStatus = + StatusData.create(StatusCode.ERROR, "Exception thrown on nack RPC."); + SpanDataAssert nackSpanDataAssert = OpenTelemetryAssertions.assertThat(nackSpanData); + nackSpanDataAssert + .hasName(SUBSCRIBE_NACK_RPC_SPAN_NAME) + .hasKind(SpanKind.CLIENT) + .hasNoParent() + .hasStatus(expectedNackStatus) + .hasException(e) + .hasEnded(); + } + + private PubsubMessage getPubsubMessage() { + return PubsubMessage.newBuilder() + .setData(ByteString.copyFromUtf8("test-data")) + .setOrderingKey(ORDERING_KEY) + .build(); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/PublisherImplTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/PublisherImplTest.java new file mode 100644 index 000000000000..39155c848582 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/PublisherImplTest.java @@ -0,0 +1,1358 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import com.google.api.core.ApiFuture; +import com.google.api.gax.batching.BatchingSettings; +import com.google.api.gax.batching.FlowControlSettings; +import com.google.api.gax.batching.FlowController; +import com.google.api.gax.core.ExecutorProvider; +import com.google.api.gax.core.FixedExecutorProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.grpc.GrpcTransportChannel; +import com.google.api.gax.grpc.testing.LocalChannelProvider; +import com.google.api.gax.rpc.DataLossException; +import com.google.api.gax.rpc.FixedTransportChannelProvider; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.cloud.pubsub.v1.Publisher.Builder; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.PublishRequest; +import com.google.pubsub.v1.PublishResponse; +import com.google.pubsub.v1.PubsubMessage; +import io.grpc.ManagedChannel; +import io.grpc.Server; +import io.grpc.Status; +import io.grpc.StatusException; +import io.grpc.inprocess.InProcessChannelBuilder; +import io.grpc.inprocess.InProcessServerBuilder; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; +import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; +import io.opentelemetry.sdk.testing.junit4.OpenTelemetryRule; +import io.opentelemetry.sdk.trace.data.SpanData; +import java.time.Duration; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import org.easymock.EasyMock; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class PublisherImplTest { + + private static final ProjectTopicName TEST_TOPIC = + ProjectTopicName.of("test-project", "test-topic"); + + private static final ExecutorProvider SINGLE_THREAD_EXECUTOR = + InstantiatingExecutorProvider.newBuilder().setExecutorThreadCount(1).build(); + + private static final TransportChannelProvider TEST_CHANNEL_PROVIDER = + LocalChannelProvider.create("test-server"); + + private static final String PUBLISHER_SPAN_NAME = TEST_TOPIC.getTopic() + " create"; + private static final String PUBLISH_FLOW_CONTROL_SPAN_NAME = "publisher flow control"; + private static final String PUBLISH_BATCHING_SPAN_NAME = "publisher batching"; + private static final String PUBLISH_RPC_SPAN_NAME = TEST_TOPIC.getTopic() + " publish"; + + private FakeScheduledExecutorService fakeExecutor; + + private FakePublisherServiceImpl testPublisherServiceImpl; + + private ManagedChannel testChannel; + + private Server testServer; + + @Before + public void setUp() throws Exception { + testPublisherServiceImpl = new FakePublisherServiceImpl(); + + InProcessServerBuilder serverBuilder = InProcessServerBuilder.forName("test-server"); + serverBuilder.addService(testPublisherServiceImpl); + testServer = serverBuilder.build(); + testChannel = InProcessChannelBuilder.forName("test-server").build(); + testServer.start(); + + fakeExecutor = new FakeScheduledExecutorService(); + } + + @After + public void tearDown() throws Exception { + testServer.shutdownNow().awaitTermination(); + testChannel.shutdown(); + } + + @Test + public void testPublishByDuration() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + // To demonstrate that reaching duration will trigger publish + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setDelayThresholdDuration(Duration.ofSeconds(5)) + .setElementCountThreshold(10L) + .build()) + .build(); + + testPublisherServiceImpl.addPublishResponse( + PublishResponse.newBuilder().addMessageIds("1").addMessageIds("2")); + + ApiFuture publishFuture1 = sendTestMessage(publisher, "A"); + ApiFuture publishFuture2 = sendTestMessage(publisher, "B"); + + assertFalse(publishFuture1.isDone()); + assertFalse(publishFuture2.isDone()); + + fakeExecutor.advanceTime(Duration.ofSeconds(10)); + + assertEquals("1", publishFuture1.get()); + assertEquals("2", publishFuture2.get()); + + assertEquals(2, testPublisherServiceImpl.getCapturedRequests().get(0).getMessagesCount()); + shutdownTestPublisher(publisher); + } + + @Test + public void testPublishByNumBatchedMessages() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(2L) + .setDelayThresholdDuration(Duration.ofSeconds(100)) + .build()) + .build(); + + testPublisherServiceImpl + .addPublishResponse(PublishResponse.newBuilder().addMessageIds("1").addMessageIds("2")) + .addPublishResponse(PublishResponse.newBuilder().addMessageIds("3").addMessageIds("4")); + + ApiFuture publishFuture1 = sendTestMessage(publisher, "A"); + ApiFuture publishFuture2 = sendTestMessage(publisher, "B"); + ApiFuture publishFuture3 = sendTestMessage(publisher, "C"); + + // Note we are not advancing time but message should still get published + + assertEquals("1", publishFuture1.get()); + assertEquals("2", publishFuture2.get()); + + assertFalse(publishFuture3.isDone()); + + ApiFuture publishFuture4 = sendTestMessage(publisher, "D"); + + assertEquals("3", publishFuture3.get()); + assertEquals("4", publishFuture4.get()); + + assertEquals(2, testPublisherServiceImpl.getCapturedRequests().get(0).getMessagesCount()); + assertEquals(2, testPublisherServiceImpl.getCapturedRequests().get(1).getMessagesCount()); + + fakeExecutor.advanceTime(Duration.ofSeconds(100)); + shutdownTestPublisher(publisher); + } + + @Test + public void testSinglePublishByNumBytes() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(2L) + .setDelayThresholdDuration(Duration.ofSeconds(100)) + .build()) + .build(); + + testPublisherServiceImpl + .addPublishResponse(PublishResponse.newBuilder().addMessageIds("1").addMessageIds("2")) + .addPublishResponse(PublishResponse.newBuilder().addMessageIds("3").addMessageIds("4")); + + ApiFuture publishFuture1 = sendTestMessage(publisher, "A"); + ApiFuture publishFuture2 = sendTestMessage(publisher, "B"); + ApiFuture publishFuture3 = sendTestMessage(publisher, "C"); + + // Note we are not advancing time but message should still get published + + assertEquals("1", publishFuture1.get()); + assertEquals("2", publishFuture2.get()); + assertFalse(publishFuture3.isDone()); + + ApiFuture publishFuture4 = sendTestMessage(publisher, "D"); + assertEquals("3", publishFuture3.get()); + assertEquals("4", publishFuture4.get()); + + assertEquals(2, testPublisherServiceImpl.getCapturedRequests().size()); + + fakeExecutor.advanceTime(Duration.ofSeconds(100)); + shutdownTestPublisher(publisher); + } + + @Test + public void testPublishByShutdown() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setDelayThresholdDuration(Duration.ofSeconds(100)) + .setElementCountThreshold(10L) + .build()) + .build(); + + testPublisherServiceImpl.addPublishResponse( + PublishResponse.newBuilder().addMessageIds("1").addMessageIds("2")); + + ApiFuture publishFuture1 = sendTestMessage(publisher, "A"); + ApiFuture publishFuture2 = sendTestMessage(publisher, "B"); + + // Note we are not advancing time or reaching the count threshold but messages should + // still get published by call to shutdown + publisher.shutdown(); + + // Verify the publishes completed + assertTrue(publishFuture1.isDone()); + assertTrue(publishFuture2.isDone()); + assertEquals("1", publishFuture1.get()); + assertEquals("2", publishFuture2.get()); + + fakeExecutor.advanceTime(Duration.ofSeconds(100)); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + + @Test + public void testPublishMixedSizeAndDuration() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + // To demonstrate that reaching duration will trigger publish + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(2L) + .setDelayThresholdDuration(Duration.ofSeconds(5)) + .build()) + .build(); + + testPublisherServiceImpl.addPublishResponse( + PublishResponse.newBuilder().addMessageIds("1").addMessageIds("2")); + testPublisherServiceImpl.addPublishResponse(PublishResponse.newBuilder().addMessageIds("3")); + + ApiFuture publishFuture1 = sendTestMessage(publisher, "A"); + + fakeExecutor.advanceTime(Duration.ofSeconds(2)); + assertFalse(publishFuture1.isDone()); + + ApiFuture publishFuture2 = sendTestMessage(publisher, "B"); + + // Publishing triggered by batch size + assertEquals("1", publishFuture1.get()); + assertEquals("2", publishFuture2.get()); + + ApiFuture publishFuture3 = sendTestMessage(publisher, "C"); + + assertFalse(publishFuture3.isDone()); + + // Publishing triggered by time + fakeExecutor.advanceTime(Duration.ofSeconds(5)); + + assertEquals("3", publishFuture3.get()); + + assertEquals(2, testPublisherServiceImpl.getCapturedRequests().get(0).getMessagesCount()); + assertEquals(1, testPublisherServiceImpl.getCapturedRequests().get(1).getMessagesCount()); + shutdownTestPublisher(publisher); + } + + @Test + public void testPublishWithCompression() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(2L) + .setDelayThresholdDuration(Duration.ofSeconds(100)) + .build()) + .setEnableCompression(true) + .setCompressionBytesThreshold(100) + .build(); + + testPublisherServiceImpl.addPublishResponse( + PublishResponse.newBuilder().addMessageIds("1").addMessageIds("2")); + ApiFuture publishFuture1 = sendTestMessage(publisher, "A"); + ApiFuture publishFuture2 = sendTestMessage(publisher, "B"); + assertEquals("1", publishFuture1.get()); + assertEquals("2", publishFuture2.get()); + + fakeExecutor.advanceTime(Duration.ofSeconds(100)); + shutdownTestPublisher(publisher); + } + + private ApiFuture sendTestMessage(Publisher publisher, String data) { + return publisher.publish( + PubsubMessage.newBuilder().setData(ByteString.copyFromUtf8(data)).build()); + } + + @Test + public void testBatchedMessagesWithOrderingKeyByNum() throws Exception { + // Limit the number of maximum elements in a single batch to 3. + Publisher publisher = + getTestPublisherBuilder() + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(3L) + .setDelayThresholdDuration(Duration.ofSeconds(100)) + .build()) + .setEnableMessageOrdering(true) + .build(); + testPublisherServiceImpl.setAutoPublishResponse(true); + + // Publish two messages with ordering key, "OrderA", and other two messages with "OrderB". + ApiFuture publishFuture1 = sendTestMessageWithOrderingKey(publisher, "m1", "OrderA"); + ApiFuture publishFuture2 = sendTestMessageWithOrderingKey(publisher, "m2", "OrderB"); + ApiFuture publishFuture3 = sendTestMessageWithOrderingKey(publisher, "m3", "OrderA"); + ApiFuture publishFuture4 = sendTestMessageWithOrderingKey(publisher, "m4", "OrderB"); + + // Verify that none of them were published since the batching size is 3. + assertFalse(publishFuture1.isDone()); + assertFalse(publishFuture2.isDone()); + assertFalse(publishFuture3.isDone()); + assertFalse(publishFuture4.isDone()); + + // One of the batches reaches the limit. + ApiFuture publishFuture5 = sendTestMessageWithOrderingKey(publisher, "m5", "OrderA"); + // Verify that they were delivered in order per ordering key. + assertTrue(Integer.parseInt(publishFuture1.get()) < Integer.parseInt(publishFuture3.get())); + assertTrue(Integer.parseInt(publishFuture3.get()) < Integer.parseInt(publishFuture5.get())); + + // The other batch reaches the limit. + ApiFuture publishFuture6 = sendTestMessageWithOrderingKey(publisher, "m6", "OrderB"); + assertTrue(Integer.parseInt(publishFuture2.get()) < Integer.parseInt(publishFuture4.get())); + assertTrue(Integer.parseInt(publishFuture4.get()) < Integer.parseInt(publishFuture6.get())); + + // Verify that every message within the same batch has the same ordering key. + List requests = testPublisherServiceImpl.getCapturedRequests(); + for (PublishRequest request : requests) { + if (request.getMessagesCount() > 1) { + String orderingKey = request.getMessages(0).getOrderingKey(); + for (PubsubMessage message : request.getMessagesList()) { + assertEquals(message.getOrderingKey(), orderingKey); + } + } + } + + fakeExecutor.advanceTime(Duration.ofSeconds(100)); + shutdownTestPublisher(publisher); + } + + @Test + public void testBatchedMessagesWithOrderingKeyByDuration() throws Exception { + // Limit the batching timeout to 100 seconds. + Publisher publisher = + getTestPublisherBuilder() + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(10L) + .setDelayThresholdDuration(Duration.ofSeconds(100)) + .build()) + .setEnableMessageOrdering(true) + .build(); + testPublisherServiceImpl.setAutoPublishResponse(true); + testPublisherServiceImpl.setExecutor(fakeExecutor); + testPublisherServiceImpl.setPublishResponseDelay(Duration.ofSeconds(300)); + + // Publish two messages with ordering key, "OrderA", and other two messages with "OrderB". + ApiFuture publishFuture1 = sendTestMessageWithOrderingKey(publisher, "m1", "OrderA"); + ApiFuture publishFuture2 = sendTestMessageWithOrderingKey(publisher, "m2", "OrderB"); + ApiFuture publishFuture3 = sendTestMessageWithOrderingKey(publisher, "m3", "OrderA"); + ApiFuture publishFuture4 = sendTestMessageWithOrderingKey(publisher, "m4", "OrderB"); + + // Verify that none of them were published since the batching size is 10 and timeout has not + // been expired. + assertFalse(publishFuture1.isDone()); + assertFalse(publishFuture2.isDone()); + assertFalse(publishFuture3.isDone()); + assertFalse(publishFuture4.isDone()); + + // The timeout expires. + fakeExecutor.advanceTime(Duration.ofSeconds(100)); + + // Publish one more message on "OrderA" while publishes are outstanding. + testPublisherServiceImpl.setPublishResponseDelay(Duration.ZERO); + ApiFuture publishFuture5 = sendTestMessageWithOrderingKey(publisher, "m5", "OrderA"); + + // The second timeout expires. + fakeExecutor.advanceTime(Duration.ofSeconds(100)); + + // Publishing completes on the first four messages. + fakeExecutor.advanceTime(Duration.ofSeconds(200)); + + // Verify that they were delivered in order per ordering key. + assertTrue(Integer.parseInt(publishFuture1.get()) < Integer.parseInt(publishFuture3.get())); + assertTrue(Integer.parseInt(publishFuture2.get()) < Integer.parseInt(publishFuture4.get())); + + // Verify that they were delivered in order per ordering key. + assertTrue(Integer.parseInt(publishFuture3.get()) < Integer.parseInt(publishFuture5.get())); + + // Verify that every message within the same batch has the same ordering key. + List requests = testPublisherServiceImpl.getCapturedRequests(); + for (PublishRequest request : requests) { + if (request.getMessagesCount() > 1) { + String orderingKey = request.getMessages(0).getOrderingKey(); + for (PubsubMessage message : request.getMessagesList()) { + assertEquals(message.getOrderingKey(), orderingKey); + } + } + } + shutdownTestPublisher(publisher); + } + + @Test + public void testLargeMessagesDoNotReorderBatches() throws Exception { + // Set the maximum batching size to 20 bytes. + Publisher publisher = + getTestPublisherBuilder() + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(10L) + .setRequestByteThreshold(64L) + .setDelayThresholdDuration(Duration.ofSeconds(100)) + .build()) + .setEnableMessageOrdering(true) + .build(); + testPublisherServiceImpl.setAutoPublishResponse(true); + ApiFuture publishFuture1 = sendTestMessageWithOrderingKey(publisher, "m1", "OrderA"); + ApiFuture publishFuture2 = sendTestMessageWithOrderingKey(publisher, "m2", "OrderB"); + + assertFalse(publishFuture1.isDone()); + assertFalse(publishFuture2.isDone()); + + ApiFuture publishFuture3 = + sendTestMessageWithOrderingKey(publisher, "VeryLargeMessage", "OrderB"); + // Verify that messages with "OrderB" were delivered in order. + assertTrue(Integer.parseInt(publishFuture2.get()) < Integer.parseInt(publishFuture3.get())); + + fakeExecutor.advanceTime(Duration.ofSeconds(100)); + shutdownTestPublisher(publisher); + } + + @Test + public void testOrderingKeyWhenDisabled_throwsException() throws Exception { + // Message ordering is disabled by default. + Publisher publisher = getTestPublisherBuilder().build(); + try { + ApiFuture publishFuture = sendTestMessageWithOrderingKey(publisher, "m1", "orderA"); + fail("Should have thrown an IllegalStateException"); + } catch (IllegalStateException expected) { + // expected + } + shutdownTestPublisher(publisher); + } + + @Test + public void testEnableMessageOrdering_overwritesMaxAttempts() throws Exception { + // Set maxAttempts to 1 and enableMessageOrdering to true at the same time. + Publisher publisher = + getTestPublisherBuilder() + .setExecutorProvider(SINGLE_THREAD_EXECUTOR) + .setRetrySettings( + Publisher.Builder.DEFAULT_RETRY_SETTINGS.toBuilder() + .setTotalTimeoutDuration(Duration.ofSeconds(10)) + .setMaxAttempts(1) + .build()) + .setEnableMessageOrdering(true) + .build(); + + // Although maxAttempts is 1, the publisher will retry until it succeeds since + // enableMessageOrdering is true. + testPublisherServiceImpl.addPublishError(new Throwable("Transiently failing")); + testPublisherServiceImpl.addPublishError(new Throwable("Transiently failing")); + testPublisherServiceImpl.addPublishError(new Throwable("Transiently failing")); + testPublisherServiceImpl.addPublishResponse(PublishResponse.newBuilder().addMessageIds("1")); + + ApiFuture publishFuture1 = sendTestMessageWithOrderingKey(publisher, "m1", "orderA"); + assertEquals("1", publishFuture1.get()); + + assertEquals(4, testPublisherServiceImpl.getCapturedRequests().size()); + publisher.shutdown(); + assertTrue(publisher.awaitTermination(1, TimeUnit.MINUTES)); + } + + /** + * Make sure that resume publishing works as expected: + * + *
    + *
  1. publish with key orderA which returns a failure. + *
  2. publish with key orderA again, which should fail immediately + *
  3. publish with key orderB, which should succeed + *
  4. resume publishing on key orderA + *
  5. publish with key orderA, which should now succeed + *
+ */ + /* + Temporarily disabled due to https://github.com/googleapis/java-pubsub/issues/1861. + TODO(maitrimangal): Enable once resolved. + @Test + public void testResumePublish() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS + .toBuilder() + .setElementCountThreshold(2L) + .build()) + .setEnableMessageOrdering(true) + .build(); + + ApiFuture future1 = sendTestMessageWithOrderingKey(publisher, "m1", "orderA"); + ApiFuture future2 = sendTestMessageWithOrderingKey(publisher, "m2", "orderA"); + + fakeExecutor.advanceTime(Duration.ZERO); + assertFalse(future1.isDone()); + assertFalse(future2.isDone()); + + // This exception should stop future publishing to the same key + testPublisherServiceImpl.addPublishError(new StatusException(Status.INVALID_ARGUMENT)); + + fakeExecutor.advanceTime(Duration.ZERO); + + try { + future1.get(); + fail("This should fail."); + } catch (ExecutionException e) { + } + + try { + future2.get(); + fail("This should fail."); + } catch (ExecutionException e) { + } + + // Submit new requests with orderA that should fail. + ApiFuture future3 = sendTestMessageWithOrderingKey(publisher, "m3", "orderA"); + ApiFuture future4 = sendTestMessageWithOrderingKey(publisher, "m4", "orderA"); + + try { + future3.get(); + fail("This should fail."); + } catch (ExecutionException e) { + assertEquals(SequentialExecutorService.CallbackExecutor.CANCELLATION_EXCEPTION, e.getCause()); + } + + try { + future4.get(); + fail("This should fail."); + } catch (ExecutionException e) { + assertEquals(SequentialExecutorService.CallbackExecutor.CANCELLATION_EXCEPTION, e.getCause()); + } + + // Submit a new request with orderB, which should succeed + ApiFuture future5 = sendTestMessageWithOrderingKey(publisher, "m5", "orderB"); + ApiFuture future6 = sendTestMessageWithOrderingKey(publisher, "m6", "orderB"); + + testPublisherServiceImpl.addPublishResponse( + PublishResponse.newBuilder().addMessageIds("5").addMessageIds("6")); + + Assert.assertEquals("5", future5.get()); + Assert.assertEquals("6", future6.get()); + + // Resume publishing of "orderA", which should now succeed + publisher.resumePublish("orderA"); + + ApiFuture future7 = sendTestMessageWithOrderingKey(publisher, "m7", "orderA"); + ApiFuture future8 = sendTestMessageWithOrderingKey(publisher, "m8", "orderA"); + + testPublisherServiceImpl.addPublishResponse( + PublishResponse.newBuilder().addMessageIds("7").addMessageIds("8")); + + Assert.assertEquals("7", future7.get()); + Assert.assertEquals("8", future8.get()); + + shutdownTestPublisher(publisher); + } + + @Test + public void testPublishThrowExceptionForUnsubmittedOrderingKeyMessage() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setExecutorProvider(SINGLE_THREAD_EXECUTOR) + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS + .toBuilder() + .setElementCountThreshold(2L) + .setDelayThresholdDuration(Duration.ofSeconds(500)) + .build()) + .setEnableMessageOrdering(true) + .build(); + + // Send two messages that will fulfill the first batch, which will return a failure. + testPublisherServiceImpl.addPublishError(new StatusException(Status.INVALID_ARGUMENT)); + ApiFuture publishFuture1 = sendTestMessageWithOrderingKey(publisher, "A", "a"); + ApiFuture publishFuture2 = sendTestMessageWithOrderingKey(publisher, "B", "a"); + + // A third message will fail because the first attempt to publish failed. + ApiFuture publishFuture3 = sendTestMessageWithOrderingKey(publisher, "C", "a"); + + try { + publishFuture1.get(); + fail("Should have failed."); + } catch (ExecutionException e) { + } + + try { + publishFuture2.get(); + fail("Should have failed."); + } catch (ExecutionException e) { + } + + try { + publishFuture3.get(); + fail("Should have failed."); + } catch (ExecutionException e) { + assertEquals(SequentialExecutorService.CallbackExecutor.CANCELLATION_EXCEPTION, e.getCause()); + } + + // A subsequent attempt fails immediately. + ApiFuture publishFuture4 = sendTestMessageWithOrderingKey(publisher, "D", "a"); + try { + publishFuture4.get(); + fail("Should have failed."); + } catch (ExecutionException e) { + assertEquals(SequentialExecutorService.CallbackExecutor.CANCELLATION_EXCEPTION, e.getCause()); + } + } + */ + + private ApiFuture sendTestMessageWithOrderingKey( + Publisher publisher, String data, String orderingKey) { + return publisher.publish( + PubsubMessage.newBuilder() + .setOrderingKey(orderingKey) + .setData(ByteString.copyFromUtf8(data)) + .build()); + } + + @Test + public void testErrorPropagation() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setExecutorProvider(SINGLE_THREAD_EXECUTOR) + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(1L) + .setDelayThresholdDuration(Duration.ofSeconds(5)) + .build()) + .build(); + testPublisherServiceImpl.addPublishError(Status.DATA_LOSS.asException()); + try { + sendTestMessage(publisher, "A").get(); + fail("should throw exception"); + } catch (ExecutionException e) { + assertThat(e.getCause()).isInstanceOf(DataLossException.class); + } + } + + @Test + public void testPublishFailureRetries() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setExecutorProvider(SINGLE_THREAD_EXECUTOR) + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(1L) + .setDelayThresholdDuration(Duration.ofSeconds(5)) + .build()) + .build(); // To demonstrate that reaching duration will trigger publish + + testPublisherServiceImpl.addPublishError(new Throwable("Transiently failing")); + testPublisherServiceImpl.addPublishResponse(PublishResponse.newBuilder().addMessageIds("1")); + + ApiFuture publishFuture1 = sendTestMessage(publisher, "A"); + + assertEquals("1", publishFuture1.get()); + + assertEquals(2, testPublisherServiceImpl.getCapturedRequests().size()); + shutdownTestPublisher(publisher); + } + + @Test(expected = ExecutionException.class) + public void testPublishFailureRetries_retriesDisabled() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setExecutorProvider(SINGLE_THREAD_EXECUTOR) + .setRetrySettings( + Publisher.Builder.DEFAULT_RETRY_SETTINGS.toBuilder() + .setTotalTimeoutDuration(Duration.ofSeconds(10)) + .setMaxAttempts(1) + .build()) + .build(); + + testPublisherServiceImpl.addPublishError(new Throwable("Transiently failing")); + + ApiFuture publishFuture1 = sendTestMessage(publisher, "A"); + + try { + publishFuture1.get(); + } finally { + assertSame(testPublisherServiceImpl.getCapturedRequests().size(), 1); + shutdownTestPublisher(publisher); + } + } + + @Test + public void testPublishFailureRetries_maxRetriesSetup() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setExecutorProvider(SINGLE_THREAD_EXECUTOR) + .setRetrySettings( + Publisher.Builder.DEFAULT_RETRY_SETTINGS.toBuilder() + .setTotalTimeoutDuration(Duration.ofSeconds(10)) + .setMaxAttempts(3) + .build()) + .build(); + + testPublisherServiceImpl.addPublishError(new Throwable("Transiently failing")); + testPublisherServiceImpl.addPublishError(new Throwable("Transiently failing")); + testPublisherServiceImpl.addPublishResponse(PublishResponse.newBuilder().addMessageIds("1")); + + ApiFuture publishFuture1 = sendTestMessage(publisher, "A"); + + assertEquals("1", publishFuture1.get()); + + assertEquals(3, testPublisherServiceImpl.getCapturedRequests().size()); + shutdownTestPublisher(publisher); + } + + @Test + public void testPublishFailureRetries_maxRetriesSetUnlimited() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setExecutorProvider(SINGLE_THREAD_EXECUTOR) + .setRetrySettings( + Publisher.Builder.DEFAULT_RETRY_SETTINGS.toBuilder() + .setTotalTimeoutDuration(Duration.ofSeconds(10)) + .setMaxAttempts(0) + .build()) + .build(); + + testPublisherServiceImpl.addPublishError(new Throwable("Transiently failing")); + testPublisherServiceImpl.addPublishError(new Throwable("Transiently failing")); + testPublisherServiceImpl.addPublishResponse(PublishResponse.newBuilder().addMessageIds("1")); + + ApiFuture publishFuture1 = sendTestMessage(publisher, "A"); + + assertEquals("1", publishFuture1.get()); + + assertEquals(3, testPublisherServiceImpl.getCapturedRequests().size()); + publisher.shutdown(); + assertTrue(publisher.awaitTermination(1, TimeUnit.MINUTES)); + } + + @Test(expected = ExecutionException.class) + public void testPublishFailureRetries_nonRetryableFailsImmediately() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setExecutorProvider(SINGLE_THREAD_EXECUTOR) + .setRetrySettings( + Publisher.Builder.DEFAULT_RETRY_SETTINGS.toBuilder() + .setTotalTimeoutDuration(Duration.ofSeconds(10)) + .build()) + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(1L) + .setDelayThresholdDuration(Duration.ofSeconds(5)) + .build()) + .build(); // To demonstrate that reaching duration will trigger publish + + testPublisherServiceImpl.addPublishError(new StatusException(Status.INVALID_ARGUMENT)); + ApiFuture publishFuture1 = sendTestMessage(publisher, "A"); + + try { + publishFuture1.get(); + } finally { + assertTrue(testPublisherServiceImpl.getCapturedRequests().size() >= 1); + publisher.shutdown(); + assertTrue(publisher.awaitTermination(1, TimeUnit.MINUTES)); + } + } + + @Test + public void testPublisherGetters() throws Exception { + Publisher.Builder builder = Publisher.newBuilder(TEST_TOPIC); + builder.setChannelProvider( + FixedTransportChannelProvider.create(GrpcTransportChannel.create(testChannel))); + builder.setExecutorProvider(SINGLE_THREAD_EXECUTOR); + builder.setBatchingSettings( + BatchingSettings.newBuilder() + .setRequestByteThreshold(10L) + .setDelayThresholdDuration(Duration.ofMillis(11)) + .setElementCountThreshold(12L) + .build()); + builder.setCredentialsProvider(NoCredentialsProvider.create()); + Publisher publisher = builder.build(); + + assertEquals(TEST_TOPIC, publisher.getTopicName()); + assertEquals(10, (long) publisher.getBatchingSettings().getRequestByteThreshold()); + assertEquals( + Duration.ofMillis(11), publisher.getBatchingSettings().getDelayThresholdDuration()); + assertEquals(12, (long) publisher.getBatchingSettings().getElementCountThreshold()); + publisher.shutdown(); + assertTrue(publisher.awaitTermination(1, TimeUnit.MINUTES)); + } + + @Test + public void testBuilderParametersAndDefaults() { + Publisher.Builder builder = Publisher.newBuilder(TEST_TOPIC); + assertEquals(TEST_TOPIC.toString(), builder.topicName); + assertEquals(Publisher.Builder.DEFAULT_EXECUTOR_PROVIDER, builder.executorProvider); + assertEquals( + Publisher.Builder.DEFAULT_REQUEST_BYTES_THRESHOLD, + builder.batchingSettings.getRequestByteThreshold().longValue()); + assertEquals( + Publisher.Builder.DEFAULT_DELAY_THRESHOLD, + builder.batchingSettings.getDelayThresholdDuration()); + assertEquals( + Publisher.Builder.DEFAULT_ELEMENT_COUNT_THRESHOLD, + builder.batchingSettings.getElementCountThreshold().longValue()); + assertEquals(Publisher.Builder.DEFAULT_RETRY_SETTINGS, builder.retrySettings); + } + + @Test + public void testBuilderInvalidArguments() { + Publisher.Builder builder = Publisher.newBuilder(TEST_TOPIC); + + try { + builder.setChannelProvider(null); + fail("Should have thrown an IllegalArgumentException"); + } catch (NullPointerException expected) { + // Expected + } + + try { + builder.setExecutorProvider(null); + fail("Should have thrown an IllegalArgumentException"); + } catch (NullPointerException expected) { + // Expected + } + try { + builder.setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setRequestByteThreshold(null) + .build()); + fail("Should have thrown an NullPointerException"); + } catch (NullPointerException expected) { + // Expected + } + try { + builder.setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setRequestByteThreshold(0L) + .build()); + fail("Should have thrown an IllegalArgumentException"); + } catch (IllegalArgumentException expected) { + // Expected + } + try { + builder.setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setRequestByteThreshold(-1L) + .build()); + fail("Should have thrown an IllegalArgumentException"); + } catch (IllegalArgumentException expected) { + // Expected + } + + builder.setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setDelayThresholdDuration(Duration.ofMillis(1)) + .build()); + try { + builder.setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder().setDelayThreshold(null).build()); + fail("Should have thrown an NullPointerException"); + } catch (NullPointerException expected) { + // Expected + } + try { + builder.setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setDelayThresholdDuration(Duration.ofMillis(-1)) + .build()); + fail("Should have thrown an IllegalArgumentException"); + } catch (IllegalArgumentException expected) { + // Expected + } + + builder.setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(1L) + .build()); + try { + builder.setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(null) + .build()); + fail("Should have thrown an NullPointerException"); + } catch (NullPointerException expected) { + // Expected + } + try { + builder.setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(0L) + .build()); + fail("Should have thrown an IllegalArgumentException"); + } catch (IllegalArgumentException expected) { + // Expected + } + try { + builder.setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(-1L) + .build()); + fail("Should have thrown an IllegalArgumentException"); + } catch (IllegalArgumentException expected) { + // Expected + } + + builder.setRetrySettings( + Publisher.Builder.DEFAULT_RETRY_SETTINGS.toBuilder() + .setInitialRpcTimeoutDuration(Publisher.Builder.MIN_RPC_TIMEOUT) + .build()); + try { + builder.setRetrySettings( + Publisher.Builder.DEFAULT_RETRY_SETTINGS.toBuilder() + .setInitialRpcTimeoutDuration(Publisher.Builder.MIN_RPC_TIMEOUT.minusMillis(1)) + .build()); + fail("Should have thrown an IllegalArgumentException"); + } catch (IllegalArgumentException expected) { + // Expected + } + builder.setRetrySettings( + Publisher.Builder.DEFAULT_RETRY_SETTINGS.toBuilder() + .setTotalTimeoutDuration(Publisher.Builder.MIN_TOTAL_TIMEOUT) + .build()); + try { + builder.setRetrySettings( + Publisher.Builder.DEFAULT_RETRY_SETTINGS.toBuilder() + .setTotalTimeoutDuration(Publisher.Builder.MIN_TOTAL_TIMEOUT.minusMillis(1)) + .build()); + fail("Should have thrown an IllegalArgumentException"); + } catch (IllegalArgumentException expected) { + // Expected + } + } + + @Test + public void testPartialBatchingSettings() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setBatchingSettings( + Publisher.Builder.getDefaultBatchingSettings().toBuilder() + .setRequestByteThreshold(5000L) + .build()) + .build(); + assertEquals((long) publisher.getBatchingSettings().getRequestByteThreshold(), 5000); + assertEquals( + publisher.getBatchingSettings().getElementCountThreshold(), + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.getElementCountThreshold()); + + publisher = + getTestPublisherBuilder() + .setBatchingSettings( + Publisher.Builder.getDefaultBatchingSettings().toBuilder() + .setElementCountThreshold(500L) + .build()) + .build(); + assertEquals((long) publisher.getBatchingSettings().getElementCountThreshold(), 500); + assertEquals( + publisher.getBatchingSettings().getRequestByteThreshold(), + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.getRequestByteThreshold()); + } + + @Test + public void testAwaitTermination() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setExecutorProvider(SINGLE_THREAD_EXECUTOR) + .setRetrySettings( + Publisher.Builder.DEFAULT_RETRY_SETTINGS.toBuilder() + .setTotalTimeoutDuration(Duration.ofSeconds(10)) + .setMaxAttempts(0) + .build()) + .build(); + ApiFuture publishFuture1 = sendTestMessage(publisher, "A"); + publisher.shutdown(); + assertTrue(publisher.awaitTermination(1, TimeUnit.MINUTES)); + } + + @Test + public void testShutDown() throws Exception { + ApiFuture apiFuture = EasyMock.mock(ApiFuture.class); + Publisher publisher = EasyMock.mock(Publisher.class); + EasyMock.expect( + publisher.publish( + PubsubMessage.newBuilder().setData(ByteString.copyFromUtf8("A")).build())) + .andReturn(apiFuture); + EasyMock.expect(publisher.awaitTermination(1, TimeUnit.MINUTES)).andReturn(true); + publisher.shutdown(); + EasyMock.expectLastCall().once(); + EasyMock.replay(publisher); + sendTestMessage(publisher, "A"); + publisher.shutdown(); + assertTrue(publisher.awaitTermination(1, TimeUnit.MINUTES)); + } + + @Test + public void invalidFlowControlBytes_throwException() throws Exception { + try { + Publisher publisher = + getTestPublisherBuilder() + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(1L) + .setDelayThresholdDuration(Duration.ofSeconds(5)) + .setFlowControlSettings( + FlowControlSettings.newBuilder() + .setLimitExceededBehavior( + FlowController.LimitExceededBehavior.ThrowException) + .setMaxOutstandingElementCount(1L) + .setMaxOutstandingRequestBytes(0L) + .build()) + .build()) + .build(); + fail("Expected an IllegalArgumentException"); + } catch (Exception e) { + assertThat(e).isInstanceOf(IllegalArgumentException.class); + } + } + + @Test + public void invalidFlowControlElementCount_throwException() throws Exception { + try { + Publisher publisher = + getTestPublisherBuilder() + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(1L) + .setDelayThresholdDuration(Duration.ofSeconds(5)) + .setFlowControlSettings( + FlowControlSettings.newBuilder() + .setLimitExceededBehavior( + FlowController.LimitExceededBehavior.ThrowException) + .setMaxOutstandingElementCount(0L) + .setMaxOutstandingRequestBytes(1000L) + .build()) + .build()) + .build(); + fail("Expected an IllegalArgumentException"); + } catch (Exception e) { + assertThat(e).isInstanceOf(IllegalArgumentException.class); + } + } + + @Test + public void testMessageExceedsFlowControlLimits_throwException() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setExecutorProvider(SINGLE_THREAD_EXECUTOR) + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(1L) + .setDelayThresholdDuration(Duration.ofSeconds(5)) + .setFlowControlSettings( + FlowControlSettings.newBuilder() + .setLimitExceededBehavior(FlowController.LimitExceededBehavior.Block) + .setMaxOutstandingElementCount(1L) + .setMaxOutstandingRequestBytes(1L) + .build()) + .build()) + .build(); + + try { + sendTestMessage(publisher, "AAAAAAAAAAAAAAAAAAAAA").get(); + fail("Should have thrown a FlowController.MaxOutstandingRequestBytesReachedException"); + } catch (ExecutionException e) { + assertThat(e.getCause()) + .isInstanceOf(FlowController.MaxOutstandingRequestBytesReachedException.class); + } + } + + @Test + public void testPublishFlowControl_throwException() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setExecutorProvider(SINGLE_THREAD_EXECUTOR) + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(1L) + .setDelayThresholdDuration(Duration.ofSeconds(5)) + .setFlowControlSettings( + FlowControlSettings.newBuilder() + .setLimitExceededBehavior( + FlowController.LimitExceededBehavior.ThrowException) + .setMaxOutstandingElementCount(1L) + .setMaxOutstandingRequestBytes(13L) + .build()) + .build()) + .build(); + + // Sending a message less than the byte limit succeeds. + ApiFuture publishFuture1 = sendTestMessage(publisher, "AAAA"); + + // Sending another message fails because of the outstanding message. + ApiFuture publishFuture2 = sendTestMessage(publisher, "AA"); + try { + publishFuture2.get(); + fail("Should have thrown an FlowController.MaxOutstandingElementCountReachedException"); + } catch (ExecutionException e) { + assertThat(e.getCause()) + .isInstanceOf(FlowController.MaxOutstandingElementCountReachedException.class); + } + + testPublisherServiceImpl.addPublishResponse(PublishResponse.newBuilder().addMessageIds("1")); + assertEquals("1", publishFuture1.get()); + + // Sending another message succeeds. + ApiFuture publishFuture4 = sendTestMessage(publisher, "AAAA"); + testPublisherServiceImpl.addPublishResponse(PublishResponse.newBuilder().addMessageIds("2")); + assertEquals("2", publishFuture4.get()); + } + + @Test + public void testPublishFlowControl_throwExceptionWithOrderingKey() throws Exception { + Publisher publisher = + getTestPublisherBuilder() + .setExecutorProvider(SINGLE_THREAD_EXECUTOR) + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(1L) + .setDelayThresholdDuration(Duration.ofSeconds(5)) + .setFlowControlSettings( + FlowControlSettings.newBuilder() + .setLimitExceededBehavior( + FlowController.LimitExceededBehavior.ThrowException) + .setMaxOutstandingElementCount(1L) + .setMaxOutstandingRequestBytes(13L) + .build()) + .build()) + .setEnableMessageOrdering(true) + .build(); + + // Sending a message less than the byte limit succeeds. + ApiFuture publishFuture1 = sendTestMessageWithOrderingKey(publisher, "AAAA", "a"); + + // Sending another message fails because of the outstanding message. + ApiFuture publishFuture2 = sendTestMessageWithOrderingKey(publisher, "AA", "a"); + try { + publishFuture2.get(); + fail("Should have thrown an FlowController.MaxOutstandingElementCountReachedException"); + } catch (ExecutionException e) { + assertThat(e.getCause()) + .isInstanceOf(FlowController.MaxOutstandingElementCountReachedException.class); + } + + testPublisherServiceImpl.addPublishResponse(PublishResponse.newBuilder().addMessageIds("1")); + assertEquals("1", publishFuture1.get()); + + // Sending another message for the same ordering key fails because the one before failed. + ApiFuture publishFuture3 = sendTestMessageWithOrderingKey(publisher, "AAAA", "a"); + try { + publishFuture3.get(); + fail("This should fail."); + } catch (ExecutionException e) { + assertEquals(SequentialExecutorService.CallbackExecutor.CANCELLATION_EXCEPTION, e.getCause()); + } + } + + @Test + public void testPublishFlowControl_block() throws Exception { + final Publisher publisher = + getTestPublisherBuilder() + .setExecutorProvider(SINGLE_THREAD_EXECUTOR) + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(1L) + .setDelayThresholdDuration(Duration.ofSeconds(5)) + .setFlowControlSettings( + FlowControlSettings.newBuilder() + .setLimitExceededBehavior(FlowController.LimitExceededBehavior.Block) + .setMaxOutstandingElementCount(2L) + .setMaxOutstandingRequestBytes(13L) + .build()) + .build()) + .build(); + Executor responseExecutor = Executors.newScheduledThreadPool(10); + final CountDownLatch sendResponse1 = new CountDownLatch(1); + final CountDownLatch response1Sent = new CountDownLatch(1); + final CountDownLatch sendResponse2 = new CountDownLatch(1); + responseExecutor.execute( + new Runnable() { + @Override + public void run() { + try { + sendResponse1.await(); + testPublisherServiceImpl.addPublishResponse( + PublishResponse.newBuilder().addMessageIds("1")); + response1Sent.countDown(); + sendResponse2.await(); + testPublisherServiceImpl.addPublishResponse( + PublishResponse.newBuilder().addMessageIds("2")); + } catch (Exception e) { + } + } + }); + + // Sending two messages succeeds. + ApiFuture publishFuture1 = sendTestMessage(publisher, "AA"); + ApiFuture publishFuture2 = sendTestMessage(publisher, "AA"); + + // Sending a third message blocks because messages are outstanding. + final CountDownLatch publish3Completed = new CountDownLatch(1); + final CountDownLatch response3Sent = new CountDownLatch(1); + responseExecutor.execute( + new Runnable() { + @Override + public void run() { + ApiFuture publishFuture3 = sendTestMessage(publisher, "AAAAAA"); + publish3Completed.countDown(); + } + }); + + responseExecutor.execute( + new Runnable() { + @Override + public void run() { + try { + sendResponse1.countDown(); + response1Sent.await(); + sendResponse2.countDown(); + } catch (Exception e) { + } + } + }); + + // Sending a fourth message blocks because although only one message has been sent, + // the third message claimed the tokens for outstanding bytes. + final CountDownLatch publish4Completed = new CountDownLatch(1); + responseExecutor.execute( + new Runnable() { + @Override + public void run() { + try { + publish3Completed.await(); + ApiFuture publishFuture4 = sendTestMessage(publisher, "A"); + publish4Completed.countDown(); + } catch (Exception e) { + } + } + }); + + publish3Completed.await(); + testPublisherServiceImpl.addPublishResponse(PublishResponse.newBuilder().addMessageIds("3")); + response3Sent.countDown(); + + publish4Completed.await(); + } + + @Test + public void testPublishOpenTelemetryTracing() throws Exception { + OpenTelemetryRule openTelemetryTesting = OpenTelemetryRule.create(); + OpenTelemetry openTelemetry = openTelemetryTesting.getOpenTelemetry(); + final Publisher publisher = + getTestPublisherBuilder() + .setBatchingSettings( + Publisher.Builder.DEFAULT_BATCHING_SETTINGS.toBuilder() + .setElementCountThreshold(1L) + .setDelayThresholdDuration(Duration.ofSeconds(5)) + .setFlowControlSettings( + FlowControlSettings.newBuilder() + .setLimitExceededBehavior(FlowController.LimitExceededBehavior.Block) + .setMaxOutstandingElementCount(2L) + .setMaxOutstandingRequestBytes(100L) + .build()) + .build()) + .setOpenTelemetry(openTelemetry) + .setEnableOpenTelemetryTracing(true) + .build(); + + testPublisherServiceImpl.addPublishResponse(PublishResponse.newBuilder().addMessageIds("1")); + ApiFuture publishFuture = sendTestMessage(publisher, "A"); + fakeExecutor.advanceTime(Duration.ofSeconds(5)); + assertEquals("1", publishFuture.get()); + fakeExecutor.advanceTime(Duration.ofSeconds(5)); + shutdownTestPublisher(publisher); + + List allSpans = openTelemetryTesting.getSpans(); + assertEquals(4, allSpans.size()); + SpanData flowControlSpanData = allSpans.get(0); + SpanData batchingSpanData = allSpans.get(1); + SpanData publishRpcSpanData = allSpans.get(2); + SpanData publisherSpanData = allSpans.get(3); + + SpanDataAssert flowControlSpanDataAssert = + OpenTelemetryAssertions.assertThat(flowControlSpanData); + flowControlSpanDataAssert + .hasName(PUBLISH_FLOW_CONTROL_SPAN_NAME) + .hasParent(publisherSpanData) + .hasEnded(); + + SpanDataAssert batchingSpanDataAssert = OpenTelemetryAssertions.assertThat(batchingSpanData); + batchingSpanDataAssert + .hasName(PUBLISH_BATCHING_SPAN_NAME) + .hasParent(publisherSpanData) + .hasEnded(); + + SpanDataAssert publishRpcSpanDataAssert = + OpenTelemetryAssertions.assertThat(publishRpcSpanData); + publishRpcSpanDataAssert + .hasName(PUBLISH_RPC_SPAN_NAME) + .hasKind(SpanKind.CLIENT) + .hasNoParent() + .hasEnded(); + + SpanDataAssert publishSpanDataAssert = OpenTelemetryAssertions.assertThat(publisherSpanData); + publishSpanDataAssert + .hasName(PUBLISHER_SPAN_NAME) + .hasKind(SpanKind.PRODUCER) + .hasNoParent() + .hasEnded(); + } + + private Builder getTestPublisherBuilder() { + return Publisher.newBuilder(TEST_TOPIC) + .setExecutorProvider(FixedExecutorProvider.create(fakeExecutor)) + .setChannelProvider( + FixedTransportChannelProvider.create(GrpcTransportChannel.create(testChannel))) + .setCredentialsProvider(NoCredentialsProvider.create()); + } + + private void shutdownTestPublisher(Publisher publisher) throws InterruptedException { + publisher.shutdown(); + fakeExecutor.advanceTime(Duration.ofSeconds(10)); + assertTrue(publisher.awaitTermination(1, TimeUnit.MINUTES)); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SchemaServiceClientHttpJsonTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SchemaServiceClientHttpJsonTest.java new file mode 100644 index 000000000000..1d15eafde042 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SchemaServiceClientHttpJsonTest.java @@ -0,0 +1,1169 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemaRevisionsPagedResponse; +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemasPagedResponse; + +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.httpjson.GaxHttpJsonProperties; +import com.google.api.gax.httpjson.testing.MockHttpService; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ApiException; +import com.google.api.gax.rpc.ApiExceptionFactory; +import com.google.api.gax.rpc.InvalidArgumentException; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.rpc.testing.FakeStatusCode; +import com.google.cloud.pubsub.v1.stub.HttpJsonSchemaServiceStub; +import com.google.common.collect.Lists; +import com.google.iam.v1.AuditConfig; +import com.google.iam.v1.Binding; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.GetPolicyOptions; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.ByteString; +import com.google.protobuf.Empty; +import com.google.protobuf.FieldMask; +import com.google.protobuf.Timestamp; +import com.google.pubsub.v1.Encoding; +import com.google.pubsub.v1.ListSchemaRevisionsResponse; +import com.google.pubsub.v1.ListSchemasResponse; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.SchemaName; +import com.google.pubsub.v1.ValidateMessageRequest; +import com.google.pubsub.v1.ValidateMessageResponse; +import com.google.pubsub.v1.ValidateSchemaResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import javax.annotation.Generated; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +@Generated("by gapic-generator-java") +public class SchemaServiceClientHttpJsonTest { + private static MockHttpService mockService; + private static SchemaServiceClient client; + + @BeforeClass + public static void startStaticServer() throws IOException { + mockService = + new MockHttpService( + HttpJsonSchemaServiceStub.getMethodDescriptors(), + SchemaServiceSettings.getDefaultEndpoint()); + SchemaServiceSettings settings = + SchemaServiceSettings.newHttpJsonBuilder() + .setTransportChannelProvider( + SchemaServiceSettings.defaultHttpJsonTransportProviderBuilder() + .setHttpTransport(mockService) + .build()) + .setCredentialsProvider(NoCredentialsProvider.create()) + .build(); + client = SchemaServiceClient.create(settings); + } + + @AfterClass + public static void stopServer() { + client.close(); + } + + @Before + public void setUp() {} + + @After + public void tearDown() throws Exception { + mockService.reset(); + } + + @Test + public void createSchemaTest() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + ProjectName parent = ProjectName.of("[PROJECT]"); + Schema schema = Schema.newBuilder().build(); + String schemaId = "schemaId-697673060"; + + Schema actualResponse = client.createSchema(parent, schema, schemaId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createSchemaExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + ProjectName parent = ProjectName.of("[PROJECT]"); + Schema schema = Schema.newBuilder().build(); + String schemaId = "schemaId-697673060"; + client.createSchema(parent, schema, schemaId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSchemaTest2() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + String parent = "projects/project-2353"; + Schema schema = Schema.newBuilder().build(); + String schemaId = "schemaId-697673060"; + + Schema actualResponse = client.createSchema(parent, schema, schemaId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createSchemaExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String parent = "projects/project-2353"; + Schema schema = Schema.newBuilder().build(); + String schemaId = "schemaId-697673060"; + client.createSchema(parent, schema, schemaId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getSchemaTest() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + + Schema actualResponse = client.getSchema(name); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void getSchemaExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + client.getSchema(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getSchemaTest2() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + String name = "projects/project-5662/schemas/schema-5662"; + + Schema actualResponse = client.getSchema(name); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void getSchemaExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String name = "projects/project-5662/schemas/schema-5662"; + client.getSchema(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSchemasTest() throws Exception { + Schema responsesElement = Schema.newBuilder().build(); + ListSchemasResponse expectedResponse = + ListSchemasResponse.newBuilder() + .setNextPageToken("") + .addAllSchemas(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + ProjectName parent = ProjectName.of("[PROJECT]"); + + ListSchemasPagedResponse pagedListResponse = client.listSchemas(parent); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSchemasList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listSchemasExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + ProjectName parent = ProjectName.of("[PROJECT]"); + client.listSchemas(parent); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSchemasTest2() throws Exception { + Schema responsesElement = Schema.newBuilder().build(); + ListSchemasResponse expectedResponse = + ListSchemasResponse.newBuilder() + .setNextPageToken("") + .addAllSchemas(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + String parent = "projects/project-2353"; + + ListSchemasPagedResponse pagedListResponse = client.listSchemas(parent); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSchemasList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listSchemasExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String parent = "projects/project-2353"; + client.listSchemas(parent); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSchemaRevisionsTest() throws Exception { + Schema responsesElement = Schema.newBuilder().build(); + ListSchemaRevisionsResponse expectedResponse = + ListSchemaRevisionsResponse.newBuilder() + .setNextPageToken("") + .addAllSchemas(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + + ListSchemaRevisionsPagedResponse pagedListResponse = client.listSchemaRevisions(name); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSchemasList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listSchemaRevisionsExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + client.listSchemaRevisions(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSchemaRevisionsTest2() throws Exception { + Schema responsesElement = Schema.newBuilder().build(); + ListSchemaRevisionsResponse expectedResponse = + ListSchemaRevisionsResponse.newBuilder() + .setNextPageToken("") + .addAllSchemas(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + String name = "projects/project-5662/schemas/schema-5662"; + + ListSchemaRevisionsPagedResponse pagedListResponse = client.listSchemaRevisions(name); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSchemasList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listSchemaRevisionsExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String name = "projects/project-5662/schemas/schema-5662"; + client.listSchemaRevisions(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void commitSchemaTest() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + Schema schema = Schema.newBuilder().build(); + + Schema actualResponse = client.commitSchema(name, schema); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void commitSchemaExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + Schema schema = Schema.newBuilder().build(); + client.commitSchema(name, schema); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void commitSchemaTest2() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + String name = "projects/project-5662/schemas/schema-5662"; + Schema schema = Schema.newBuilder().build(); + + Schema actualResponse = client.commitSchema(name, schema); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void commitSchemaExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String name = "projects/project-5662/schemas/schema-5662"; + Schema schema = Schema.newBuilder().build(); + client.commitSchema(name, schema); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void rollbackSchemaTest() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + String revisionId = "revisionId-1507445162"; + + Schema actualResponse = client.rollbackSchema(name, revisionId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void rollbackSchemaExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + String revisionId = "revisionId-1507445162"; + client.rollbackSchema(name, revisionId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void rollbackSchemaTest2() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + String name = "projects/project-5662/schemas/schema-5662"; + String revisionId = "revisionId-1507445162"; + + Schema actualResponse = client.rollbackSchema(name, revisionId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void rollbackSchemaExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String name = "projects/project-5662/schemas/schema-5662"; + String revisionId = "revisionId-1507445162"; + client.rollbackSchema(name, revisionId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSchemaRevisionTest() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + String revisionId = "revisionId-1507445162"; + + Schema actualResponse = client.deleteSchemaRevision(name, revisionId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void deleteSchemaRevisionExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + String revisionId = "revisionId-1507445162"; + client.deleteSchemaRevision(name, revisionId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSchemaRevisionTest2() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + String name = "projects/project-5662/schemas/schema-5662"; + String revisionId = "revisionId-1507445162"; + + Schema actualResponse = client.deleteSchemaRevision(name, revisionId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void deleteSchemaRevisionExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String name = "projects/project-5662/schemas/schema-5662"; + String revisionId = "revisionId-1507445162"; + client.deleteSchemaRevision(name, revisionId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSchemaTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + + client.deleteSchema(name); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void deleteSchemaExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + client.deleteSchema(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSchemaTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + String name = "projects/project-5662/schemas/schema-5662"; + + client.deleteSchema(name); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void deleteSchemaExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String name = "projects/project-5662/schemas/schema-5662"; + client.deleteSchema(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void validateSchemaTest() throws Exception { + ValidateSchemaResponse expectedResponse = ValidateSchemaResponse.newBuilder().build(); + mockService.addResponse(expectedResponse); + + ProjectName parent = ProjectName.of("[PROJECT]"); + Schema schema = Schema.newBuilder().build(); + + ValidateSchemaResponse actualResponse = client.validateSchema(parent, schema); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void validateSchemaExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + ProjectName parent = ProjectName.of("[PROJECT]"); + Schema schema = Schema.newBuilder().build(); + client.validateSchema(parent, schema); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void validateSchemaTest2() throws Exception { + ValidateSchemaResponse expectedResponse = ValidateSchemaResponse.newBuilder().build(); + mockService.addResponse(expectedResponse); + + String parent = "projects/project-2353"; + Schema schema = Schema.newBuilder().build(); + + ValidateSchemaResponse actualResponse = client.validateSchema(parent, schema); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void validateSchemaExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String parent = "projects/project-2353"; + Schema schema = Schema.newBuilder().build(); + client.validateSchema(parent, schema); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void validateMessageTest() throws Exception { + ValidateMessageResponse expectedResponse = ValidateMessageResponse.newBuilder().build(); + mockService.addResponse(expectedResponse); + + ValidateMessageRequest request = + ValidateMessageRequest.newBuilder() + .setParent(ProjectName.of("[PROJECT]").toString()) + .setMessage(ByteString.EMPTY) + .setEncoding(Encoding.forNumber(0)) + .build(); + + ValidateMessageResponse actualResponse = client.validateMessage(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void validateMessageExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + ValidateMessageRequest request = + ValidateMessageRequest.newBuilder() + .setParent(ProjectName.of("[PROJECT]").toString()) + .setMessage(ByteString.EMPTY) + .setEncoding(Encoding.forNumber(0)) + .build(); + client.validateMessage(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void setIamPolicyTest() throws Exception { + Policy expectedResponse = + Policy.newBuilder() + .setVersion(351608024) + .addAllBindings(new ArrayList()) + .addAllAuditConfigs(new ArrayList()) + .setEtag(ByteString.EMPTY) + .build(); + mockService.addResponse(expectedResponse); + + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setPolicy(Policy.newBuilder().build()) + .setUpdateMask(FieldMask.newBuilder().build()) + .build(); + + Policy actualResponse = client.setIamPolicy(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void setIamPolicyExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setPolicy(Policy.newBuilder().build()) + .setUpdateMask(FieldMask.newBuilder().build()) + .build(); + client.setIamPolicy(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getIamPolicyTest() throws Exception { + Policy expectedResponse = + Policy.newBuilder() + .setVersion(351608024) + .addAllBindings(new ArrayList()) + .addAllAuditConfigs(new ArrayList()) + .setEtag(ByteString.EMPTY) + .build(); + mockService.addResponse(expectedResponse); + + GetIamPolicyRequest request = + GetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setOptions(GetPolicyOptions.newBuilder().build()) + .build(); + + Policy actualResponse = client.getIamPolicy(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void getIamPolicyExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + GetIamPolicyRequest request = + GetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setOptions(GetPolicyOptions.newBuilder().build()) + .build(); + client.getIamPolicy(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void testIamPermissionsTest() throws Exception { + TestIamPermissionsResponse expectedResponse = + TestIamPermissionsResponse.newBuilder().addAllPermissions(new ArrayList()).build(); + mockService.addResponse(expectedResponse); + + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .addAllPermissions(new ArrayList()) + .build(); + + TestIamPermissionsResponse actualResponse = client.testIamPermissions(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void testIamPermissionsExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .addAllPermissions(new ArrayList()) + .build(); + client.testIamPermissions(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SchemaServiceClientTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SchemaServiceClientTest.java new file mode 100644 index 000000000000..f17ef1366999 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SchemaServiceClientTest.java @@ -0,0 +1,1074 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemaRevisionsPagedResponse; +import static com.google.cloud.pubsub.v1.SchemaServiceClient.ListSchemasPagedResponse; + +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.grpc.GaxGrpcProperties; +import com.google.api.gax.grpc.testing.LocalChannelProvider; +import com.google.api.gax.grpc.testing.MockGrpcService; +import com.google.api.gax.grpc.testing.MockServiceHelper; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.InvalidArgumentException; +import com.google.common.collect.Lists; +import com.google.iam.v1.AuditConfig; +import com.google.iam.v1.Binding; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.GetPolicyOptions; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.AbstractMessage; +import com.google.protobuf.ByteString; +import com.google.protobuf.Empty; +import com.google.protobuf.FieldMask; +import com.google.protobuf.Timestamp; +import com.google.pubsub.v1.CommitSchemaRequest; +import com.google.pubsub.v1.CreateSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRequest; +import com.google.pubsub.v1.DeleteSchemaRevisionRequest; +import com.google.pubsub.v1.Encoding; +import com.google.pubsub.v1.GetSchemaRequest; +import com.google.pubsub.v1.ListSchemaRevisionsRequest; +import com.google.pubsub.v1.ListSchemaRevisionsResponse; +import com.google.pubsub.v1.ListSchemasRequest; +import com.google.pubsub.v1.ListSchemasResponse; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.RollbackSchemaRequest; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.SchemaName; +import com.google.pubsub.v1.ValidateMessageRequest; +import com.google.pubsub.v1.ValidateMessageResponse; +import com.google.pubsub.v1.ValidateSchemaRequest; +import com.google.pubsub.v1.ValidateSchemaResponse; +import io.grpc.StatusRuntimeException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import javax.annotation.Generated; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +@Generated("by gapic-generator-java") +public class SchemaServiceClientTest { + private static MockIAMPolicy mockIAMPolicy; + private static MockSchemaService mockSchemaService; + private static MockServiceHelper mockServiceHelper; + private LocalChannelProvider channelProvider; + private SchemaServiceClient client; + + @BeforeClass + public static void startStaticServer() { + mockSchemaService = new MockSchemaService(); + mockIAMPolicy = new MockIAMPolicy(); + mockServiceHelper = + new MockServiceHelper( + UUID.randomUUID().toString(), + Arrays.asList(mockSchemaService, mockIAMPolicy)); + mockServiceHelper.start(); + } + + @AfterClass + public static void stopServer() { + mockServiceHelper.stop(); + } + + @Before + public void setUp() throws IOException { + mockServiceHelper.reset(); + channelProvider = mockServiceHelper.createChannelProvider(); + SchemaServiceSettings settings = + SchemaServiceSettings.newBuilder() + .setTransportChannelProvider(channelProvider) + .setCredentialsProvider(NoCredentialsProvider.create()) + .build(); + client = SchemaServiceClient.create(settings); + } + + @After + public void tearDown() throws Exception { + client.close(); + } + + @Test + public void createSchemaTest() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockSchemaService.addResponse(expectedResponse); + + ProjectName parent = ProjectName.of("[PROJECT]"); + Schema schema = Schema.newBuilder().build(); + String schemaId = "schemaId-697673060"; + + Schema actualResponse = client.createSchema(parent, schema, schemaId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + CreateSchemaRequest actualRequest = ((CreateSchemaRequest) actualRequests.get(0)); + + Assert.assertEquals(parent.toString(), actualRequest.getParent()); + Assert.assertEquals(schema, actualRequest.getSchema()); + Assert.assertEquals(schemaId, actualRequest.getSchemaId()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createSchemaExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + ProjectName parent = ProjectName.of("[PROJECT]"); + Schema schema = Schema.newBuilder().build(); + String schemaId = "schemaId-697673060"; + client.createSchema(parent, schema, schemaId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSchemaTest2() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockSchemaService.addResponse(expectedResponse); + + String parent = "parent-995424086"; + Schema schema = Schema.newBuilder().build(); + String schemaId = "schemaId-697673060"; + + Schema actualResponse = client.createSchema(parent, schema, schemaId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + CreateSchemaRequest actualRequest = ((CreateSchemaRequest) actualRequests.get(0)); + + Assert.assertEquals(parent, actualRequest.getParent()); + Assert.assertEquals(schema, actualRequest.getSchema()); + Assert.assertEquals(schemaId, actualRequest.getSchemaId()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createSchemaExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + String parent = "parent-995424086"; + Schema schema = Schema.newBuilder().build(); + String schemaId = "schemaId-697673060"; + client.createSchema(parent, schema, schemaId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getSchemaTest() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockSchemaService.addResponse(expectedResponse); + + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + + Schema actualResponse = client.getSchema(name); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + GetSchemaRequest actualRequest = ((GetSchemaRequest) actualRequests.get(0)); + + Assert.assertEquals(name.toString(), actualRequest.getName()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void getSchemaExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + client.getSchema(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getSchemaTest2() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockSchemaService.addResponse(expectedResponse); + + String name = "name3373707"; + + Schema actualResponse = client.getSchema(name); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + GetSchemaRequest actualRequest = ((GetSchemaRequest) actualRequests.get(0)); + + Assert.assertEquals(name, actualRequest.getName()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void getSchemaExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + String name = "name3373707"; + client.getSchema(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSchemasTest() throws Exception { + Schema responsesElement = Schema.newBuilder().build(); + ListSchemasResponse expectedResponse = + ListSchemasResponse.newBuilder() + .setNextPageToken("") + .addAllSchemas(Arrays.asList(responsesElement)) + .build(); + mockSchemaService.addResponse(expectedResponse); + + ProjectName parent = ProjectName.of("[PROJECT]"); + + ListSchemasPagedResponse pagedListResponse = client.listSchemas(parent); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSchemasList().get(0), resources.get(0)); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListSchemasRequest actualRequest = ((ListSchemasRequest) actualRequests.get(0)); + + Assert.assertEquals(parent.toString(), actualRequest.getParent()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listSchemasExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + ProjectName parent = ProjectName.of("[PROJECT]"); + client.listSchemas(parent); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSchemasTest2() throws Exception { + Schema responsesElement = Schema.newBuilder().build(); + ListSchemasResponse expectedResponse = + ListSchemasResponse.newBuilder() + .setNextPageToken("") + .addAllSchemas(Arrays.asList(responsesElement)) + .build(); + mockSchemaService.addResponse(expectedResponse); + + String parent = "parent-995424086"; + + ListSchemasPagedResponse pagedListResponse = client.listSchemas(parent); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSchemasList().get(0), resources.get(0)); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListSchemasRequest actualRequest = ((ListSchemasRequest) actualRequests.get(0)); + + Assert.assertEquals(parent, actualRequest.getParent()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listSchemasExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + String parent = "parent-995424086"; + client.listSchemas(parent); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSchemaRevisionsTest() throws Exception { + Schema responsesElement = Schema.newBuilder().build(); + ListSchemaRevisionsResponse expectedResponse = + ListSchemaRevisionsResponse.newBuilder() + .setNextPageToken("") + .addAllSchemas(Arrays.asList(responsesElement)) + .build(); + mockSchemaService.addResponse(expectedResponse); + + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + + ListSchemaRevisionsPagedResponse pagedListResponse = client.listSchemaRevisions(name); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSchemasList().get(0), resources.get(0)); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListSchemaRevisionsRequest actualRequest = ((ListSchemaRevisionsRequest) actualRequests.get(0)); + + Assert.assertEquals(name.toString(), actualRequest.getName()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listSchemaRevisionsExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + client.listSchemaRevisions(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSchemaRevisionsTest2() throws Exception { + Schema responsesElement = Schema.newBuilder().build(); + ListSchemaRevisionsResponse expectedResponse = + ListSchemaRevisionsResponse.newBuilder() + .setNextPageToken("") + .addAllSchemas(Arrays.asList(responsesElement)) + .build(); + mockSchemaService.addResponse(expectedResponse); + + String name = "name3373707"; + + ListSchemaRevisionsPagedResponse pagedListResponse = client.listSchemaRevisions(name); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSchemasList().get(0), resources.get(0)); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListSchemaRevisionsRequest actualRequest = ((ListSchemaRevisionsRequest) actualRequests.get(0)); + + Assert.assertEquals(name, actualRequest.getName()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listSchemaRevisionsExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + String name = "name3373707"; + client.listSchemaRevisions(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void commitSchemaTest() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockSchemaService.addResponse(expectedResponse); + + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + Schema schema = Schema.newBuilder().build(); + + Schema actualResponse = client.commitSchema(name, schema); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + CommitSchemaRequest actualRequest = ((CommitSchemaRequest) actualRequests.get(0)); + + Assert.assertEquals(name.toString(), actualRequest.getName()); + Assert.assertEquals(schema, actualRequest.getSchema()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void commitSchemaExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + Schema schema = Schema.newBuilder().build(); + client.commitSchema(name, schema); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void commitSchemaTest2() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockSchemaService.addResponse(expectedResponse); + + String name = "name3373707"; + Schema schema = Schema.newBuilder().build(); + + Schema actualResponse = client.commitSchema(name, schema); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + CommitSchemaRequest actualRequest = ((CommitSchemaRequest) actualRequests.get(0)); + + Assert.assertEquals(name, actualRequest.getName()); + Assert.assertEquals(schema, actualRequest.getSchema()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void commitSchemaExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + String name = "name3373707"; + Schema schema = Schema.newBuilder().build(); + client.commitSchema(name, schema); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void rollbackSchemaTest() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockSchemaService.addResponse(expectedResponse); + + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + String revisionId = "revisionId-1507445162"; + + Schema actualResponse = client.rollbackSchema(name, revisionId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + RollbackSchemaRequest actualRequest = ((RollbackSchemaRequest) actualRequests.get(0)); + + Assert.assertEquals(name.toString(), actualRequest.getName()); + Assert.assertEquals(revisionId, actualRequest.getRevisionId()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void rollbackSchemaExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + String revisionId = "revisionId-1507445162"; + client.rollbackSchema(name, revisionId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void rollbackSchemaTest2() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockSchemaService.addResponse(expectedResponse); + + String name = "name3373707"; + String revisionId = "revisionId-1507445162"; + + Schema actualResponse = client.rollbackSchema(name, revisionId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + RollbackSchemaRequest actualRequest = ((RollbackSchemaRequest) actualRequests.get(0)); + + Assert.assertEquals(name, actualRequest.getName()); + Assert.assertEquals(revisionId, actualRequest.getRevisionId()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void rollbackSchemaExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + String name = "name3373707"; + String revisionId = "revisionId-1507445162"; + client.rollbackSchema(name, revisionId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSchemaRevisionTest() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockSchemaService.addResponse(expectedResponse); + + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + String revisionId = "revisionId-1507445162"; + + Schema actualResponse = client.deleteSchemaRevision(name, revisionId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + DeleteSchemaRevisionRequest actualRequest = + ((DeleteSchemaRevisionRequest) actualRequests.get(0)); + + Assert.assertEquals(name.toString(), actualRequest.getName()); + Assert.assertEquals(revisionId, actualRequest.getRevisionId()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void deleteSchemaRevisionExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + String revisionId = "revisionId-1507445162"; + client.deleteSchemaRevision(name, revisionId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSchemaRevisionTest2() throws Exception { + Schema expectedResponse = + Schema.newBuilder() + .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setDefinition("definition-1014418093") + .setRevisionId("revisionId-1507445162") + .setRevisionCreateTime(Timestamp.newBuilder().build()) + .build(); + mockSchemaService.addResponse(expectedResponse); + + String name = "name3373707"; + String revisionId = "revisionId-1507445162"; + + Schema actualResponse = client.deleteSchemaRevision(name, revisionId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + DeleteSchemaRevisionRequest actualRequest = + ((DeleteSchemaRevisionRequest) actualRequests.get(0)); + + Assert.assertEquals(name, actualRequest.getName()); + Assert.assertEquals(revisionId, actualRequest.getRevisionId()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void deleteSchemaRevisionExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + String name = "name3373707"; + String revisionId = "revisionId-1507445162"; + client.deleteSchemaRevision(name, revisionId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSchemaTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockSchemaService.addResponse(expectedResponse); + + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + + client.deleteSchema(name); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + DeleteSchemaRequest actualRequest = ((DeleteSchemaRequest) actualRequests.get(0)); + + Assert.assertEquals(name.toString(), actualRequest.getName()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void deleteSchemaExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]"); + client.deleteSchema(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSchemaTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockSchemaService.addResponse(expectedResponse); + + String name = "name3373707"; + + client.deleteSchema(name); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + DeleteSchemaRequest actualRequest = ((DeleteSchemaRequest) actualRequests.get(0)); + + Assert.assertEquals(name, actualRequest.getName()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void deleteSchemaExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + String name = "name3373707"; + client.deleteSchema(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void validateSchemaTest() throws Exception { + ValidateSchemaResponse expectedResponse = ValidateSchemaResponse.newBuilder().build(); + mockSchemaService.addResponse(expectedResponse); + + ProjectName parent = ProjectName.of("[PROJECT]"); + Schema schema = Schema.newBuilder().build(); + + ValidateSchemaResponse actualResponse = client.validateSchema(parent, schema); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ValidateSchemaRequest actualRequest = ((ValidateSchemaRequest) actualRequests.get(0)); + + Assert.assertEquals(parent.toString(), actualRequest.getParent()); + Assert.assertEquals(schema, actualRequest.getSchema()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void validateSchemaExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + ProjectName parent = ProjectName.of("[PROJECT]"); + Schema schema = Schema.newBuilder().build(); + client.validateSchema(parent, schema); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void validateSchemaTest2() throws Exception { + ValidateSchemaResponse expectedResponse = ValidateSchemaResponse.newBuilder().build(); + mockSchemaService.addResponse(expectedResponse); + + String parent = "parent-995424086"; + Schema schema = Schema.newBuilder().build(); + + ValidateSchemaResponse actualResponse = client.validateSchema(parent, schema); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ValidateSchemaRequest actualRequest = ((ValidateSchemaRequest) actualRequests.get(0)); + + Assert.assertEquals(parent, actualRequest.getParent()); + Assert.assertEquals(schema, actualRequest.getSchema()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void validateSchemaExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + String parent = "parent-995424086"; + Schema schema = Schema.newBuilder().build(); + client.validateSchema(parent, schema); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void validateMessageTest() throws Exception { + ValidateMessageResponse expectedResponse = ValidateMessageResponse.newBuilder().build(); + mockSchemaService.addResponse(expectedResponse); + + ValidateMessageRequest request = + ValidateMessageRequest.newBuilder() + .setParent(ProjectName.of("[PROJECT]").toString()) + .setMessage(ByteString.EMPTY) + .setEncoding(Encoding.forNumber(0)) + .build(); + + ValidateMessageResponse actualResponse = client.validateMessage(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSchemaService.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ValidateMessageRequest actualRequest = ((ValidateMessageRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getParent(), actualRequest.getParent()); + Assert.assertEquals(request.getName(), actualRequest.getName()); + Assert.assertEquals(request.getSchema(), actualRequest.getSchema()); + Assert.assertEquals(request.getMessage(), actualRequest.getMessage()); + Assert.assertEquals(request.getEncoding(), actualRequest.getEncoding()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void validateMessageExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSchemaService.addException(exception); + + try { + ValidateMessageRequest request = + ValidateMessageRequest.newBuilder() + .setParent(ProjectName.of("[PROJECT]").toString()) + .setMessage(ByteString.EMPTY) + .setEncoding(Encoding.forNumber(0)) + .build(); + client.validateMessage(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void setIamPolicyTest() throws Exception { + Policy expectedResponse = + Policy.newBuilder() + .setVersion(351608024) + .addAllBindings(new ArrayList()) + .addAllAuditConfigs(new ArrayList()) + .setEtag(ByteString.EMPTY) + .build(); + mockIAMPolicy.addResponse(expectedResponse); + + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setPolicy(Policy.newBuilder().build()) + .setUpdateMask(FieldMask.newBuilder().build()) + .build(); + + Policy actualResponse = client.setIamPolicy(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockIAMPolicy.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + SetIamPolicyRequest actualRequest = ((SetIamPolicyRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getResource(), actualRequest.getResource()); + Assert.assertEquals(request.getPolicy(), actualRequest.getPolicy()); + Assert.assertEquals(request.getUpdateMask(), actualRequest.getUpdateMask()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void setIamPolicyExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockIAMPolicy.addException(exception); + + try { + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setPolicy(Policy.newBuilder().build()) + .setUpdateMask(FieldMask.newBuilder().build()) + .build(); + client.setIamPolicy(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getIamPolicyTest() throws Exception { + Policy expectedResponse = + Policy.newBuilder() + .setVersion(351608024) + .addAllBindings(new ArrayList()) + .addAllAuditConfigs(new ArrayList()) + .setEtag(ByteString.EMPTY) + .build(); + mockIAMPolicy.addResponse(expectedResponse); + + GetIamPolicyRequest request = + GetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setOptions(GetPolicyOptions.newBuilder().build()) + .build(); + + Policy actualResponse = client.getIamPolicy(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockIAMPolicy.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + GetIamPolicyRequest actualRequest = ((GetIamPolicyRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getResource(), actualRequest.getResource()); + Assert.assertEquals(request.getOptions(), actualRequest.getOptions()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void getIamPolicyExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockIAMPolicy.addException(exception); + + try { + GetIamPolicyRequest request = + GetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setOptions(GetPolicyOptions.newBuilder().build()) + .build(); + client.getIamPolicy(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void testIamPermissionsTest() throws Exception { + TestIamPermissionsResponse expectedResponse = + TestIamPermissionsResponse.newBuilder().addAllPermissions(new ArrayList()).build(); + mockIAMPolicy.addResponse(expectedResponse); + + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .addAllPermissions(new ArrayList()) + .build(); + + TestIamPermissionsResponse actualResponse = client.testIamPermissions(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockIAMPolicy.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + TestIamPermissionsRequest actualRequest = ((TestIamPermissionsRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getResource(), actualRequest.getResource()); + Assert.assertEquals(request.getPermissionsList(), actualRequest.getPermissionsList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void testIamPermissionsExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockIAMPolicy.addException(exception); + + try { + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .addAllPermissions(new ArrayList()) + .build(); + client.testIamPermissions(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SequentialExecutorServiceTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SequentialExecutorServiceTest.java new file mode 100644 index 000000000000..3788bd3c04f8 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SequentialExecutorServiceTest.java @@ -0,0 +1,247 @@ +/* + * Copyright 2019 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import com.google.api.core.ApiFuture; +import com.google.api.core.SettableApiFuture; +import com.google.api.gax.core.ExecutorProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.common.collect.ImmutableList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.CancellationException; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutionException; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public final class SequentialExecutorServiceTest { + private final ExecutorProvider executorProvider = + InstantiatingExecutorProvider.newBuilder() + .setExecutorThreadCount(5 * Runtime.getRuntime().availableProcessors()) + .build(); + + static class AsyncTaskCallable implements Callable> { + boolean isCalled = false; + SettableApiFuture result = SettableApiFuture.create(); + + @Override + public ApiFuture call() { + isCalled = true; + return result; + } + + public boolean isCalled() { + return isCalled; + } + + public void finishWithError(Throwable e) { + result.setException(e); + } + + public void finish() { + result.set("ok"); + } + } + + @Test + public void testExecutorRunsNextTaskWhenPrevResponseReceived() throws Exception { + SequentialExecutorService.CallbackExecutor sequentialExecutorService = + new SequentialExecutorService.CallbackExecutor(executorProvider.getExecutor()); + AsyncTaskCallable callable1 = new AsyncTaskCallable(); + AsyncTaskCallable callable2 = new AsyncTaskCallable(); + AsyncTaskCallable callable3 = new AsyncTaskCallable(); + + ApiFuture result1 = sequentialExecutorService.submit("key", callable1); + ApiFuture result2 = sequentialExecutorService.submit("key", callable2); + ApiFuture result3 = sequentialExecutorService.submit("key", callable3); + + Thread.sleep(1000); + assertFalse(callable2.isCalled()); + assertFalse(callable3.isCalled()); + callable1.finish(); + assertEquals("ok", result1.get()); + + assertFalse(callable3.isCalled()); + callable2.finish(); + assertEquals("ok", result2.get()); + + callable3.finish(); + assertEquals("ok", result3.get()); + } + + @Test + public void testExecutorRunsDifferentKeySimultaneously() throws Exception { + SequentialExecutorService.CallbackExecutor sequentialExecutorService = + new SequentialExecutorService.CallbackExecutor(executorProvider.getExecutor()); + AsyncTaskCallable callable1 = new AsyncTaskCallable(); + AsyncTaskCallable callable2 = new AsyncTaskCallable(); + AsyncTaskCallable callable3 = new AsyncTaskCallable(); + + // Submit three tasks (two tasks with "key", and one task with "key2"). + ApiFuture result1 = sequentialExecutorService.submit("key", callable1); + ApiFuture result2 = sequentialExecutorService.submit("key", callable2); + ApiFuture result3 = sequentialExecutorService.submit("key2", callable3); + + // The task associated with "key2" can be run in parallel with other tasks with "key". + callable3.finish(); + assertEquals("ok", result3.get()); + + // Sleep some time to give the test a chance to fail. Verify that the second task has not been + // executed while the main thread is slpeeing. + Thread.sleep(100); + assertFalse(callable2.isCalled()); + // Complete the first task. + callable1.finish(); + assertEquals("ok", result1.get()); + // Now, the second task can be executed. + callable2.finish(); + assertEquals("ok", result2.get()); + } + + @Test + public void testExecutorCancelsAllTasksWhenOneFailed() throws Exception { + SequentialExecutorService.CallbackExecutor sequentialExecutorService = + new SequentialExecutorService.CallbackExecutor(executorProvider.getExecutor()); + AsyncTaskCallable callable1 = new AsyncTaskCallable(); + AsyncTaskCallable callable2 = new AsyncTaskCallable(); + AsyncTaskCallable callable3 = new AsyncTaskCallable(); + + ApiFuture result1 = sequentialExecutorService.submit("key", callable1); + ApiFuture result2 = sequentialExecutorService.submit("key", callable2); + ApiFuture result3 = sequentialExecutorService.submit("key", callable3); + + Throwable failure = new Exception("failure"); + callable1.finishWithError(failure); + // The failed task throws an exception that contains the cause of the failure. + try { + result1.get(); + fail("Should have thrown an ExecutionException"); + } catch (ExecutionException e) { + assertEquals(failure, e.getCause()); + } + // Other tasks in the queue are expected to fail with a CancellationException. + for (ApiFuture result : ImmutableList.of(result2, result3)) { + try { + result.get(); + fail("Should have thrown an ExecutionException"); + } catch (ExecutionException e) { + assertThat(e.getCause()).isInstanceOf(CancellationException.class); + } + } + } + + /** + * A task that sleeps {@code taskDurationMillis} milliseconds. Appends its {@code taskId} to + * {@code startedTasksSequence} before sleeping and appends it to {@code completedTasksSequence} + * when sleeping is done. + */ + static class SleepingSyncTask implements Runnable { + private final int taskId; + private final long taskDurationMillis; + private final LinkedHashSet startedTasksSequence; + private final LinkedHashSet completedTasksSequence; + private final CountDownLatch remainingTasksCount; + + public SleepingSyncTask( + int taskId, + long taskDurationMillis, + LinkedHashSet startedTasksSequence, + LinkedHashSet completedTasksSequence, + CountDownLatch remainingTasksCount) { + this.taskId = taskId; + this.taskDurationMillis = taskDurationMillis; + this.startedTasksSequence = startedTasksSequence; + this.completedTasksSequence = completedTasksSequence; + this.remainingTasksCount = remainingTasksCount; + } + + @Override + public void run() { + if (taskId > 0) { + // Verify that the previous task has been completed. + assertTrue(startedTasksSequence.contains(taskId - 1)); + assertTrue(completedTasksSequence.contains(taskId - 1)); + } + startedTasksSequence.add(taskId); + try { + Thread.sleep(taskDurationMillis); + } catch (InterruptedException e) { + return; + } + completedTasksSequence.add(taskId); + remainingTasksCount.countDown(); + + // Verify that the next task has not been started yet. + assertFalse(startedTasksSequence.contains(taskId + 1)); + assertFalse(completedTasksSequence.contains(taskId + 1)); + } + } + + @Test + public void SequentialExecutorRunsTasksAutomatically() throws Exception { + int numKeys = 50; + int numTasks = 50; + SequentialExecutorService.AutoExecutor sequentialExecutor = + new SequentialExecutorService.AutoExecutor(executorProvider.getExecutor()); + CountDownLatch remainingTasksCount = new CountDownLatch(numKeys * numTasks); + // Maps keys to lists of started and completed tasks. + Map> startedTasks = new HashMap<>(); + Map> completedTasks = new HashMap<>(); + + for (int i = 0; i < numKeys; i++) { + String key = "key" + i; + LinkedHashSet startedTasksSequence = new LinkedHashSet<>(); + LinkedHashSet completedTasksSequence = new LinkedHashSet<>(); + startedTasks.put(key, completedTasksSequence); + completedTasks.put(key, completedTasksSequence); + for (int taskId = 0; taskId < numTasks; taskId++) { + SleepingSyncTask task = + new SleepingSyncTask( + taskId, 5, startedTasksSequence, completedTasksSequence, remainingTasksCount); + sequentialExecutor.submit(key, task); + } + } + + remainingTasksCount.await(); + + for (int i = 0; i < numKeys; i++) { + LinkedHashSet startedTasksSequence = startedTasks.get("key" + i); + LinkedHashSet completedTasksSequence = completedTasks.get("key" + i); + // Verify that the tasks have been started and completed in order. + int expectedTaskId = 0; + Iterator it1 = startedTasksSequence.iterator(); + Iterator it2 = completedTasksSequence.iterator(); + while (it1.hasNext() && it2.hasNext()) { + assertEquals(expectedTaskId, it1.next().intValue()); + assertEquals(expectedTaskId, it2.next().intValue()); + expectedTaskId++; + } + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/StatusUtilTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/StatusUtilTest.java new file mode 100644 index 000000000000..d1eb63b2719c --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/StatusUtilTest.java @@ -0,0 +1,42 @@ +/* + * Copyright 2019 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 + * + * https://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. + */ +package com.google.cloud.pubsub.v1; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.api.gax.grpc.GrpcStatusCode; +import com.google.api.gax.rpc.ApiException; +import io.grpc.Status.Code; +import org.junit.Test; + +public class StatusUtilTest { + + @Test + public void testIsRetryable() { + assertThat( + StatusUtil.isRetryable( + new ApiException("derp", null, GrpcStatusCode.of(Code.UNAVAILABLE), false))) + .isTrue(); + assertThat( + StatusUtil.isRetryable( + new ApiException( + "Server shutdownNow invoked", + null, + GrpcStatusCode.of(Code.UNAVAILABLE), + false))) + .isFalse(); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnectionTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnectionTest.java new file mode 100644 index 000000000000..6979963a5d30 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/StreamingSubscriberConnectionTest.java @@ -0,0 +1,907 @@ +/* + * Copyright 2022 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. + */ + +package com.google.cloud.pubsub.v1; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.Mockito.*; + +import com.google.api.core.ApiFutures; +import com.google.api.core.SettableApiFuture; +import com.google.api.gax.batching.FlowControlSettings; +import com.google.api.gax.batching.FlowController; +import com.google.api.gax.core.Distribution; +import com.google.api.gax.grpc.GrpcStatusCode; +import com.google.api.gax.rpc.ApiException; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.ClientStream; +import com.google.api.gax.rpc.ResponseObserver; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.rpc.StreamController; +import com.google.cloud.pubsub.v1.stub.SubscriberStub; +import com.google.common.collect.Lists; +import com.google.protobuf.Any; +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.ModifyAckDeadlineRequest; +import com.google.pubsub.v1.StreamingPullRequest; +import com.google.pubsub.v1.StreamingPullResponse; +import com.google.rpc.ErrorInfo; +import com.google.rpc.Status; +import io.grpc.Status.Code; +import io.grpc.StatusException; +import io.grpc.protobuf.StatusProto; +import java.time.Duration; +import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestName; +import org.mockito.ArgumentCaptor; + +/** Tests for {@link StreamingSubscriberConnection}. */ +public class StreamingSubscriberConnectionTest { + @Rule public TestName testName = new TestName(); + + private FakeScheduledExecutorService systemExecutor; + private FakeScheduledExecutorService executor; + private FakeClock clock; + private SubscriberStub mockSubscriberStub; + + private static final String MOCK_SUBSCRIPTION_NAME = + "projects/MOCK-PROJECT/subscriptions/MOCK-SUBSCRIPTION"; + private static final String MOCK_ACK_ID_SUCCESS = "MOCK-ACK-ID-SUCCESS"; + private static final String MOCK_ACK_ID_SUCCESS_2 = "MOCK-ACK-ID-SUCCESS-2"; + private static final String MOCK_ACK_ID_NACK_SUCCESS = "MOCK-ACK-ID-NACK-SUCCESS"; + // Successful modacks should not return a message + private static final String MOCK_ACK_ID_SUCCESS_NO_MESSAGE = "MOCK-ACK-ID-SUCCESS-NO-MESSAGE"; + private static final String MOCK_ACK_ID_TRANSIENT_FAILURE_UNORDERED_ACK_ID_THEN_SUCCESS = + "MOCK-ACK-ID-TRANSIENT-FAILURE-UNORDERED-ACK-ID-THEN-SUCCESS"; + private static final String MOCK_ACK_ID_TRANSIENT_FAILURE_SERVICE_UNAVAILABLE_THEN_SUCCESS = + "MOCK-ACK-ID-TRANSIENT-FAILURE-SERVICE-UNAVAILABLE-THEN-SUCCESS"; + private static final String MOCK_ACK_ID_INVALID = "MOCK-ACK-ID-INVALID"; + private static final String MOCK_ACK_ID_OTHER = "MOCK-ACK-ID-OTHER"; + private static final String MOCK_ACK_ID_NO_METADATA_MAP_INTERNAL_ERROR_THEN_PERMISSION_DENIED = + "MOCK-ACK-ID-NO-METADATA-MAP-INTERNAL-ERROR"; + + private static final String PERMANENT_FAILURE_INVALID_ACK_ID = "PERMANENT_FAILURE_INVALID_ACK_ID"; + private static final String TRANSIENT_FAILURE_UNORDERED_ACK_ID = + "TRANSIENT_FAILURE_UNORDERED_ACK_ID"; + private static final String TRANSIENT_FAILURE_SERVICE_UNAVAILABLE = + "TRANSIENT_FAILURE_SERVICE_UNAVAILABLE"; + private static final String PERMANENT_FAILURE_OTHER = "I_DO_NOT_MATCH_ANY_KNOWN_ERRORS"; + + private static int MOCK_ACK_EXTENSION_DEFAULT_SECONDS = 10; + private static Duration ACK_EXPIRATION_PADDING_DEFAULT_DURATION = Duration.ofSeconds(10); + private static int MAX_DURATION_PER_ACK_EXTENSION_DEFAULT_SECONDS = 10; + + private static final long KEEP_ALIVE_SUPPORT_VERSION = 1; + private static final Duration CLIENT_PING_INTERVAL = Duration.ofSeconds(30); + private static final Duration MAX_ACK_EXTENSION_PERIOD = Duration.ofMinutes(60); + + @Before + public void setUp() { + systemExecutor = new FakeScheduledExecutorService(); + clock = systemExecutor.getClock(); + mockSubscriberStub = mock(SubscriberStub.class, RETURNS_DEEP_STUBS); + } + + @After + public void tearDown() { + systemExecutor.shutdown(); + } + + @Test + public void testSetupAndTeardown() { + StreamingSubscriberConnection streamingSubscriberConnection = + getStreamingSubscriberConnection(false); + + streamingSubscriberConnection.startAsync(); + streamingSubscriberConnection.awaitRunning(); + streamingSubscriberConnection.stopAsync(); + streamingSubscriberConnection.awaitTerminated(); + } + + @Test + public void testRunShutdown_TimeoutMet() throws Exception { + SubscriberShutdownSettings shutdownSettings = + SubscriberShutdownSettings.newBuilder().setTimeout(Duration.ofSeconds(10)).build(); + StreamingSubscriberConnection.Builder builder = + StreamingSubscriberConnection.newBuilder(mock(MessageReceiverWithAckResponse.class)); + builder.setSubscriberShutdownSettings(shutdownSettings); + StreamingSubscriberConnection streamingSubscriberConnection = + getStreamingSubscriberConnectionFromBuilder(builder); + + streamingSubscriberConnection.startAsync().awaitRunning(); + streamingSubscriberConnection.stopAsync(); + + // Should terminate quickly as there are no outstanding messages. + streamingSubscriberConnection.awaitTerminated(1, TimeUnit.SECONDS); + } + + @Test + public void testRunShutdown_TimeoutExceeded() throws Exception { + final SettableApiFuture ackFuture = SettableApiFuture.create(); + when(mockSubscriberStub.acknowledgeCallable().futureCall(any(AcknowledgeRequest.class))) + .thenReturn(ackFuture); + + SubscriberShutdownSettings shutdownSettings = + SubscriberShutdownSettings.newBuilder().setTimeout(Duration.ofSeconds(2)).build(); + StreamingSubscriberConnection.Builder builder = + StreamingSubscriberConnection.newBuilder(mock(MessageReceiverWithAckResponse.class)); + StreamingSubscriberConnection streamingSubscriberConnection = + getStreamingSubscriberConnectionFromBuilder(builder, shutdownSettings); + streamingSubscriberConnection.setExactlyOnceDeliveryEnabled(true); + + streamingSubscriberConnection.startAsync().awaitRunning(); + + // Send an ACK that will not complete. + SettableApiFuture messageFuture = SettableApiFuture.create(); + streamingSubscriberConnection.sendAckOperations( + Collections.singletonList( + AckRequestData.newBuilder("ack1").setMessageFuture(messageFuture).build())); + + Thread t = + new Thread( + () -> { + streamingSubscriberConnection.stopAsync(); + }); + t.start(); + + Thread t2 = + new Thread( + () -> { + try { + streamingSubscriberConnection.awaitTerminated(1, TimeUnit.SECONDS); + fail("Should have timed out"); + } catch (TimeoutException e) { + // expected + } + }); + t2.start(); + t2.join(); + + // Advance the clock past the shutdown timeout. + clock.advance(3, TimeUnit.SECONDS); + t.join(); + + // Now it should terminate. + streamingSubscriberConnection.awaitTerminated(); + assertFalse(streamingSubscriberConnection.isRunning()); + assertFalse(messageFuture.isDone()); + } + + @Test + public void testAckDuringNackImmediatelyShutdown() throws Exception { + SubscriberShutdownSettings shutdownSettings = + SubscriberShutdownSettings.newBuilder() + .setMode(SubscriberShutdownSettings.ShutdownMode.NACK_IMMEDIATELY) + .build(); + + MessageDispatcher mockMessageDispatcher = mock(MessageDispatcher.class); + when(mockMessageDispatcher.getNackImmediatelyShutdownInProgress()).thenReturn(true); + + StreamingSubscriberConnection.Builder builder = + StreamingSubscriberConnection.newBuilder(mock(MessageReceiverWithAckResponse.class)); + StreamingSubscriberConnection streamingSubscriberConnection = + getStreamingSubscriberConnectionFromBuilder(builder, shutdownSettings); + + // Use reflection to set the mock message dispatcher + java.lang.reflect.Field dispatcherField = + StreamingSubscriberConnection.class.getDeclaredField("messageDispatcher"); + dispatcherField.setAccessible(true); + dispatcherField.set(streamingSubscriberConnection, mockMessageDispatcher); + + streamingSubscriberConnection.setExactlyOnceDeliveryEnabled(true); + + SettableApiFuture messageFuture = SettableApiFuture.create(); + AckRequestData ackRequestData = + AckRequestData.newBuilder("ack1").setMessageFuture(messageFuture).build(); + + when(mockSubscriberStub.acknowledgeCallable().futureCall(any())) + .thenReturn(ApiFutures.immediateFuture(null)); + streamingSubscriberConnection.sendAckOperations(Collections.singletonList(ackRequestData)); + + verify(mockMessageDispatcher, times(1)).notifyAckFailed(ackRequestData); + assertEquals(AckResponse.OTHER, messageFuture.get()); + } + + @Test + public void testSendAckOperationsExactlyOnceDisabledNoMessageFutures() { + // Setup mocks + List modackRequestDataList = new ArrayList(); + + ModackRequestData modackRequestDataSuccess = + new ModackRequestData( + MOCK_ACK_EXTENSION_DEFAULT_SECONDS, + AckRequestData.newBuilder(MOCK_ACK_ID_SUCCESS).build()); + modackRequestDataList.add(modackRequestDataSuccess); + + ModackRequestData modackRequestDataNack = + new ModackRequestData(0, AckRequestData.newBuilder(MOCK_ACK_ID_SUCCESS).build()); + modackRequestDataList.add(modackRequestDataNack); + + List ackRequestDataList = new ArrayList(); + AckRequestData ackRequestDataSuccess = AckRequestData.newBuilder(MOCK_ACK_ID_SUCCESS).build(); + ackRequestDataList.add(ackRequestDataSuccess); + + // Instantiate class and run operation(s) + StreamingSubscriberConnection streamingSubscriberConnection = + getStreamingSubscriberConnection(false); + streamingSubscriberConnection.sendAckOperations(ackRequestDataList); + streamingSubscriberConnection.sendModackOperations(modackRequestDataList); + + // Assert expected behavior + verify(mockSubscriberStub, times(2)).modifyAckDeadlineCallable(); + verify(mockSubscriberStub, times(1)).acknowledgeCallable(); + } + + @Test + public void testSendAckOperationsExactlyOnceEnabledMessageFuturesModacks() { + // Setup + + // The list(s) of ackIds allows us to mock the grpc response(s) + List ackIdsInitialRequest = new ArrayList<>(); + List ackIdsRetryRequest = new ArrayList<>(); + + Map errorInfoMetadataMapInitialRequest = new HashMap(); + List modackRequestDataList = new ArrayList(); + + ModackRequestData modackRequestDataDefault = + new ModackRequestData(MOCK_ACK_EXTENSION_DEFAULT_SECONDS); + + // Nack SUCCESS + SettableApiFuture messageFutureSuccessExpected = SettableApiFuture.create(); + ModackRequestData modackRequestDataSuccess = + new ModackRequestData( + 0, + AckRequestData.newBuilder(MOCK_ACK_ID_NACK_SUCCESS) + .setMessageFuture(messageFutureSuccessExpected) + .build()); + modackRequestDataList.add(modackRequestDataSuccess); + + // SUCCESS - no message + SettableApiFuture messageFutureNotDoneExpected = SettableApiFuture.create(); + modackRequestDataDefault.addAckRequestData( + AckRequestData.newBuilder(MOCK_ACK_ID_SUCCESS_NO_MESSAGE) + .setMessageFuture(messageFutureNotDoneExpected) + .build()); + ackIdsInitialRequest.add(MOCK_ACK_ID_SUCCESS_NO_MESSAGE); + + // INVALID + SettableApiFuture messageFutureInvalidExpected = SettableApiFuture.create(); + modackRequestDataDefault.addAckRequestData( + AckRequestData.newBuilder(MOCK_ACK_ID_INVALID) + .setMessageFuture(messageFutureInvalidExpected) + .build()); + errorInfoMetadataMapInitialRequest.put(MOCK_ACK_ID_INVALID, PERMANENT_FAILURE_INVALID_ACK_ID); + ackIdsInitialRequest.add(MOCK_ACK_ID_INVALID); + + // OTHER + SettableApiFuture messageFutureOtherExpected = SettableApiFuture.create(); + modackRequestDataDefault.addAckRequestData( + AckRequestData.newBuilder(MOCK_ACK_ID_OTHER) + .setMessageFuture(messageFutureOtherExpected) + .build()); + errorInfoMetadataMapInitialRequest.put(MOCK_ACK_ID_OTHER, PERMANENT_FAILURE_OTHER); + ackIdsInitialRequest.add(MOCK_ACK_ID_OTHER); + + // Initial) FAILURE - TRANSIENT SERVICE UNAVAILABLE + // Retry) SUCCESS - but no message future set + SettableApiFuture messageFutureTransientFailureServiceUnavailableThenSuccess = + SettableApiFuture.create(); + modackRequestDataDefault.addAckRequestData( + AckRequestData.newBuilder(MOCK_ACK_ID_TRANSIENT_FAILURE_SERVICE_UNAVAILABLE_THEN_SUCCESS) + .setMessageFuture(messageFutureTransientFailureServiceUnavailableThenSuccess) + .build()); + errorInfoMetadataMapInitialRequest.put( + MOCK_ACK_ID_TRANSIENT_FAILURE_SERVICE_UNAVAILABLE_THEN_SUCCESS, + TRANSIENT_FAILURE_SERVICE_UNAVAILABLE); + ackIdsInitialRequest.add(MOCK_ACK_ID_TRANSIENT_FAILURE_SERVICE_UNAVAILABLE_THEN_SUCCESS); + ackIdsRetryRequest.add(MOCK_ACK_ID_TRANSIENT_FAILURE_SERVICE_UNAVAILABLE_THEN_SUCCESS); + + // Initial) FAILURE - TRANSIENT - UNORDERED ACK ID + // Retry) SUCCESS - but no message future set + SettableApiFuture messageFutureTransientFailureUnorderedAckIdThenSuccess = + SettableApiFuture.create(); + modackRequestDataDefault.addAckRequestData( + AckRequestData.newBuilder(MOCK_ACK_ID_TRANSIENT_FAILURE_UNORDERED_ACK_ID_THEN_SUCCESS) + .setMessageFuture(messageFutureTransientFailureUnorderedAckIdThenSuccess) + .build()); + errorInfoMetadataMapInitialRequest.put( + MOCK_ACK_ID_TRANSIENT_FAILURE_UNORDERED_ACK_ID_THEN_SUCCESS, + TRANSIENT_FAILURE_UNORDERED_ACK_ID); + ackIdsInitialRequest.add(MOCK_ACK_ID_TRANSIENT_FAILURE_UNORDERED_ACK_ID_THEN_SUCCESS); + ackIdsRetryRequest.add(MOCK_ACK_ID_TRANSIENT_FAILURE_UNORDERED_ACK_ID_THEN_SUCCESS); + + modackRequestDataList.add(modackRequestDataDefault); + + // Build our requests so we can set our mock responses + ModifyAckDeadlineRequest modifyAckDeadlineRequestNack = + ModifyAckDeadlineRequest.newBuilder() + .setSubscription(MOCK_SUBSCRIPTION_NAME) + .addAckIds(MOCK_ACK_ID_NACK_SUCCESS) + .setAckDeadlineSeconds(0) + .build(); + + ModifyAckDeadlineRequest modifyAckDeadlineRequestInitial = + ModifyAckDeadlineRequest.newBuilder() + .setSubscription(MOCK_SUBSCRIPTION_NAME) + .addAllAckIds(ackIdsInitialRequest) + .setAckDeadlineSeconds(MOCK_ACK_EXTENSION_DEFAULT_SECONDS) + .build(); + + ModifyAckDeadlineRequest modifyAckDeadlineRequestRetry = + ModifyAckDeadlineRequest.newBuilder() + .setSubscription(MOCK_SUBSCRIPTION_NAME) + .addAllAckIds(ackIdsRetryRequest) + .setAckDeadlineSeconds(MOCK_ACK_EXTENSION_DEFAULT_SECONDS) + .build(); + + // Set mock grpc responses + when(mockSubscriberStub.modifyAckDeadlineCallable().futureCall(modifyAckDeadlineRequestNack)) + .thenReturn(ApiFutures.immediateFuture(null)); + when(mockSubscriberStub.modifyAckDeadlineCallable().futureCall(modifyAckDeadlineRequestInitial)) + .thenReturn( + ApiFutures.immediateFailedFuture( + getMockStatusException(errorInfoMetadataMapInitialRequest))); + when(mockSubscriberStub + .modifyAckDeadlineCallable() + .futureCall( + argThat( + new CustomArgumentMatchers.ModifyAckDeadlineRequestMatcher( + modifyAckDeadlineRequestRetry)))) + .thenReturn(ApiFutures.immediateFuture(null)); + + // Instantiate class and run operation(s) + StreamingSubscriberConnection streamingSubscriberConnection = + getStreamingSubscriberConnection(true); + + streamingSubscriberConnection.sendModackOperations(modackRequestDataList); + + // Backoff + systemExecutor.advanceTime(Duration.ofSeconds(200)); + + // Assert expected behavior + verify(mockSubscriberStub.modifyAckDeadlineCallable(), times(1)) + .futureCall(modifyAckDeadlineRequestNack); + verify(mockSubscriberStub.modifyAckDeadlineCallable(), times(1)) + .futureCall(modifyAckDeadlineRequestInitial); + verify(mockSubscriberStub.modifyAckDeadlineCallable(), times(1)) + .futureCall(modifyAckDeadlineRequestRetry); + verify(mockSubscriberStub, never()).acknowledgeCallable(); + + try { + assertEquals(AckResponse.SUCCESSFUL, messageFutureSuccessExpected.get()); + assertEquals(AckResponse.INVALID, messageFutureInvalidExpected.get()); + assertEquals(AckResponse.OTHER, messageFutureOtherExpected.get()); + assertFalse(messageFutureTransientFailureServiceUnavailableThenSuccess.isDone()); + assertFalse(messageFutureTransientFailureUnorderedAckIdThenSuccess.isDone()); + } catch (InterruptedException | ExecutionException e) { + // In case something goes wrong retrieving the futures + throw new AssertionError(); + } + } + + @Test + public void testSendAckOperationsExactlyOnceEnabledMessageFuturesAcks() { + // Setup + + // The list(s) of ackIds allows us to mock the grpc response(s) + List ackIdsInitialRequest = new ArrayList<>(); + List ackIdsRetryRequest = new ArrayList<>(); + + Map errorInfoMetadataMapInitialRequest = new HashMap(); + List ackRequestDataList = new ArrayList(); + + // SUCCESS + SettableApiFuture messageFutureSuccessExpected = SettableApiFuture.create(); + ackRequestDataList.add( + AckRequestData.newBuilder(MOCK_ACK_ID_SUCCESS) + .setMessageFuture(messageFutureSuccessExpected) + .build()); + ackIdsInitialRequest.add(MOCK_ACK_ID_SUCCESS); + + // INVALID + SettableApiFuture messageFutureInvalidExpected = SettableApiFuture.create(); + ackRequestDataList.add( + AckRequestData.newBuilder(MOCK_ACK_ID_INVALID) + .setMessageFuture(messageFutureInvalidExpected) + .build()); + errorInfoMetadataMapInitialRequest.put(MOCK_ACK_ID_INVALID, PERMANENT_FAILURE_INVALID_ACK_ID); + ackIdsInitialRequest.add(MOCK_ACK_ID_INVALID); + + // OTHER + SettableApiFuture messageFutureOtherExpected = SettableApiFuture.create(); + ackRequestDataList.add( + AckRequestData.newBuilder(MOCK_ACK_ID_OTHER) + .setMessageFuture(messageFutureOtherExpected) + .build()); + errorInfoMetadataMapInitialRequest.put(MOCK_ACK_ID_OTHER, PERMANENT_FAILURE_OTHER); + ackIdsInitialRequest.add(MOCK_ACK_ID_OTHER); + + // Initial) FAILURE - TRANSIENT SERVICE UNAVAILABLE + // Retry) SUCCESS + SettableApiFuture messageFutureTransientFailureServiceUnavailableThenSuccess = + SettableApiFuture.create(); + ackRequestDataList.add( + AckRequestData.newBuilder(MOCK_ACK_ID_TRANSIENT_FAILURE_SERVICE_UNAVAILABLE_THEN_SUCCESS) + .setMessageFuture(messageFutureTransientFailureServiceUnavailableThenSuccess) + .build()); + errorInfoMetadataMapInitialRequest.put( + MOCK_ACK_ID_TRANSIENT_FAILURE_SERVICE_UNAVAILABLE_THEN_SUCCESS, + TRANSIENT_FAILURE_SERVICE_UNAVAILABLE); + ackIdsInitialRequest.add(MOCK_ACK_ID_TRANSIENT_FAILURE_SERVICE_UNAVAILABLE_THEN_SUCCESS); + ackIdsRetryRequest.add(MOCK_ACK_ID_TRANSIENT_FAILURE_SERVICE_UNAVAILABLE_THEN_SUCCESS); + + // Initial) FAILURE - TRANSIENT - UNORDERED ACK ID + // Retry) SUCCESS + SettableApiFuture messageFutureTransientFailureUnorderedAckIdThenSuccess = + SettableApiFuture.create(); + ackRequestDataList.add( + AckRequestData.newBuilder(MOCK_ACK_ID_TRANSIENT_FAILURE_UNORDERED_ACK_ID_THEN_SUCCESS) + .setMessageFuture(messageFutureTransientFailureUnorderedAckIdThenSuccess) + .build()); + errorInfoMetadataMapInitialRequest.put( + MOCK_ACK_ID_TRANSIENT_FAILURE_UNORDERED_ACK_ID_THEN_SUCCESS, + TRANSIENT_FAILURE_UNORDERED_ACK_ID); + ackIdsInitialRequest.add(MOCK_ACK_ID_TRANSIENT_FAILURE_UNORDERED_ACK_ID_THEN_SUCCESS); + ackIdsRetryRequest.add(MOCK_ACK_ID_TRANSIENT_FAILURE_UNORDERED_ACK_ID_THEN_SUCCESS); + + // Build our requests so we can set our mock responses + AcknowledgeRequest acknowledgeRequestInitial = + AcknowledgeRequest.newBuilder() + .setSubscription(MOCK_SUBSCRIPTION_NAME) + .addAllAckIds(ackIdsInitialRequest) + .build(); + + AcknowledgeRequest acknowledgeRequestRetry = + AcknowledgeRequest.newBuilder() + .setSubscription(MOCK_SUBSCRIPTION_NAME) + .addAllAckIds(ackIdsRetryRequest) + .build(); + + // Set mock grpc responses + when(mockSubscriberStub.acknowledgeCallable().futureCall(acknowledgeRequestInitial)) + .thenReturn( + ApiFutures.immediateFailedFuture( + getMockStatusException(errorInfoMetadataMapInitialRequest))); + when(mockSubscriberStub + .acknowledgeCallable() + .futureCall( + argThat( + new CustomArgumentMatchers.AcknowledgeRequestMatcher(acknowledgeRequestRetry)))) + .thenReturn(ApiFutures.immediateFuture(null)); + + // Instantiate class and run operation(s) + StreamingSubscriberConnection streamingSubscriberConnection = + getStreamingSubscriberConnection(true); + + streamingSubscriberConnection.sendAckOperations(ackRequestDataList); + + // Backoff + systemExecutor.advanceTime(Duration.ofMillis(200)); + + // Assert expected behavior; + verify(mockSubscriberStub.acknowledgeCallable(), times(1)) + .futureCall(acknowledgeRequestInitial); + verify(mockSubscriberStub.acknowledgeCallable(), times(1)) + .futureCall( + argThat(new CustomArgumentMatchers.AcknowledgeRequestMatcher(acknowledgeRequestRetry))); + verify(mockSubscriberStub, never()).modifyAckDeadlineCallable(); + + try { + assertEquals(AckResponse.SUCCESSFUL, messageFutureSuccessExpected.get()); + assertEquals(AckResponse.INVALID, messageFutureInvalidExpected.get()); + assertEquals(AckResponse.OTHER, messageFutureOtherExpected.get()); + assertEquals( + AckResponse.SUCCESSFUL, messageFutureTransientFailureServiceUnavailableThenSuccess.get()); + assertEquals( + AckResponse.SUCCESSFUL, messageFutureTransientFailureUnorderedAckIdThenSuccess.get()); + } catch (InterruptedException | ExecutionException e) { + // In case something goes wrong retrieving the futures + throw new AssertionError(); + } + } + + @Test + public void testSendAckOperationsExactlyOnceEnabledErrorWithEmptyMetadataMap() { + // Setup + + // The list(s) of ackIds allows us to mock the grpc response(s) + List ackIdsRequest = new ArrayList<>(); + List ackRequestDataList = new ArrayList(); + + // Initial) INTERNAL error, retryable + // Retry) PERMISSION_DENIED, not retryable + SettableApiFuture messageInternalErrorThenPermissionDenied = + SettableApiFuture.create(); + ackRequestDataList.add( + AckRequestData.newBuilder(MOCK_ACK_ID_NO_METADATA_MAP_INTERNAL_ERROR_THEN_PERMISSION_DENIED) + .setMessageFuture(messageInternalErrorThenPermissionDenied) + .build()); + ackIdsRequest.add(MOCK_ACK_ID_NO_METADATA_MAP_INTERNAL_ERROR_THEN_PERMISSION_DENIED); + + // Build our request so we can set our mock responses + AcknowledgeRequest acknowledgeRequest = + AcknowledgeRequest.newBuilder() + .setSubscription(MOCK_SUBSCRIPTION_NAME) + .addAllAckIds(ackIdsRequest) + .build(); + + ApiException internalError = + new ApiException("internal", null, GrpcStatusCode.of(Code.INTERNAL), true); + ApiException permissionDeniedError = + new ApiException( + "permission_denied", null, GrpcStatusCode.of(Code.PERMISSION_DENIED), false); + // Set mock grpc responses + when(mockSubscriberStub.acknowledgeCallable().futureCall(acknowledgeRequest)) + .thenReturn(ApiFutures.immediateFailedFuture(internalError)) + .thenReturn(ApiFutures.immediateFailedFuture(permissionDeniedError)); + + // Instantiate class and run operation(s) + StreamingSubscriberConnection streamingSubscriberConnection = + getStreamingSubscriberConnection(true); + + streamingSubscriberConnection.sendAckOperations(ackRequestDataList); + + // Backoff + systemExecutor.advanceTime(Duration.ofMillis(200)); + + // Assert expected behavior; + verify(mockSubscriberStub.acknowledgeCallable(), times(2)).futureCall(acknowledgeRequest); + verify(mockSubscriberStub, never()).modifyAckDeadlineCallable(); + + try { + assertEquals(AckResponse.PERMISSION_DENIED, messageInternalErrorThenPermissionDenied.get()); + } catch (InterruptedException | ExecutionException e) { + // In case something goes wrong retrieving the futures + throw new AssertionError(); + } + } + + @Test + public void testSetFailureResponseOutstandingMessages() { + // Setup + + List ackRequestDataList = new ArrayList(); + List nackRequestDataList = new ArrayList(); + List> futureList = + new ArrayList>(); + + // Create some acks + for (int i = 0; i < 5; i++) { + SettableApiFuture future = SettableApiFuture.create(); + futureList.add(future); + ackRequestDataList.add( + AckRequestData.newBuilder("ACK-ID-" + i).setMessageFuture(future).build()); + } + + // Create some nacks + for (int i = 5; i < 10; i++) { + SettableApiFuture future = SettableApiFuture.create(); + futureList.add(future); + nackRequestDataList.add( + AckRequestData.newBuilder("ACK-ID-" + i).setMessageFuture(future).build()); + } + + ModackRequestData modackRequestData = new ModackRequestData(0, nackRequestDataList); + + StreamingSubscriberConnection streamingSubscriberConnection = + getStreamingSubscriberConnection(true); + + streamingSubscriberConnection.sendAckOperations(ackRequestDataList); + streamingSubscriberConnection.sendModackOperations( + Collections.singletonList(modackRequestData)); + + // Assert pending status + futureList.forEach( + ackResponseSettableApiFuture -> { + assertFalse(ackResponseSettableApiFuture.isDone()); + }); + + // Set + streamingSubscriberConnection.setResponseOutstandingMessages(AckResponse.PERMISSION_DENIED); + + // Assert futures + + futureList.forEach( + ackResponseSettableApiFuture -> { + try { + assertEquals(ackResponseSettableApiFuture.get(), AckResponse.PERMISSION_DENIED); + } catch (InterruptedException | ExecutionException e) { + // In case something goes wrong retrieving the futures + throw new AssertionError(); + } + }); + } + + @Test + public void testMaxPerRequestChanges() { + // Setup mocks + List modackRequestDataList = new ArrayList(); + List ackRequestDataList = new ArrayList(); + + int numAckIds = 3000; + int numMaxPerRequestChanges = 1000; + + List mockAckIds = new ArrayList(); + + for (int i = 0; i < numAckIds; i++) { + String mockAckId = "MOCK-ACK-ID-" + i; + mockAckIds.add(mockAckId); + ackRequestDataList.add(AckRequestData.newBuilder(mockAckId).build()); + } + + modackRequestDataList.add( + new ModackRequestData(MOCK_ACK_EXTENSION_DEFAULT_SECONDS, ackRequestDataList)); + + // Instantiate class and run operation(s) + StreamingSubscriberConnection streamingSubscriberConnection = + getStreamingSubscriberConnection(false); + streamingSubscriberConnection.sendAckOperations(ackRequestDataList); + streamingSubscriberConnection.sendModackOperations(modackRequestDataList); + + // Assert expected behavior + for (List mockAckIdsInRequest : Lists.partition(mockAckIds, numMaxPerRequestChanges)) { + AcknowledgeRequest expectedAcknowledgeRequest = + AcknowledgeRequest.newBuilder() + .setSubscription(MOCK_SUBSCRIPTION_NAME) + .addAllAckIds(mockAckIdsInRequest) + .build(); + verify(mockSubscriberStub.acknowledgeCallable(), times(1)) + .futureCall(expectedAcknowledgeRequest); + + ModifyAckDeadlineRequest expectedModifyAckDeadlineRequest = + ModifyAckDeadlineRequest.newBuilder() + .setSubscription(MOCK_SUBSCRIPTION_NAME) + .addAllAckIds(mockAckIdsInRequest) + .setAckDeadlineSeconds(MOCK_ACK_EXTENSION_DEFAULT_SECONDS) + .build(); + verify(mockSubscriberStub.modifyAckDeadlineCallable(), times(1)) + .futureCall(expectedModifyAckDeadlineRequest); + } + } + + @Test + public void testClientPinger_pingSent() { + BidiStreamingCallable mockStreamingCallable = + mock(BidiStreamingCallable.class); + ClientStream mockClientStream = mock(ClientStream.class); + when(mockSubscriberStub.streamingPullCallable()).thenReturn(mockStreamingCallable); + when(mockStreamingCallable.splitCall(any(ResponseObserver.class), any())) + .thenReturn(mockClientStream); + + StreamingSubscriberConnection streamingSubscriberConnection = + getKeepaliveStreamingSubscriberConnection(); + + streamingSubscriberConnection.startAsync(); + streamingSubscriberConnection.awaitRunning(); + + systemExecutor.advanceTime(CLIENT_PING_INTERVAL); + systemExecutor.advanceTime(CLIENT_PING_INTERVAL); + + ArgumentCaptor requestCaptor = + ArgumentCaptor.forClass(StreamingPullRequest.class); + // 1 initial request + 3 pings + verify(mockClientStream, times(4)).send(requestCaptor.capture()); + List requests = requestCaptor.getAllValues(); + + StreamingPullRequest initialRequest = requests.get(0); + assertEquals(MOCK_SUBSCRIPTION_NAME, initialRequest.getSubscription()); + assertEquals(KEEP_ALIVE_SUPPORT_VERSION, initialRequest.getProtocolVersion()); + assertEquals(0, initialRequest.getMaxOutstandingMessages()); + + StreamingPullRequest firstPing = requests.get(1); + assertEquals(StreamingPullRequest.getDefaultInstance(), firstPing); + + StreamingPullRequest secondPing = requests.get(2); + assertEquals(StreamingPullRequest.getDefaultInstance(), secondPing); + + streamingSubscriberConnection.stopAsync(); + streamingSubscriberConnection.awaitTerminated(); + + // No more pings + systemExecutor.advanceTime(CLIENT_PING_INTERVAL); + verify(mockClientStream, times(4)).send(any(StreamingPullRequest.class)); + } + + @Test + public void testClientPinger_pingsNotSentWhenDisabled() { + BidiStreamingCallable mockStreamingCallable = + mock(BidiStreamingCallable.class); + ClientStream mockClientStream = mock(ClientStream.class); + when(mockSubscriberStub.streamingPullCallable()).thenReturn(mockStreamingCallable); + when(mockStreamingCallable.splitCall(any(ResponseObserver.class), any())) + .thenReturn(mockClientStream); + + StreamingSubscriberConnection streamingSubscriberConnection = + getStreamingSubscriberConnection(false); // keepalive disabled + + streamingSubscriberConnection.startAsync(); + streamingSubscriberConnection.awaitRunning(); + + // Initial request. + verify(mockClientStream, times(1)).send(any(StreamingPullRequest.class)); + + // No pings + systemExecutor.advanceTime(CLIENT_PING_INTERVAL); + systemExecutor.advanceTime(CLIENT_PING_INTERVAL); + + verify(mockClientStream, times(1)).send(any(StreamingPullRequest.class)); + } + + @Test + public void testServerMonitor_timesOut() { + BidiStreamingCallable mockStreamingCallable = + mock(BidiStreamingCallable.class); + ClientStream mockClientStream = mock(ClientStream.class); + ArgumentCaptor> observerCaptor = + ArgumentCaptor.forClass(ResponseObserver.class); + when(mockSubscriberStub.streamingPullCallable()).thenReturn(mockStreamingCallable); + when(mockStreamingCallable.splitCall(observerCaptor.capture(), any())) + .thenReturn(mockClientStream); + + // fail pings after the first one to ensure timeout occurs + AtomicInteger pingCount = new AtomicInteger(0); + doAnswer( + (invocation) -> { + StreamingPullRequest req = invocation.getArgument(0); + // Pings are empty requests + if (req.getSubscription().isEmpty()) { + if (pingCount.incrementAndGet() > 2) { // allow first 2 pings + throw new RuntimeException("ping failed"); + } + } + return null; + }) + .when(mockClientStream) + .send(any(StreamingPullRequest.class)); + + StreamingSubscriberConnection streamingSubscriberConnection = + getKeepaliveStreamingSubscriberConnection(); + + streamingSubscriberConnection.startAsync(); + streamingSubscriberConnection.awaitRunning(); + + ResponseObserver observer = observerCaptor.getValue(); + StreamController mockController = mock(StreamController.class); + observer.onStart(mockController); + + systemExecutor.advanceTime(CLIENT_PING_INTERVAL); + verify(mockClientStream, never()).closeSendWithError(any(Exception.class)); + + systemExecutor.advanceTime(CLIENT_PING_INTERVAL); + ArgumentCaptor exceptionCaptor = ArgumentCaptor.forClass(Exception.class); + verify(mockClientStream, times(1)).closeSendWithError(exceptionCaptor.capture()); + StatusException exception = (StatusException) exceptionCaptor.getValue(); + assertEquals(Code.UNAVAILABLE, exception.getStatus().getCode()); + assertEquals("Keepalive timeout with server", exception.getStatus().getDescription()); + } + + @Test + public void testServerMonitor_doesNotTimeOutIfResponseReceived() { + BidiStreamingCallable mockStreamingCallable = + mock(BidiStreamingCallable.class); + ClientStream mockClientStream = mock(ClientStream.class); + ArgumentCaptor> observerCaptor = + ArgumentCaptor.forClass(ResponseObserver.class); + when(mockSubscriberStub.streamingPullCallable()).thenReturn(mockStreamingCallable); + when(mockStreamingCallable.splitCall(observerCaptor.capture(), any())) + .thenReturn(mockClientStream); + + StreamingSubscriberConnection streamingSubscriberConnection = + getKeepaliveStreamingSubscriberConnection(); + + streamingSubscriberConnection.startAsync(); + streamingSubscriberConnection.awaitRunning(); + + ResponseObserver observer = observerCaptor.getValue(); + StreamController mockController = mock(StreamController.class); + observer.onStart(mockController); + + // t=30s: ping sent. + // t=40s: response received. + // t=45s: monitor check. lastPing=30, lastResponse=40. lastPing>lastResponse is false -> no + // timeout. + systemExecutor.advanceTime(Duration.ofSeconds(40)); + observer.onResponse(StreamingPullResponse.getDefaultInstance()); + systemExecutor.advanceTime(Duration.ofSeconds(20)); // to t=60s + observer.onResponse(StreamingPullResponse.getDefaultInstance()); + + verify(mockClientStream, never()).closeSendWithError(any(Exception.class)); + } + + private StreamingSubscriberConnection getStreamingSubscriberConnection( + boolean exactlyOnceDeliveryEnabled) { + StreamingSubscriberConnection streamingSubscriberConnection = + getStreamingSubscriberConnectionFromBuilder( + StreamingSubscriberConnection.newBuilder(mock(MessageReceiverWithAckResponse.class))); + + // This would normally be set from the streaming pull response + streamingSubscriberConnection.setExactlyOnceDeliveryEnabled(exactlyOnceDeliveryEnabled); + + return streamingSubscriberConnection; + } + + private StreamingSubscriberConnection getKeepaliveStreamingSubscriberConnection() { + StreamingSubscriberConnection streamingSubscriberConnection = + getStreamingSubscriberConnectionFromBuilder( + StreamingSubscriberConnection.newBuilder(mock(MessageReceiverWithAckResponse.class)) + .setProtocolVersion(KEEP_ALIVE_SUPPORT_VERSION)); + + return streamingSubscriberConnection; + } + + private StreamingSubscriberConnection getStreamingSubscriberConnectionFromBuilder( + StreamingSubscriberConnection.Builder builder) { + return builder + .setSubscription(MOCK_SUBSCRIPTION_NAME) + .setAckExpirationPadding(ACK_EXPIRATION_PADDING_DEFAULT_DURATION) + .setMaxAckExtensionPeriod(MAX_ACK_EXTENSION_PERIOD) + .setAckLatencyDistribution(mock(Distribution.class)) + .setSubscriberStub(mockSubscriberStub) + .setChannelAffinity(0) + .setFlowControlSettings(mock(FlowControlSettings.class)) + .setFlowController(mock(FlowController.class)) + .setExecutor(executor) + .setSystemExecutor(systemExecutor) + .setClock(clock) + .setMinDurationPerAckExtension(Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION) + .setMinDurationPerAckExtensionDefaultUsed(true) + .setMaxDurationPerAckExtension(Subscriber.DEFAULT_MAX_ACK_DEADLINE_EXTENSION) + .setMaxDurationPerAckExtensionDefaultUsed(true) + .setSubscriberShutdownSettings(SubscriberShutdownSettings.newBuilder().build()) + .build(); + } + + private StreamingSubscriberConnection getStreamingSubscriberConnectionFromBuilder( + StreamingSubscriberConnection.Builder builder, SubscriberShutdownSettings shutdownSettings) { + return builder + .setSubscription(MOCK_SUBSCRIPTION_NAME) + .setAckExpirationPadding(ACK_EXPIRATION_PADDING_DEFAULT_DURATION) + .setAckLatencyDistribution(mock(Distribution.class)) + .setSubscriberStub(mockSubscriberStub) + .setChannelAffinity(0) + .setFlowControlSettings(mock(FlowControlSettings.class)) + .setFlowController(mock(FlowController.class)) + .setExecutor(executor) + .setSystemExecutor(systemExecutor) + .setClock(clock) + .setMinDurationPerAckExtension(Subscriber.DEFAULT_MIN_ACK_DEADLINE_EXTENSION) + .setMinDurationPerAckExtensionDefaultUsed(true) + .setMaxDurationPerAckExtension(Subscriber.DEFAULT_MAX_ACK_DEADLINE_EXTENSION) + .setMaxDurationPerAckExtensionDefaultUsed(true) + .setSubscriberShutdownSettings(shutdownSettings) + .build(); + } + + private StatusException getMockStatusException(Map metadata) { + ErrorInfo errorInfo = ErrorInfo.newBuilder().putAllMetadata(metadata).build(); + Status status = + Status.newBuilder() + .setCode(StatusCode.Code.OK.ordinal()) + .addDetails(Any.pack(errorInfo)) + .build(); + return StatusProto.toStatusException(status); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriberShutdownSettingsTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriberShutdownSettingsTest.java new file mode 100644 index 000000000000..f829375825ea --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriberShutdownSettingsTest.java @@ -0,0 +1,100 @@ +/* + * Copyright 2025 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. + */ + +package com.google.cloud.pubsub.v1; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.pubsub.v1.SubscriberShutdownSettings.ShutdownMode; +import java.time.Duration; +import org.junit.Test; + +public class SubscriberShutdownSettingsTest { + + @Test + public void testDefaultSettings() { + SubscriberShutdownSettings settings = SubscriberShutdownSettings.newBuilder().build(); + + assertNotNull(settings); + assertEquals(ShutdownMode.WAIT_FOR_PROCESSING, settings.getMode()); + assertTrue(settings.getTimeout().isNegative()); // Indefinite timeout + } + + @Test + public void testWaitForProcessingWithCustomTimeout() { + Duration customTimeout = Duration.ofSeconds(30); + SubscriberShutdownSettings settings = + SubscriberShutdownSettings.newBuilder() + .setMode(ShutdownMode.WAIT_FOR_PROCESSING) + .setTimeout(customTimeout) + .build(); + + assertNotNull(settings); + assertEquals(ShutdownMode.WAIT_FOR_PROCESSING, settings.getMode()); + assertEquals(customTimeout, settings.getTimeout()); + } + + @Test + public void testNackImmediatelyWithDefaultTimeout() { + SubscriberShutdownSettings settings = + SubscriberShutdownSettings.newBuilder().setMode(ShutdownMode.NACK_IMMEDIATELY).build(); + + assertNotNull(settings); + assertEquals(ShutdownMode.NACK_IMMEDIATELY, settings.getMode()); + assertTrue(settings.getTimeout().isNegative()); // Indefinite timeout + } + + @Test + public void testNackImmediatelyWithCustomTimeout() { + Duration customTimeout = Duration.ofSeconds(10); + SubscriberShutdownSettings settings = + SubscriberShutdownSettings.newBuilder() + .setMode(ShutdownMode.NACK_IMMEDIATELY) + .setTimeout(customTimeout) + .build(); + + assertNotNull(settings); + assertEquals(ShutdownMode.NACK_IMMEDIATELY, settings.getMode()); + assertEquals(customTimeout, settings.getTimeout()); + } + + @Test + public void testZeroTimeout() { + Duration zeroTimeout = Duration.ZERO; + SubscriberShutdownSettings settings = + SubscriberShutdownSettings.newBuilder() + .setMode(ShutdownMode.WAIT_FOR_PROCESSING) + .setTimeout(zeroTimeout) + .build(); + + assertNotNull(settings); + assertEquals(ShutdownMode.WAIT_FOR_PROCESSING, settings.getMode()); + assertEquals(zeroTimeout, settings.getTimeout()); + assertTrue(settings.getTimeout().isZero()); + } + + @Test(expected = NullPointerException.class) + public void testNullModeThrowsException() { + SubscriberShutdownSettings.newBuilder().setMode(null).build(); + } + + @Test(expected = NullPointerException.class) + public void testNullTimeoutThrowsException() { + SubscriberShutdownSettings.newBuilder().setTimeout(null).build(); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriberTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriberTest.java new file mode 100644 index 000000000000..649769d1c671 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriberTest.java @@ -0,0 +1,453 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import static org.junit.Assert.*; + +import com.google.api.gax.batching.FlowControlSettings; +import com.google.api.gax.core.ExecutorProvider; +import com.google.api.gax.core.FixedExecutorProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.grpc.GrpcStatusCode; +import com.google.api.gax.grpc.GrpcTransportChannel; +import com.google.api.gax.rpc.*; +import com.google.cloud.pubsub.v1.Subscriber.Builder; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import io.grpc.ManagedChannel; +import io.grpc.Server; +import io.grpc.Status; +import io.grpc.StatusException; +import io.grpc.inprocess.InProcessChannelBuilder; +import io.grpc.inprocess.InProcessServerBuilder; +import java.time.Duration; +import java.util.concurrent.*; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestName; + +/** Tests for {@link Subscriber}. */ +public class SubscriberTest { + + private static final ProjectSubscriptionName TEST_SUBSCRIPTION = + ProjectSubscriptionName.of("test-project", "test-subscription"); + + private ManagedChannel testChannel; + private FakeScheduledExecutorService fakeExecutor; + private FakeSubscriberServiceImpl fakeSubscriberServiceImpl; + private Server testServer; + private LinkedBlockingQueue consumersWithResponse; + private MessageReceiverWithAckResponse messageReceiverWithAckResponse; + + private final MessageReceiver testReceiver = + new MessageReceiver() { + @Override + public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) { + consumer.ack(); + } + }; + + @Rule public TestName testName = new TestName(); + + @Before + public void setUp() throws Exception { + consumersWithResponse = new LinkedBlockingQueue<>(); + InProcessServerBuilder serverBuilder = InProcessServerBuilder.forName(testName.getMethodName()); + fakeSubscriberServiceImpl = new FakeSubscriberServiceImpl(); + fakeExecutor = new FakeScheduledExecutorService(); + testChannel = InProcessChannelBuilder.forName(testName.getMethodName()).build(); + serverBuilder.addService(fakeSubscriberServiceImpl); + testServer = serverBuilder.build(); + testServer.start(); + + messageReceiverWithAckResponse = + new MessageReceiverWithAckResponse() { + @Override + public void receiveMessage( + final PubsubMessage message, + final AckReplyConsumerWithResponse consumerWithResponse) { + consumersWithResponse.add(consumerWithResponse); + } + }; + } + + @After + public void tearDown() throws Exception { + testServer.shutdownNow().awaitTermination(); + testChannel.shutdown(); + } + + @Test + public void testDeliveryAttemptHelper() { + Integer deliveryAttempt = 3; + PubsubMessage message = + PubsubMessage.newBuilder() + .putAttributes("googclient_deliveryattempt", Integer.toString(deliveryAttempt)) + .build(); + assertEquals(Subscriber.getDeliveryAttempt(message), deliveryAttempt); + + // In the case where delivery attempt attribute is not populated, expect null + PubsubMessage emptyMessage = PubsubMessage.newBuilder().build(); + assertEquals(Subscriber.getDeliveryAttempt(emptyMessage), null); + } + + @Test + public void testOpenedChannels() throws Exception { + int expectedChannelCount = 1; + + Subscriber subscriber = startSubscriber(getTestSubscriberBuilder(testReceiver)); + + assertEquals( + expectedChannelCount, fakeSubscriberServiceImpl.waitForOpenedStreams(expectedChannelCount)); + + subscriber.stopAsync().awaitTerminated(); + } + + @Test + public void testFailedChannel_recoverableError_channelReopened() throws Exception { + int expectedChannelCount = 1; + + Subscriber subscriber = + startSubscriber( + getTestSubscriberBuilder(testReceiver) + .setSystemExecutorProvider( + InstantiatingExecutorProvider.newBuilder().setExecutorThreadCount(1).build())); + + // Recoverable error + fakeSubscriberServiceImpl.sendError(new StatusException(Status.INTERNAL)); + + assertEquals(1, fakeSubscriberServiceImpl.waitForClosedStreams(1)); + assertEquals( + expectedChannelCount, fakeSubscriberServiceImpl.waitForOpenedStreams(expectedChannelCount)); + + subscriber.stopAsync().awaitTerminated(); + } + + @Test + public void testFailedChannel_testTerminated() throws Exception { + final ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5); + ExecutorProvider provider = + new ExecutorProvider() { + @Override + public boolean shouldAutoClose() { + return true; + } + + @Override + public ScheduledExecutorService getExecutor() { + return scheduledExecutorService; + } + }; + + try { + Subscriber subscriber = + startSubscriber( + getTestSubscriberBuilder(testReceiver).setSystemExecutorProvider(provider)); + + // wait long enough for the MessageDispatcher to set up, which at one point + // caused shutdown problems. + Thread.sleep(100); + subscriber.stopAsync().awaitTerminated(); + + assertTrue(scheduledExecutorService.awaitTermination(10, TimeUnit.SECONDS)); + } finally { + scheduledExecutorService.shutdownNow(); + } + } + + @Test(expected = IllegalStateException.class) + public void testFailedChannel_fatalError_subscriberFails() throws Exception { + Subscriber subscriber = + startSubscriber( + getTestSubscriberBuilder(testReceiver) + .setSystemExecutorProvider( + InstantiatingExecutorProvider.newBuilder().setExecutorThreadCount(10).build())); + + // Fatal error + fakeSubscriberServiceImpl.sendError(new StatusException(Status.INVALID_ARGUMENT)); + + try { + subscriber.awaitTerminated(); + } finally { + // The subscriber must finish with an state error because its FAILED status. + assertEquals(Subscriber.State.FAILED, subscriber.state()); + + Throwable t = subscriber.failureCause(); + assertTrue(t instanceof ApiException); + + ApiException ex = (ApiException) (t); + assertTrue(ex.getStatusCode() instanceof GrpcStatusCode); + + GrpcStatusCode grpcCode = (GrpcStatusCode) ex.getStatusCode(); + assertEquals(StatusCode.Code.INVALID_ARGUMENT, grpcCode.getCode()); + } + } + + @Test(expected = IllegalStateException.class) + public void testFailedChannel_shutdownBackgroundResources() throws Exception { + ExecutorProvider provider = + new ExecutorProvider() { + @Override + public boolean shouldAutoClose() { + return true; + } + + @Override + public ScheduledExecutorService getExecutor() { + return fakeExecutor; + } + }; + + Subscriber subscriber = + startSubscriber(getTestSubscriberBuilder(testReceiver).setExecutorProvider(provider)); + + // Fatal error + fakeSubscriberServiceImpl.sendError(new StatusException(Status.INVALID_ARGUMENT)); + + try { + subscriber.awaitTerminated(); + } finally { + // The subscriber must finish with an state error because its FAILED status. + assertEquals(Subscriber.State.FAILED, subscriber.state()); + + // Make sure that our executor is shut down after a failure + assertTrue(fakeExecutor.isShutdown()); + } + } + + @Test + public void testStreamAckDeadlineIsSetCorrectly() throws Exception { + int expectedChannelCount = 1; + // Deadline is smaller than the allowed streamAckDeadline. + int maxDurationPerAckExtension = 5; + + Subscriber subscriber = + startSubscriber( + getTestSubscriberBuilder(testReceiver) + .setMaxDurationPerAckExtensionDuration( + Duration.ofSeconds(maxDurationPerAckExtension))); + assertEquals( + expectedChannelCount, fakeSubscriberServiceImpl.waitForOpenedStreams(expectedChannelCount)); + assertEquals( + Math.toIntExact(Subscriber.MIN_STREAM_ACK_DEADLINE.getSeconds()), + fakeSubscriberServiceImpl.getLastSeenRequest().getStreamAckDeadlineSeconds()); + + subscriber.stopAsync().awaitTerminated(); + + // Deadline is higher than the allowed streamAckDeadline. + maxDurationPerAckExtension = 700; + subscriber = + startSubscriber( + getTestSubscriberBuilder(testReceiver) + .setMaxDurationPerAckExtensionDuration( + Duration.ofSeconds(maxDurationPerAckExtension))); + assertEquals( + expectedChannelCount, fakeSubscriberServiceImpl.waitForOpenedStreams(expectedChannelCount)); + assertEquals( + Math.toIntExact(Subscriber.MAX_STREAM_ACK_DEADLINE.getSeconds()), + fakeSubscriberServiceImpl.getLastSeenRequest().getStreamAckDeadlineSeconds()); + + subscriber.stopAsync().awaitTerminated(); + + // Deadline is within the allowed limits for streamAckDeadline. + maxDurationPerAckExtension = 100; + subscriber = + startSubscriber( + getTestSubscriberBuilder(testReceiver) + .setMaxDurationPerAckExtensionDuration( + Duration.ofSeconds(maxDurationPerAckExtension))); + assertEquals( + expectedChannelCount, fakeSubscriberServiceImpl.waitForOpenedStreams(expectedChannelCount)); + assertEquals( + maxDurationPerAckExtension, + fakeSubscriberServiceImpl.getLastSeenRequest().getStreamAckDeadlineSeconds()); + + subscriber.stopAsync().awaitTerminated(); + + // maxDurationPerAckExtension is unset. + subscriber = startSubscriber(getTestSubscriberBuilder(testReceiver)); + assertEquals( + expectedChannelCount, fakeSubscriberServiceImpl.waitForOpenedStreams(expectedChannelCount)); + assertEquals( + Math.toIntExact(Subscriber.STREAM_ACK_DEADLINE_DEFAULT.getSeconds()), + fakeSubscriberServiceImpl.getLastSeenRequest().getStreamAckDeadlineSeconds()); + + subscriber.stopAsync().awaitTerminated(); + } + + @Test + public void testPartialFlowControlSettings() throws Exception { + Subscriber subscriber = + getTestSubscriberBuilder(testReceiver) + .setFlowControlSettings( + Subscriber.Builder.DEFAULT_FLOW_CONTROL_SETTINGS.toBuilder() + .setMaxOutstandingElementCount(500L) + .build()) + .build(); + assertEquals((long) subscriber.getFlowControlSettings().getMaxOutstandingElementCount(), 500); + assertEquals( + subscriber.getFlowControlSettings().getMaxOutstandingRequestBytes(), + Subscriber.Builder.DEFAULT_FLOW_CONTROL_SETTINGS.getMaxOutstandingRequestBytes()); + + subscriber = + getTestSubscriberBuilder(testReceiver) + .setFlowControlSettings( + Subscriber.Builder.DEFAULT_FLOW_CONTROL_SETTINGS.toBuilder() + .setMaxOutstandingRequestBytes(5_000_000_000L) + .build()) + .build(); + assertEquals( + (long) subscriber.getFlowControlSettings().getMaxOutstandingRequestBytes(), 5_000_000_000L); + assertEquals( + subscriber.getFlowControlSettings().getMaxOutstandingElementCount(), + Subscriber.Builder.DEFAULT_FLOW_CONTROL_SETTINGS.getMaxOutstandingElementCount()); + } + + @Test + public void testShutdown_waitForProcessing_indefinite() throws Exception { + final CountDownLatch messageReceived = new CountDownLatch(1); + final AckReplyConsumer[] consumer = new AckReplyConsumer[1]; + + MessageReceiver receiver = + new MessageReceiver() { + @Override + public void receiveMessage(PubsubMessage message, AckReplyConsumer c) { + consumer[0] = c; + messageReceived.countDown(); + } + }; + + Subscriber subscriber = + startSubscriber( + getTestSubscriberBuilder(receiver) + .setSubscriberShutdownSettings( + SubscriberShutdownSettings.newBuilder() + .setMode(SubscriberShutdownSettings.ShutdownMode.WAIT_FOR_PROCESSING) + .setTimeout(Duration.ofSeconds(-1)) + .build())); + + // Send a message and wait for it to be received. + fakeSubscriberServiceImpl.sendMessages(1); + messageReceived.await(10, TimeUnit.SECONDS); + + subscriber.stopAsync(); + + try { + subscriber.awaitTerminated(1, TimeUnit.SECONDS); + fail("Subscriber should not have terminated yet."); + } catch (TimeoutException e) { + // Expected + } + + // Now, ack the message, which should allow the subscriber to terminate. + consumer[0].ack(); + subscriber.awaitTerminated(10, TimeUnit.SECONDS); + } + + @Test + public void testShutdown_waitForProcessing_withTimeout_success() throws Exception { + Subscriber subscriber = + startSubscriber( + getTestSubscriberBuilder(testReceiver) + .setSubscriberShutdownSettings( + SubscriberShutdownSettings.newBuilder() + .setMode(SubscriberShutdownSettings.ShutdownMode.WAIT_FOR_PROCESSING) + .setTimeout(Duration.ofSeconds(10)) + .build())); + subscriber.stopAsync(); + fakeExecutor.advanceTime(Duration.ofSeconds(5)); + subscriber.awaitTerminated(1, TimeUnit.SECONDS); // Should terminate quickly now + } + + @Test + public void testShutdown_waitForProcessing_withTimeout_failure() throws Exception { + Subscriber subscriber = + startSubscriber( + getTestSubscriberBuilder(testReceiver) + .setSubscriberShutdownSettings( + SubscriberShutdownSettings.newBuilder() + .setMode(SubscriberShutdownSettings.ShutdownMode.WAIT_FOR_PROCESSING) + .setTimeout(Duration.ofSeconds(5)) + .build())); + subscriber.stopAsync(); + fakeExecutor.advanceTime(Duration.ofSeconds(6)); + subscriber.awaitTerminated(1, TimeUnit.SECONDS); // Should have timed out and terminated + } + + @Test + public void testShutdown_waitForProcessing_zeroTimeout() throws Exception { + Subscriber subscriber = + startSubscriber( + getTestSubscriberBuilder(testReceiver) + .setSubscriberShutdownSettings( + SubscriberShutdownSettings.newBuilder() + .setMode(SubscriberShutdownSettings.ShutdownMode.WAIT_FOR_PROCESSING) + .setTimeout(Duration.ZERO) + .build())); + subscriber.stopAsync(); + subscriber.awaitTerminated(1, TimeUnit.SECONDS); // Should terminate almost immediately + } + + @Test + public void testShutdown_nackImmediately() throws Exception { + Subscriber subscriber = + startSubscriber( + getTestSubscriberBuilder(testReceiver) + .setSubscriberShutdownSettings( + SubscriberShutdownSettings.newBuilder() + .setMode(SubscriberShutdownSettings.ShutdownMode.NACK_IMMEDIATELY) + .build())); + subscriber.stopAsync(); + subscriber.awaitTerminated(1, TimeUnit.SECONDS); // Should terminate almost immediately + } + + private Subscriber startSubscriber(Builder testSubscriberBuilder) { + Subscriber subscriber = testSubscriberBuilder.build(); + subscriber.startAsync().awaitRunning(); + return subscriber; + } + + private Builder getTestSubscriberBuilder(MessageReceiver messageReceiver) { + return Subscriber.newBuilder(TEST_SUBSCRIPTION, messageReceiver) + .setExecutorProvider(FixedExecutorProvider.create(fakeExecutor)) + .setSystemExecutorProvider(FixedExecutorProvider.create(fakeExecutor)) + .setChannelProvider( + FixedTransportChannelProvider.create(GrpcTransportChannel.create(testChannel))) + .setCredentialsProvider(NoCredentialsProvider.create()) + .setClock(fakeExecutor.getClock()) + .setParallelPullCount(1) + .setFlowControlSettings( + FlowControlSettings.newBuilder().setMaxOutstandingElementCount(1000L).build()); + } + + private Builder getTestSubscriberBuilder( + MessageReceiverWithAckResponse messageReceiverWithAckResponse) { + return Subscriber.newBuilder(TEST_SUBSCRIPTION, messageReceiverWithAckResponse) + .setExecutorProvider(FixedExecutorProvider.create(fakeExecutor)) + .setSystemExecutorProvider(FixedExecutorProvider.create(fakeExecutor)) + .setChannelProvider( + FixedTransportChannelProvider.create(GrpcTransportChannel.create(testChannel))) + .setCredentialsProvider(NoCredentialsProvider.create()) + .setClock(fakeExecutor.getClock()) + .setParallelPullCount(1) + .setFlowControlSettings( + FlowControlSettings.newBuilder().setMaxOutstandingElementCount(1000L).build()); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriptionAdminClientHttpJsonTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriptionAdminClientHttpJsonTest.java new file mode 100644 index 000000000000..8ec2cdfab25d --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriptionAdminClientHttpJsonTest.java @@ -0,0 +1,2009 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSubscriptionsPagedResponse; + +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.httpjson.GaxHttpJsonProperties; +import com.google.api.gax.httpjson.testing.MockHttpService; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ApiException; +import com.google.api.gax.rpc.ApiExceptionFactory; +import com.google.api.gax.rpc.InvalidArgumentException; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.rpc.testing.FakeStatusCode; +import com.google.cloud.pubsub.v1.stub.HttpJsonSubscriberStub; +import com.google.common.collect.Lists; +import com.google.iam.v1.AuditConfig; +import com.google.iam.v1.Binding; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.GetPolicyOptions; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.ByteString; +import com.google.protobuf.Duration; +import com.google.protobuf.Empty; +import com.google.protobuf.FieldMask; +import com.google.protobuf.Timestamp; +import com.google.pubsub.v1.BigQueryConfig; +import com.google.pubsub.v1.BigtableConfig; +import com.google.pubsub.v1.CloudStorageConfig; +import com.google.pubsub.v1.DeadLetterPolicy; +import com.google.pubsub.v1.ExpirationPolicy; +import com.google.pubsub.v1.ListSnapshotsResponse; +import com.google.pubsub.v1.ListSubscriptionsResponse; +import com.google.pubsub.v1.MessageTransform; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.PullResponse; +import com.google.pubsub.v1.PushConfig; +import com.google.pubsub.v1.ReceivedMessage; +import com.google.pubsub.v1.RetryPolicy; +import com.google.pubsub.v1.SchemaName; +import com.google.pubsub.v1.SeekRequest; +import com.google.pubsub.v1.SeekResponse; +import com.google.pubsub.v1.Snapshot; +import com.google.pubsub.v1.SnapshotName; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import javax.annotation.Generated; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +@Generated("by gapic-generator-java") +public class SubscriptionAdminClientHttpJsonTest { + private static MockHttpService mockService; + private static SubscriptionAdminClient client; + + @BeforeClass + public static void startStaticServer() throws IOException { + mockService = + new MockHttpService( + HttpJsonSubscriberStub.getMethodDescriptors(), + SubscriptionAdminSettings.getDefaultEndpoint()); + SubscriptionAdminSettings settings = + SubscriptionAdminSettings.newHttpJsonBuilder() + .setTransportChannelProvider( + SubscriptionAdminSettings.defaultHttpJsonTransportProviderBuilder() + .setHttpTransport(mockService) + .build()) + .setCredentialsProvider(NoCredentialsProvider.create()) + .build(); + client = SubscriptionAdminClient.create(settings); + } + + @AfterClass + public static void stopServer() { + client.close(); + } + + @Before + public void setUp() {} + + @After + public void tearDown() throws Exception { + mockService.reset(); + } + + @Test + public void createSubscriptionTest() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + + Subscription actualResponse = + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createSubscriptionExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSubscriptionTest2() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + String topic = "topic110546223"; + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + + Subscription actualResponse = + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createSubscriptionExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + String topic = "topic110546223"; + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSubscriptionTest3() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + String name = "projects/project-7298/subscriptions/subscription-7298"; + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + + Subscription actualResponse = + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createSubscriptionExceptionTest3() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String name = "projects/project-7298/subscriptions/subscription-7298"; + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSubscriptionTest4() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + String name = "projects/project-7298/subscriptions/subscription-7298"; + String topic = "topic110546223"; + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + + Subscription actualResponse = + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createSubscriptionExceptionTest4() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String name = "projects/project-7298/subscriptions/subscription-7298"; + String topic = "topic110546223"; + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getSubscriptionTest() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + + Subscription actualResponse = client.getSubscription(subscription); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void getSubscriptionExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + client.getSubscription(subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getSubscriptionTest2() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + + Subscription actualResponse = client.getSubscription(subscription); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void getSubscriptionExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + client.getSubscription(subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void updateSubscriptionTest() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + Subscription subscription = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + + Subscription actualResponse = client.updateSubscription(subscription, updateMask); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void updateSubscriptionExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + Subscription subscription = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + client.updateSubscription(subscription, updateMask); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSubscriptionsTest() throws Exception { + Subscription responsesElement = Subscription.newBuilder().build(); + ListSubscriptionsResponse expectedResponse = + ListSubscriptionsResponse.newBuilder() + .setNextPageToken("") + .addAllSubscriptions(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + ProjectName project = ProjectName.of("[PROJECT]"); + + ListSubscriptionsPagedResponse pagedListResponse = client.listSubscriptions(project); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSubscriptionsList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listSubscriptionsExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + ProjectName project = ProjectName.of("[PROJECT]"); + client.listSubscriptions(project); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSubscriptionsTest2() throws Exception { + Subscription responsesElement = Subscription.newBuilder().build(); + ListSubscriptionsResponse expectedResponse = + ListSubscriptionsResponse.newBuilder() + .setNextPageToken("") + .addAllSubscriptions(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + String project = "projects/project-7934"; + + ListSubscriptionsPagedResponse pagedListResponse = client.listSubscriptions(project); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSubscriptionsList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listSubscriptionsExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String project = "projects/project-7934"; + client.listSubscriptions(project); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSubscriptionTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + + client.deleteSubscription(subscription); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void deleteSubscriptionExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + client.deleteSubscription(subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSubscriptionTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + + client.deleteSubscription(subscription); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void deleteSubscriptionExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + client.deleteSubscription(subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void modifyAckDeadlineTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + List ackIds = new ArrayList<>(); + int ackDeadlineSeconds = 2135351438; + + client.modifyAckDeadline(subscription, ackIds, ackDeadlineSeconds); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void modifyAckDeadlineExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + List ackIds = new ArrayList<>(); + int ackDeadlineSeconds = 2135351438; + client.modifyAckDeadline(subscription, ackIds, ackDeadlineSeconds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void modifyAckDeadlineTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + List ackIds = new ArrayList<>(); + int ackDeadlineSeconds = 2135351438; + + client.modifyAckDeadline(subscription, ackIds, ackDeadlineSeconds); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void modifyAckDeadlineExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + List ackIds = new ArrayList<>(); + int ackDeadlineSeconds = 2135351438; + client.modifyAckDeadline(subscription, ackIds, ackDeadlineSeconds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void acknowledgeTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + List ackIds = new ArrayList<>(); + + client.acknowledge(subscription, ackIds); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void acknowledgeExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + List ackIds = new ArrayList<>(); + client.acknowledge(subscription, ackIds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void acknowledgeTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + List ackIds = new ArrayList<>(); + + client.acknowledge(subscription, ackIds); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void acknowledgeExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + List ackIds = new ArrayList<>(); + client.acknowledge(subscription, ackIds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void pullTest() throws Exception { + PullResponse expectedResponse = + PullResponse.newBuilder().addAllReceivedMessages(new ArrayList()).build(); + mockService.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + int maxMessages = 496131527; + + PullResponse actualResponse = client.pull(subscription, maxMessages); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void pullExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + int maxMessages = 496131527; + client.pull(subscription, maxMessages); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void pullTest2() throws Exception { + PullResponse expectedResponse = + PullResponse.newBuilder().addAllReceivedMessages(new ArrayList()).build(); + mockService.addResponse(expectedResponse); + + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + int maxMessages = 496131527; + + PullResponse actualResponse = client.pull(subscription, maxMessages); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void pullExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + int maxMessages = 496131527; + client.pull(subscription, maxMessages); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void pullTest3() throws Exception { + PullResponse expectedResponse = + PullResponse.newBuilder().addAllReceivedMessages(new ArrayList()).build(); + mockService.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + boolean returnImmediately = true; + int maxMessages = 496131527; + + PullResponse actualResponse = client.pull(subscription, returnImmediately, maxMessages); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void pullExceptionTest3() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + boolean returnImmediately = true; + int maxMessages = 496131527; + client.pull(subscription, returnImmediately, maxMessages); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void pullTest4() throws Exception { + PullResponse expectedResponse = + PullResponse.newBuilder().addAllReceivedMessages(new ArrayList()).build(); + mockService.addResponse(expectedResponse); + + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + boolean returnImmediately = true; + int maxMessages = 496131527; + + PullResponse actualResponse = client.pull(subscription, returnImmediately, maxMessages); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void pullExceptionTest4() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + boolean returnImmediately = true; + int maxMessages = 496131527; + client.pull(subscription, returnImmediately, maxMessages); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void streamingPullUnsupportedMethodTest() throws Exception { + // The streamingPull() method is not supported in REST transport. + // This empty test is generated for technical reasons. + } + + @Test + public void modifyPushConfigTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + PushConfig pushConfig = PushConfig.newBuilder().build(); + + client.modifyPushConfig(subscription, pushConfig); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void modifyPushConfigExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + PushConfig pushConfig = PushConfig.newBuilder().build(); + client.modifyPushConfig(subscription, pushConfig); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void modifyPushConfigTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + PushConfig pushConfig = PushConfig.newBuilder().build(); + + client.modifyPushConfig(subscription, pushConfig); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void modifyPushConfigExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String subscription = "projects/project-1980/subscriptions/subscription-1980"; + PushConfig pushConfig = PushConfig.newBuilder().build(); + client.modifyPushConfig(subscription, pushConfig); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getSnapshotTest() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + SnapshotName snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + + Snapshot actualResponse = client.getSnapshot(snapshot); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void getSnapshotExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SnapshotName snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + client.getSnapshot(snapshot); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getSnapshotTest2() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + String snapshot = "projects/project-2020/snapshots/snapshot-2020"; + + Snapshot actualResponse = client.getSnapshot(snapshot); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void getSnapshotExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String snapshot = "projects/project-2020/snapshots/snapshot-2020"; + client.getSnapshot(snapshot); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSnapshotsTest() throws Exception { + Snapshot responsesElement = Snapshot.newBuilder().build(); + ListSnapshotsResponse expectedResponse = + ListSnapshotsResponse.newBuilder() + .setNextPageToken("") + .addAllSnapshots(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + ProjectName project = ProjectName.of("[PROJECT]"); + + ListSnapshotsPagedResponse pagedListResponse = client.listSnapshots(project); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSnapshotsList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listSnapshotsExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + ProjectName project = ProjectName.of("[PROJECT]"); + client.listSnapshots(project); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSnapshotsTest2() throws Exception { + Snapshot responsesElement = Snapshot.newBuilder().build(); + ListSnapshotsResponse expectedResponse = + ListSnapshotsResponse.newBuilder() + .setNextPageToken("") + .addAllSnapshots(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + String project = "projects/project-7934"; + + ListSnapshotsPagedResponse pagedListResponse = client.listSnapshots(project); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSnapshotsList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listSnapshotsExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String project = "projects/project-7934"; + client.listSnapshots(project); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSnapshotTest() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + SnapshotName name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + + Snapshot actualResponse = client.createSnapshot(name, subscription); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createSnapshotExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SnapshotName name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + client.createSnapshot(name, subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSnapshotTest2() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + SnapshotName name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + String subscription = "subscription341203229"; + + Snapshot actualResponse = client.createSnapshot(name, subscription); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createSnapshotExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SnapshotName name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + String subscription = "subscription341203229"; + client.createSnapshot(name, subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSnapshotTest3() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + String name = "projects/project-4389/snapshots/snapshot-4389"; + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + + Snapshot actualResponse = client.createSnapshot(name, subscription); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createSnapshotExceptionTest3() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String name = "projects/project-4389/snapshots/snapshot-4389"; + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + client.createSnapshot(name, subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSnapshotTest4() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + String name = "projects/project-4389/snapshots/snapshot-4389"; + String subscription = "subscription341203229"; + + Snapshot actualResponse = client.createSnapshot(name, subscription); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createSnapshotExceptionTest4() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String name = "projects/project-4389/snapshots/snapshot-4389"; + String subscription = "subscription341203229"; + client.createSnapshot(name, subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void updateSnapshotTest() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + Snapshot snapshot = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + + Snapshot actualResponse = client.updateSnapshot(snapshot, updateMask); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void updateSnapshotExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + Snapshot snapshot = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + client.updateSnapshot(snapshot, updateMask); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSnapshotTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + SnapshotName snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + + client.deleteSnapshot(snapshot); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void deleteSnapshotExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SnapshotName snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + client.deleteSnapshot(snapshot); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSnapshotTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + String snapshot = "projects/project-2020/snapshots/snapshot-2020"; + + client.deleteSnapshot(snapshot); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void deleteSnapshotExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String snapshot = "projects/project-2020/snapshots/snapshot-2020"; + client.deleteSnapshot(snapshot); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void seekTest() throws Exception { + SeekResponse expectedResponse = SeekResponse.newBuilder().build(); + mockService.addResponse(expectedResponse); + + SeekRequest request = + SeekRequest.newBuilder() + .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .build(); + + SeekResponse actualResponse = client.seek(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void seekExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SeekRequest request = + SeekRequest.newBuilder() + .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .build(); + client.seek(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void setIamPolicyTest() throws Exception { + Policy expectedResponse = + Policy.newBuilder() + .setVersion(351608024) + .addAllBindings(new ArrayList()) + .addAllAuditConfigs(new ArrayList()) + .setEtag(ByteString.EMPTY) + .build(); + mockService.addResponse(expectedResponse); + + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setPolicy(Policy.newBuilder().build()) + .setUpdateMask(FieldMask.newBuilder().build()) + .build(); + + Policy actualResponse = client.setIamPolicy(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void setIamPolicyExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setPolicy(Policy.newBuilder().build()) + .setUpdateMask(FieldMask.newBuilder().build()) + .build(); + client.setIamPolicy(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getIamPolicyTest() throws Exception { + Policy expectedResponse = + Policy.newBuilder() + .setVersion(351608024) + .addAllBindings(new ArrayList()) + .addAllAuditConfigs(new ArrayList()) + .setEtag(ByteString.EMPTY) + .build(); + mockService.addResponse(expectedResponse); + + GetIamPolicyRequest request = + GetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setOptions(GetPolicyOptions.newBuilder().build()) + .build(); + + Policy actualResponse = client.getIamPolicy(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void getIamPolicyExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + GetIamPolicyRequest request = + GetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setOptions(GetPolicyOptions.newBuilder().build()) + .build(); + client.getIamPolicy(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void testIamPermissionsTest() throws Exception { + TestIamPermissionsResponse expectedResponse = + TestIamPermissionsResponse.newBuilder().addAllPermissions(new ArrayList()).build(); + mockService.addResponse(expectedResponse); + + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .addAllPermissions(new ArrayList()) + .build(); + + TestIamPermissionsResponse actualResponse = client.testIamPermissions(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void testIamPermissionsExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .addAllPermissions(new ArrayList()) + .build(); + client.testIamPermissions(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriptionAdminClientTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriptionAdminClientTest.java new file mode 100644 index 000000000000..7df554b6d30d --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/SubscriptionAdminClientTest.java @@ -0,0 +1,1868 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.SubscriptionAdminClient.ListSubscriptionsPagedResponse; + +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.grpc.GaxGrpcProperties; +import com.google.api.gax.grpc.testing.LocalChannelProvider; +import com.google.api.gax.grpc.testing.MockGrpcService; +import com.google.api.gax.grpc.testing.MockServiceHelper; +import com.google.api.gax.grpc.testing.MockStreamObserver; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ApiStreamObserver; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.InvalidArgumentException; +import com.google.api.gax.rpc.StatusCode; +import com.google.common.collect.Lists; +import com.google.iam.v1.AuditConfig; +import com.google.iam.v1.Binding; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.GetPolicyOptions; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.AbstractMessage; +import com.google.protobuf.ByteString; +import com.google.protobuf.Duration; +import com.google.protobuf.Empty; +import com.google.protobuf.FieldMask; +import com.google.protobuf.Timestamp; +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.BigQueryConfig; +import com.google.pubsub.v1.BigtableConfig; +import com.google.pubsub.v1.CloudStorageConfig; +import com.google.pubsub.v1.CreateSnapshotRequest; +import com.google.pubsub.v1.DeadLetterPolicy; +import com.google.pubsub.v1.DeleteSnapshotRequest; +import com.google.pubsub.v1.DeleteSubscriptionRequest; +import com.google.pubsub.v1.ExpirationPolicy; +import com.google.pubsub.v1.GetSnapshotRequest; +import com.google.pubsub.v1.GetSubscriptionRequest; +import com.google.pubsub.v1.ListSnapshotsRequest; +import com.google.pubsub.v1.ListSnapshotsResponse; +import com.google.pubsub.v1.ListSubscriptionsRequest; +import com.google.pubsub.v1.ListSubscriptionsResponse; +import com.google.pubsub.v1.MessageTransform; +import com.google.pubsub.v1.ModifyAckDeadlineRequest; +import com.google.pubsub.v1.ModifyPushConfigRequest; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.PullRequest; +import com.google.pubsub.v1.PullResponse; +import com.google.pubsub.v1.PushConfig; +import com.google.pubsub.v1.ReceivedMessage; +import com.google.pubsub.v1.RetryPolicy; +import com.google.pubsub.v1.SchemaName; +import com.google.pubsub.v1.SeekRequest; +import com.google.pubsub.v1.SeekResponse; +import com.google.pubsub.v1.Snapshot; +import com.google.pubsub.v1.SnapshotName; +import com.google.pubsub.v1.StreamingPullRequest; +import com.google.pubsub.v1.StreamingPullResponse; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.TopicName; +import com.google.pubsub.v1.UpdateSnapshotRequest; +import com.google.pubsub.v1.UpdateSubscriptionRequest; +import io.grpc.StatusRuntimeException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.ExecutionException; +import javax.annotation.Generated; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +@Generated("by gapic-generator-java") +public class SubscriptionAdminClientTest { + private static MockIAMPolicy mockIAMPolicy; + private static MockServiceHelper mockServiceHelper; + private static MockSubscriber mockSubscriber; + private LocalChannelProvider channelProvider; + private SubscriptionAdminClient client; + + @BeforeClass + public static void startStaticServer() { + mockSubscriber = new MockSubscriber(); + mockIAMPolicy = new MockIAMPolicy(); + mockServiceHelper = + new MockServiceHelper( + UUID.randomUUID().toString(), + Arrays.asList(mockSubscriber, mockIAMPolicy)); + mockServiceHelper.start(); + } + + @AfterClass + public static void stopServer() { + mockServiceHelper.stop(); + } + + @Before + public void setUp() throws IOException { + mockServiceHelper.reset(); + channelProvider = mockServiceHelper.createChannelProvider(); + SubscriptionAdminSettings settings = + SubscriptionAdminSettings.newBuilder() + .setTransportChannelProvider(channelProvider) + .setCredentialsProvider(NoCredentialsProvider.create()) + .build(); + client = SubscriptionAdminClient.create(settings); + } + + @After + public void tearDown() throws Exception { + client.close(); + } + + @Test + public void createSubscriptionTest() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + + Subscription actualResponse = + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + Subscription actualRequest = ((Subscription) actualRequests.get(0)); + + Assert.assertEquals(name.toString(), actualRequest.getName()); + Assert.assertEquals(topic.toString(), actualRequest.getTopic()); + Assert.assertEquals(pushConfig, actualRequest.getPushConfig()); + Assert.assertEquals(ackDeadlineSeconds, actualRequest.getAckDeadlineSeconds()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createSubscriptionExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSubscriptionTest2() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + String topic = "topic110546223"; + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + + Subscription actualResponse = + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + Subscription actualRequest = ((Subscription) actualRequests.get(0)); + + Assert.assertEquals(name.toString(), actualRequest.getName()); + Assert.assertEquals(topic, actualRequest.getTopic()); + Assert.assertEquals(pushConfig, actualRequest.getPushConfig()); + Assert.assertEquals(ackDeadlineSeconds, actualRequest.getAckDeadlineSeconds()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createSubscriptionExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + String topic = "topic110546223"; + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSubscriptionTest3() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + String name = "name3373707"; + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + + Subscription actualResponse = + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + Subscription actualRequest = ((Subscription) actualRequests.get(0)); + + Assert.assertEquals(name, actualRequest.getName()); + Assert.assertEquals(topic.toString(), actualRequest.getTopic()); + Assert.assertEquals(pushConfig, actualRequest.getPushConfig()); + Assert.assertEquals(ackDeadlineSeconds, actualRequest.getAckDeadlineSeconds()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createSubscriptionExceptionTest3() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String name = "name3373707"; + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSubscriptionTest4() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + String name = "name3373707"; + String topic = "topic110546223"; + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + + Subscription actualResponse = + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + Subscription actualRequest = ((Subscription) actualRequests.get(0)); + + Assert.assertEquals(name, actualRequest.getName()); + Assert.assertEquals(topic, actualRequest.getTopic()); + Assert.assertEquals(pushConfig, actualRequest.getPushConfig()); + Assert.assertEquals(ackDeadlineSeconds, actualRequest.getAckDeadlineSeconds()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createSubscriptionExceptionTest4() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String name = "name3373707"; + String topic = "topic110546223"; + PushConfig pushConfig = PushConfig.newBuilder().build(); + int ackDeadlineSeconds = 2135351438; + client.createSubscription(name, topic, pushConfig, ackDeadlineSeconds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getSubscriptionTest() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + + Subscription actualResponse = client.getSubscription(subscription); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + GetSubscriptionRequest actualRequest = ((GetSubscriptionRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription.toString(), actualRequest.getSubscription()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void getSubscriptionExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + client.getSubscription(subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getSubscriptionTest2() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + String subscription = "subscription341203229"; + + Subscription actualResponse = client.getSubscription(subscription); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + GetSubscriptionRequest actualRequest = ((GetSubscriptionRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription, actualRequest.getSubscription()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void getSubscriptionExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String subscription = "subscription341203229"; + client.getSubscription(subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void updateSubscriptionTest() throws Exception { + Subscription expectedResponse = + Subscription.newBuilder() + .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setPushConfig(PushConfig.newBuilder().build()) + .setBigqueryConfig(BigQueryConfig.newBuilder().build()) + .setCloudStorageConfig(CloudStorageConfig.newBuilder().build()) + .setBigtableConfig(BigtableConfig.newBuilder().build()) + .setAckDeadlineSeconds(2135351438) + .setRetainAckedMessages(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .putAllLabels(new HashMap()) + .setEnableMessageOrdering(true) + .setExpirationPolicy(ExpirationPolicy.newBuilder().build()) + .setFilter("filter-1274492040") + .setDeadLetterPolicy(DeadLetterPolicy.newBuilder().build()) + .setRetryPolicy(RetryPolicy.newBuilder().build()) + .setDetached(true) + .setEnableExactlyOnceDelivery(true) + .setTopicMessageRetentionDuration(Duration.newBuilder().build()) + .setAnalyticsHubSubscriptionInfo( + Subscription.AnalyticsHubSubscriptionInfo.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + Subscription subscription = Subscription.newBuilder().build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + + Subscription actualResponse = client.updateSubscription(subscription, updateMask); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + UpdateSubscriptionRequest actualRequest = ((UpdateSubscriptionRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription, actualRequest.getSubscription()); + Assert.assertEquals(updateMask, actualRequest.getUpdateMask()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void updateSubscriptionExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + Subscription subscription = Subscription.newBuilder().build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + client.updateSubscription(subscription, updateMask); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSubscriptionsTest() throws Exception { + Subscription responsesElement = Subscription.newBuilder().build(); + ListSubscriptionsResponse expectedResponse = + ListSubscriptionsResponse.newBuilder() + .setNextPageToken("") + .addAllSubscriptions(Arrays.asList(responsesElement)) + .build(); + mockSubscriber.addResponse(expectedResponse); + + ProjectName project = ProjectName.of("[PROJECT]"); + + ListSubscriptionsPagedResponse pagedListResponse = client.listSubscriptions(project); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSubscriptionsList().get(0), resources.get(0)); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListSubscriptionsRequest actualRequest = ((ListSubscriptionsRequest) actualRequests.get(0)); + + Assert.assertEquals(project.toString(), actualRequest.getProject()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listSubscriptionsExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + ProjectName project = ProjectName.of("[PROJECT]"); + client.listSubscriptions(project); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSubscriptionsTest2() throws Exception { + Subscription responsesElement = Subscription.newBuilder().build(); + ListSubscriptionsResponse expectedResponse = + ListSubscriptionsResponse.newBuilder() + .setNextPageToken("") + .addAllSubscriptions(Arrays.asList(responsesElement)) + .build(); + mockSubscriber.addResponse(expectedResponse); + + String project = "project-309310695"; + + ListSubscriptionsPagedResponse pagedListResponse = client.listSubscriptions(project); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSubscriptionsList().get(0), resources.get(0)); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListSubscriptionsRequest actualRequest = ((ListSubscriptionsRequest) actualRequests.get(0)); + + Assert.assertEquals(project, actualRequest.getProject()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listSubscriptionsExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String project = "project-309310695"; + client.listSubscriptions(project); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSubscriptionTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockSubscriber.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + + client.deleteSubscription(subscription); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + DeleteSubscriptionRequest actualRequest = ((DeleteSubscriptionRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription.toString(), actualRequest.getSubscription()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void deleteSubscriptionExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + client.deleteSubscription(subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSubscriptionTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockSubscriber.addResponse(expectedResponse); + + String subscription = "subscription341203229"; + + client.deleteSubscription(subscription); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + DeleteSubscriptionRequest actualRequest = ((DeleteSubscriptionRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription, actualRequest.getSubscription()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void deleteSubscriptionExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String subscription = "subscription341203229"; + client.deleteSubscription(subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void modifyAckDeadlineTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockSubscriber.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + List ackIds = new ArrayList<>(); + int ackDeadlineSeconds = 2135351438; + + client.modifyAckDeadline(subscription, ackIds, ackDeadlineSeconds); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ModifyAckDeadlineRequest actualRequest = ((ModifyAckDeadlineRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription.toString(), actualRequest.getSubscription()); + Assert.assertEquals(ackIds, actualRequest.getAckIdsList()); + Assert.assertEquals(ackDeadlineSeconds, actualRequest.getAckDeadlineSeconds()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void modifyAckDeadlineExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + List ackIds = new ArrayList<>(); + int ackDeadlineSeconds = 2135351438; + client.modifyAckDeadline(subscription, ackIds, ackDeadlineSeconds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void modifyAckDeadlineTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockSubscriber.addResponse(expectedResponse); + + String subscription = "subscription341203229"; + List ackIds = new ArrayList<>(); + int ackDeadlineSeconds = 2135351438; + + client.modifyAckDeadline(subscription, ackIds, ackDeadlineSeconds); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ModifyAckDeadlineRequest actualRequest = ((ModifyAckDeadlineRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription, actualRequest.getSubscription()); + Assert.assertEquals(ackIds, actualRequest.getAckIdsList()); + Assert.assertEquals(ackDeadlineSeconds, actualRequest.getAckDeadlineSeconds()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void modifyAckDeadlineExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String subscription = "subscription341203229"; + List ackIds = new ArrayList<>(); + int ackDeadlineSeconds = 2135351438; + client.modifyAckDeadline(subscription, ackIds, ackDeadlineSeconds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void acknowledgeTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockSubscriber.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + List ackIds = new ArrayList<>(); + + client.acknowledge(subscription, ackIds); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + AcknowledgeRequest actualRequest = ((AcknowledgeRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription.toString(), actualRequest.getSubscription()); + Assert.assertEquals(ackIds, actualRequest.getAckIdsList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void acknowledgeExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + List ackIds = new ArrayList<>(); + client.acknowledge(subscription, ackIds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void acknowledgeTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockSubscriber.addResponse(expectedResponse); + + String subscription = "subscription341203229"; + List ackIds = new ArrayList<>(); + + client.acknowledge(subscription, ackIds); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + AcknowledgeRequest actualRequest = ((AcknowledgeRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription, actualRequest.getSubscription()); + Assert.assertEquals(ackIds, actualRequest.getAckIdsList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void acknowledgeExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String subscription = "subscription341203229"; + List ackIds = new ArrayList<>(); + client.acknowledge(subscription, ackIds); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void pullTest() throws Exception { + PullResponse expectedResponse = + PullResponse.newBuilder().addAllReceivedMessages(new ArrayList()).build(); + mockSubscriber.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + int maxMessages = 496131527; + + PullResponse actualResponse = client.pull(subscription, maxMessages); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + PullRequest actualRequest = ((PullRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription.toString(), actualRequest.getSubscription()); + Assert.assertEquals(maxMessages, actualRequest.getMaxMessages()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void pullExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + int maxMessages = 496131527; + client.pull(subscription, maxMessages); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void pullTest2() throws Exception { + PullResponse expectedResponse = + PullResponse.newBuilder().addAllReceivedMessages(new ArrayList()).build(); + mockSubscriber.addResponse(expectedResponse); + + String subscription = "subscription341203229"; + int maxMessages = 496131527; + + PullResponse actualResponse = client.pull(subscription, maxMessages); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + PullRequest actualRequest = ((PullRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription, actualRequest.getSubscription()); + Assert.assertEquals(maxMessages, actualRequest.getMaxMessages()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void pullExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String subscription = "subscription341203229"; + int maxMessages = 496131527; + client.pull(subscription, maxMessages); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void pullTest3() throws Exception { + PullResponse expectedResponse = + PullResponse.newBuilder().addAllReceivedMessages(new ArrayList()).build(); + mockSubscriber.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + boolean returnImmediately = true; + int maxMessages = 496131527; + + PullResponse actualResponse = client.pull(subscription, returnImmediately, maxMessages); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + PullRequest actualRequest = ((PullRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription.toString(), actualRequest.getSubscription()); + Assert.assertEquals(returnImmediately, actualRequest.getReturnImmediately()); + Assert.assertEquals(maxMessages, actualRequest.getMaxMessages()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void pullExceptionTest3() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + boolean returnImmediately = true; + int maxMessages = 496131527; + client.pull(subscription, returnImmediately, maxMessages); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void pullTest4() throws Exception { + PullResponse expectedResponse = + PullResponse.newBuilder().addAllReceivedMessages(new ArrayList()).build(); + mockSubscriber.addResponse(expectedResponse); + + String subscription = "subscription341203229"; + boolean returnImmediately = true; + int maxMessages = 496131527; + + PullResponse actualResponse = client.pull(subscription, returnImmediately, maxMessages); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + PullRequest actualRequest = ((PullRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription, actualRequest.getSubscription()); + Assert.assertEquals(returnImmediately, actualRequest.getReturnImmediately()); + Assert.assertEquals(maxMessages, actualRequest.getMaxMessages()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void pullExceptionTest4() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String subscription = "subscription341203229"; + boolean returnImmediately = true; + int maxMessages = 496131527; + client.pull(subscription, returnImmediately, maxMessages); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void streamingPullTest() throws Exception { + StreamingPullResponse expectedResponse = + StreamingPullResponse.newBuilder() + .addAllReceivedMessages(new ArrayList()) + .setAcknowledgeConfirmation( + StreamingPullResponse.AcknowledgeConfirmation.newBuilder().build()) + .setModifyAckDeadlineConfirmation( + StreamingPullResponse.ModifyAckDeadlineConfirmation.newBuilder().build()) + .setSubscriptionProperties( + StreamingPullResponse.SubscriptionProperties.newBuilder().build()) + .build(); + mockSubscriber.addResponse(expectedResponse); + StreamingPullRequest request = + StreamingPullRequest.newBuilder() + .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .addAllAckIds(new ArrayList()) + .addAllModifyDeadlineSeconds(new ArrayList()) + .addAllModifyDeadlineAckIds(new ArrayList()) + .setStreamAckDeadlineSeconds(1875467245) + .setClientId("clientId908408390") + .setMaxOutstandingMessages(-1315266996) + .setMaxOutstandingBytes(-2103098517) + .setProtocolVersion(-1161610703) + .build(); + + MockStreamObserver responseObserver = new MockStreamObserver<>(); + + BidiStreamingCallable callable = + client.streamingPullCallable(); + ApiStreamObserver requestObserver = + callable.bidiStreamingCall(responseObserver); + + requestObserver.onNext(request); + requestObserver.onCompleted(); + + List actualResponses = responseObserver.future().get(); + Assert.assertEquals(1, actualResponses.size()); + Assert.assertEquals(expectedResponse, actualResponses.get(0)); + } + + @Test + public void streamingPullExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + StreamingPullRequest request = + StreamingPullRequest.newBuilder() + .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .addAllAckIds(new ArrayList()) + .addAllModifyDeadlineSeconds(new ArrayList()) + .addAllModifyDeadlineAckIds(new ArrayList()) + .setStreamAckDeadlineSeconds(1875467245) + .setClientId("clientId908408390") + .setMaxOutstandingMessages(-1315266996) + .setMaxOutstandingBytes(-2103098517) + .setProtocolVersion(-1161610703) + .build(); + + MockStreamObserver responseObserver = new MockStreamObserver<>(); + + BidiStreamingCallable callable = + client.streamingPullCallable(); + ApiStreamObserver requestObserver = + callable.bidiStreamingCall(responseObserver); + + requestObserver.onNext(request); + + try { + List actualResponses = responseObserver.future().get(); + Assert.fail("No exception thrown"); + } catch (ExecutionException e) { + Assert.assertTrue(e.getCause() instanceof InvalidArgumentException); + InvalidArgumentException apiException = ((InvalidArgumentException) e.getCause()); + Assert.assertEquals(StatusCode.Code.INVALID_ARGUMENT, apiException.getStatusCode().getCode()); + } + } + + @Test + public void modifyPushConfigTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockSubscriber.addResponse(expectedResponse); + + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + PushConfig pushConfig = PushConfig.newBuilder().build(); + + client.modifyPushConfig(subscription, pushConfig); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ModifyPushConfigRequest actualRequest = ((ModifyPushConfigRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription.toString(), actualRequest.getSubscription()); + Assert.assertEquals(pushConfig, actualRequest.getPushConfig()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void modifyPushConfigExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + PushConfig pushConfig = PushConfig.newBuilder().build(); + client.modifyPushConfig(subscription, pushConfig); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void modifyPushConfigTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockSubscriber.addResponse(expectedResponse); + + String subscription = "subscription341203229"; + PushConfig pushConfig = PushConfig.newBuilder().build(); + + client.modifyPushConfig(subscription, pushConfig); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ModifyPushConfigRequest actualRequest = ((ModifyPushConfigRequest) actualRequests.get(0)); + + Assert.assertEquals(subscription, actualRequest.getSubscription()); + Assert.assertEquals(pushConfig, actualRequest.getPushConfig()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void modifyPushConfigExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String subscription = "subscription341203229"; + PushConfig pushConfig = PushConfig.newBuilder().build(); + client.modifyPushConfig(subscription, pushConfig); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getSnapshotTest() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + SnapshotName snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + + Snapshot actualResponse = client.getSnapshot(snapshot); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + GetSnapshotRequest actualRequest = ((GetSnapshotRequest) actualRequests.get(0)); + + Assert.assertEquals(snapshot.toString(), actualRequest.getSnapshot()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void getSnapshotExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SnapshotName snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + client.getSnapshot(snapshot); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getSnapshotTest2() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + String snapshot = "snapshot284874180"; + + Snapshot actualResponse = client.getSnapshot(snapshot); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + GetSnapshotRequest actualRequest = ((GetSnapshotRequest) actualRequests.get(0)); + + Assert.assertEquals(snapshot, actualRequest.getSnapshot()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void getSnapshotExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String snapshot = "snapshot284874180"; + client.getSnapshot(snapshot); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSnapshotsTest() throws Exception { + Snapshot responsesElement = Snapshot.newBuilder().build(); + ListSnapshotsResponse expectedResponse = + ListSnapshotsResponse.newBuilder() + .setNextPageToken("") + .addAllSnapshots(Arrays.asList(responsesElement)) + .build(); + mockSubscriber.addResponse(expectedResponse); + + ProjectName project = ProjectName.of("[PROJECT]"); + + ListSnapshotsPagedResponse pagedListResponse = client.listSnapshots(project); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSnapshotsList().get(0), resources.get(0)); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListSnapshotsRequest actualRequest = ((ListSnapshotsRequest) actualRequests.get(0)); + + Assert.assertEquals(project.toString(), actualRequest.getProject()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listSnapshotsExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + ProjectName project = ProjectName.of("[PROJECT]"); + client.listSnapshots(project); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listSnapshotsTest2() throws Exception { + Snapshot responsesElement = Snapshot.newBuilder().build(); + ListSnapshotsResponse expectedResponse = + ListSnapshotsResponse.newBuilder() + .setNextPageToken("") + .addAllSnapshots(Arrays.asList(responsesElement)) + .build(); + mockSubscriber.addResponse(expectedResponse); + + String project = "project-309310695"; + + ListSnapshotsPagedResponse pagedListResponse = client.listSnapshots(project); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSnapshotsList().get(0), resources.get(0)); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListSnapshotsRequest actualRequest = ((ListSnapshotsRequest) actualRequests.get(0)); + + Assert.assertEquals(project, actualRequest.getProject()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listSnapshotsExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String project = "project-309310695"; + client.listSnapshots(project); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSnapshotTest() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + SnapshotName name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + + Snapshot actualResponse = client.createSnapshot(name, subscription); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + CreateSnapshotRequest actualRequest = ((CreateSnapshotRequest) actualRequests.get(0)); + + Assert.assertEquals(name.toString(), actualRequest.getName()); + Assert.assertEquals(subscription.toString(), actualRequest.getSubscription()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createSnapshotExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SnapshotName name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + client.createSnapshot(name, subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSnapshotTest2() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + SnapshotName name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + String subscription = "subscription341203229"; + + Snapshot actualResponse = client.createSnapshot(name, subscription); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + CreateSnapshotRequest actualRequest = ((CreateSnapshotRequest) actualRequests.get(0)); + + Assert.assertEquals(name.toString(), actualRequest.getName()); + Assert.assertEquals(subscription, actualRequest.getSubscription()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createSnapshotExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SnapshotName name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + String subscription = "subscription341203229"; + client.createSnapshot(name, subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSnapshotTest3() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + String name = "name3373707"; + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + + Snapshot actualResponse = client.createSnapshot(name, subscription); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + CreateSnapshotRequest actualRequest = ((CreateSnapshotRequest) actualRequests.get(0)); + + Assert.assertEquals(name, actualRequest.getName()); + Assert.assertEquals(subscription.toString(), actualRequest.getSubscription()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createSnapshotExceptionTest3() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String name = "name3373707"; + SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]"); + client.createSnapshot(name, subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSnapshotTest4() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + String name = "name3373707"; + String subscription = "subscription341203229"; + + Snapshot actualResponse = client.createSnapshot(name, subscription); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + CreateSnapshotRequest actualRequest = ((CreateSnapshotRequest) actualRequests.get(0)); + + Assert.assertEquals(name, actualRequest.getName()); + Assert.assertEquals(subscription, actualRequest.getSubscription()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createSnapshotExceptionTest4() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String name = "name3373707"; + String subscription = "subscription341203229"; + client.createSnapshot(name, subscription); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void updateSnapshotTest() throws Exception { + Snapshot expectedResponse = + Snapshot.newBuilder() + .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString()) + .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .setExpireTime(Timestamp.newBuilder().build()) + .putAllLabels(new HashMap()) + .build(); + mockSubscriber.addResponse(expectedResponse); + + Snapshot snapshot = Snapshot.newBuilder().build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + + Snapshot actualResponse = client.updateSnapshot(snapshot, updateMask); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + UpdateSnapshotRequest actualRequest = ((UpdateSnapshotRequest) actualRequests.get(0)); + + Assert.assertEquals(snapshot, actualRequest.getSnapshot()); + Assert.assertEquals(updateMask, actualRequest.getUpdateMask()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void updateSnapshotExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + Snapshot snapshot = Snapshot.newBuilder().build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + client.updateSnapshot(snapshot, updateMask); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSnapshotTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockSubscriber.addResponse(expectedResponse); + + SnapshotName snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + + client.deleteSnapshot(snapshot); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + DeleteSnapshotRequest actualRequest = ((DeleteSnapshotRequest) actualRequests.get(0)); + + Assert.assertEquals(snapshot.toString(), actualRequest.getSnapshot()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void deleteSnapshotExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SnapshotName snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]"); + client.deleteSnapshot(snapshot); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteSnapshotTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockSubscriber.addResponse(expectedResponse); + + String snapshot = "snapshot284874180"; + + client.deleteSnapshot(snapshot); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + DeleteSnapshotRequest actualRequest = ((DeleteSnapshotRequest) actualRequests.get(0)); + + Assert.assertEquals(snapshot, actualRequest.getSnapshot()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void deleteSnapshotExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + String snapshot = "snapshot284874180"; + client.deleteSnapshot(snapshot); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void seekTest() throws Exception { + SeekResponse expectedResponse = SeekResponse.newBuilder().build(); + mockSubscriber.addResponse(expectedResponse); + + SeekRequest request = + SeekRequest.newBuilder() + .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .build(); + + SeekResponse actualResponse = client.seek(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockSubscriber.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + SeekRequest actualRequest = ((SeekRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getSubscription(), actualRequest.getSubscription()); + Assert.assertEquals(request.getTime(), actualRequest.getTime()); + Assert.assertEquals(request.getSnapshot(), actualRequest.getSnapshot()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void seekExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSubscriber.addException(exception); + + try { + SeekRequest request = + SeekRequest.newBuilder() + .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .build(); + client.seek(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void setIamPolicyTest() throws Exception { + Policy expectedResponse = + Policy.newBuilder() + .setVersion(351608024) + .addAllBindings(new ArrayList()) + .addAllAuditConfigs(new ArrayList()) + .setEtag(ByteString.EMPTY) + .build(); + mockIAMPolicy.addResponse(expectedResponse); + + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setPolicy(Policy.newBuilder().build()) + .setUpdateMask(FieldMask.newBuilder().build()) + .build(); + + Policy actualResponse = client.setIamPolicy(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockIAMPolicy.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + SetIamPolicyRequest actualRequest = ((SetIamPolicyRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getResource(), actualRequest.getResource()); + Assert.assertEquals(request.getPolicy(), actualRequest.getPolicy()); + Assert.assertEquals(request.getUpdateMask(), actualRequest.getUpdateMask()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void setIamPolicyExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockIAMPolicy.addException(exception); + + try { + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setPolicy(Policy.newBuilder().build()) + .setUpdateMask(FieldMask.newBuilder().build()) + .build(); + client.setIamPolicy(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getIamPolicyTest() throws Exception { + Policy expectedResponse = + Policy.newBuilder() + .setVersion(351608024) + .addAllBindings(new ArrayList()) + .addAllAuditConfigs(new ArrayList()) + .setEtag(ByteString.EMPTY) + .build(); + mockIAMPolicy.addResponse(expectedResponse); + + GetIamPolicyRequest request = + GetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setOptions(GetPolicyOptions.newBuilder().build()) + .build(); + + Policy actualResponse = client.getIamPolicy(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockIAMPolicy.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + GetIamPolicyRequest actualRequest = ((GetIamPolicyRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getResource(), actualRequest.getResource()); + Assert.assertEquals(request.getOptions(), actualRequest.getOptions()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void getIamPolicyExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockIAMPolicy.addException(exception); + + try { + GetIamPolicyRequest request = + GetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setOptions(GetPolicyOptions.newBuilder().build()) + .build(); + client.getIamPolicy(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void testIamPermissionsTest() throws Exception { + TestIamPermissionsResponse expectedResponse = + TestIamPermissionsResponse.newBuilder().addAllPermissions(new ArrayList()).build(); + mockIAMPolicy.addResponse(expectedResponse); + + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .addAllPermissions(new ArrayList()) + .build(); + + TestIamPermissionsResponse actualResponse = client.testIamPermissions(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockIAMPolicy.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + TestIamPermissionsRequest actualRequest = ((TestIamPermissionsRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getResource(), actualRequest.getResource()); + Assert.assertEquals(request.getPermissionsList(), actualRequest.getPermissionsList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void testIamPermissionsExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockIAMPolicy.addException(exception); + + try { + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .addAllPermissions(new ArrayList()) + .build(); + client.testIamPermissions(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/TopicAdminClientHttpJsonTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/TopicAdminClientHttpJsonTest.java new file mode 100644 index 000000000000..70165e3a2b86 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/TopicAdminClientHttpJsonTest.java @@ -0,0 +1,1091 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSubscriptionsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicsPagedResponse; + +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.httpjson.GaxHttpJsonProperties; +import com.google.api.gax.httpjson.testing.MockHttpService; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ApiException; +import com.google.api.gax.rpc.ApiExceptionFactory; +import com.google.api.gax.rpc.InvalidArgumentException; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.rpc.testing.FakeStatusCode; +import com.google.cloud.pubsub.v1.stub.HttpJsonPublisherStub; +import com.google.common.collect.Lists; +import com.google.iam.v1.AuditConfig; +import com.google.iam.v1.Binding; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.GetPolicyOptions; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.ByteString; +import com.google.protobuf.Duration; +import com.google.protobuf.Empty; +import com.google.protobuf.FieldMask; +import com.google.pubsub.v1.CryptoKeyName; +import com.google.pubsub.v1.DetachSubscriptionRequest; +import com.google.pubsub.v1.DetachSubscriptionResponse; +import com.google.pubsub.v1.IngestionDataSourceSettings; +import com.google.pubsub.v1.ListTopicSnapshotsResponse; +import com.google.pubsub.v1.ListTopicSubscriptionsResponse; +import com.google.pubsub.v1.ListTopicsResponse; +import com.google.pubsub.v1.MessageStoragePolicy; +import com.google.pubsub.v1.MessageTransform; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.PublishResponse; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.SchemaName; +import com.google.pubsub.v1.SchemaSettings; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import javax.annotation.Generated; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +@Generated("by gapic-generator-java") +public class TopicAdminClientHttpJsonTest { + private static MockHttpService mockService; + private static TopicAdminClient client; + + @BeforeClass + public static void startStaticServer() throws IOException { + mockService = + new MockHttpService( + HttpJsonPublisherStub.getMethodDescriptors(), TopicAdminSettings.getDefaultEndpoint()); + TopicAdminSettings settings = + TopicAdminSettings.newHttpJsonBuilder() + .setTransportChannelProvider( + TopicAdminSettings.defaultHttpJsonTransportProviderBuilder() + .setHttpTransport(mockService) + .build()) + .setCredentialsProvider(NoCredentialsProvider.create()) + .build(); + client = TopicAdminClient.create(settings); + } + + @AfterClass + public static void stopServer() { + client.close(); + } + + @Before + public void setUp() {} + + @After + public void tearDown() throws Exception { + mockService.reset(); + } + + @Test + public void createTopicTest() throws Exception { + Topic expectedResponse = + Topic.newBuilder() + .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .putAllLabels(new HashMap()) + .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build()) + .setKmsKeyName( + CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]") + .toString()) + .setSchemaSettings(SchemaSettings.newBuilder().build()) + .setSatisfiesPzs(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + TopicName name = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + + Topic actualResponse = client.createTopic(name); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createTopicExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + TopicName name = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + client.createTopic(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createTopicTest2() throws Exception { + Topic expectedResponse = + Topic.newBuilder() + .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .putAllLabels(new HashMap()) + .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build()) + .setKmsKeyName( + CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]") + .toString()) + .setSchemaSettings(SchemaSettings.newBuilder().build()) + .setSatisfiesPzs(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + String name = "projects/project-7550/topics/topic-7550"; + + Topic actualResponse = client.createTopic(name); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createTopicExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String name = "projects/project-7550/topics/topic-7550"; + client.createTopic(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void updateTopicTest() throws Exception { + Topic expectedResponse = + Topic.newBuilder() + .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .putAllLabels(new HashMap()) + .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build()) + .setKmsKeyName( + CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]") + .toString()) + .setSchemaSettings(SchemaSettings.newBuilder().build()) + .setSatisfiesPzs(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + Topic topic = + Topic.newBuilder() + .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .putAllLabels(new HashMap()) + .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build()) + .setKmsKeyName( + CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]") + .toString()) + .setSchemaSettings(SchemaSettings.newBuilder().build()) + .setSatisfiesPzs(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + + Topic actualResponse = client.updateTopic(topic, updateMask); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void updateTopicExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + Topic topic = + Topic.newBuilder() + .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .putAllLabels(new HashMap()) + .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build()) + .setKmsKeyName( + CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]") + .toString()) + .setSchemaSettings(SchemaSettings.newBuilder().build()) + .setSatisfiesPzs(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + client.updateTopic(topic, updateMask); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void publishTest() throws Exception { + PublishResponse expectedResponse = + PublishResponse.newBuilder().addAllMessageIds(new ArrayList()).build(); + mockService.addResponse(expectedResponse); + + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + List messages = new ArrayList<>(); + + PublishResponse actualResponse = client.publish(topic, messages); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void publishExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + List messages = new ArrayList<>(); + client.publish(topic, messages); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void publishTest2() throws Exception { + PublishResponse expectedResponse = + PublishResponse.newBuilder().addAllMessageIds(new ArrayList()).build(); + mockService.addResponse(expectedResponse); + + String topic = "projects/project-2486/topics/topic-2486"; + List messages = new ArrayList<>(); + + PublishResponse actualResponse = client.publish(topic, messages); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void publishExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String topic = "projects/project-2486/topics/topic-2486"; + List messages = new ArrayList<>(); + client.publish(topic, messages); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getTopicTest() throws Exception { + Topic expectedResponse = + Topic.newBuilder() + .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .putAllLabels(new HashMap()) + .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build()) + .setKmsKeyName( + CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]") + .toString()) + .setSchemaSettings(SchemaSettings.newBuilder().build()) + .setSatisfiesPzs(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + + Topic actualResponse = client.getTopic(topic); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void getTopicExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + client.getTopic(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getTopicTest2() throws Exception { + Topic expectedResponse = + Topic.newBuilder() + .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .putAllLabels(new HashMap()) + .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build()) + .setKmsKeyName( + CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]") + .toString()) + .setSchemaSettings(SchemaSettings.newBuilder().build()) + .setSatisfiesPzs(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockService.addResponse(expectedResponse); + + String topic = "projects/project-2486/topics/topic-2486"; + + Topic actualResponse = client.getTopic(topic); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void getTopicExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String topic = "projects/project-2486/topics/topic-2486"; + client.getTopic(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listTopicsTest() throws Exception { + Topic responsesElement = Topic.newBuilder().build(); + ListTopicsResponse expectedResponse = + ListTopicsResponse.newBuilder() + .setNextPageToken("") + .addAllTopics(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + ProjectName project = ProjectName.of("[PROJECT]"); + + ListTopicsPagedResponse pagedListResponse = client.listTopics(project); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getTopicsList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listTopicsExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + ProjectName project = ProjectName.of("[PROJECT]"); + client.listTopics(project); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listTopicsTest2() throws Exception { + Topic responsesElement = Topic.newBuilder().build(); + ListTopicsResponse expectedResponse = + ListTopicsResponse.newBuilder() + .setNextPageToken("") + .addAllTopics(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + String project = "projects/project-7934"; + + ListTopicsPagedResponse pagedListResponse = client.listTopics(project); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getTopicsList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listTopicsExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String project = "projects/project-7934"; + client.listTopics(project); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listTopicSubscriptionsTest() throws Exception { + String responsesElement = "responsesElement-318365110"; + ListTopicSubscriptionsResponse expectedResponse = + ListTopicSubscriptionsResponse.newBuilder() + .setNextPageToken("") + .addAllSubscriptions(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + + ListTopicSubscriptionsPagedResponse pagedListResponse = client.listTopicSubscriptions(topic); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSubscriptionsList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listTopicSubscriptionsExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + client.listTopicSubscriptions(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listTopicSubscriptionsTest2() throws Exception { + String responsesElement = "responsesElement-318365110"; + ListTopicSubscriptionsResponse expectedResponse = + ListTopicSubscriptionsResponse.newBuilder() + .setNextPageToken("") + .addAllSubscriptions(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + String topic = "projects/project-2486/topics/topic-2486"; + + ListTopicSubscriptionsPagedResponse pagedListResponse = client.listTopicSubscriptions(topic); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSubscriptionsList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listTopicSubscriptionsExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String topic = "projects/project-2486/topics/topic-2486"; + client.listTopicSubscriptions(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listTopicSnapshotsTest() throws Exception { + String responsesElement = "responsesElement-318365110"; + ListTopicSnapshotsResponse expectedResponse = + ListTopicSnapshotsResponse.newBuilder() + .setNextPageToken("") + .addAllSnapshots(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + + ListTopicSnapshotsPagedResponse pagedListResponse = client.listTopicSnapshots(topic); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSnapshotsList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listTopicSnapshotsExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + client.listTopicSnapshots(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listTopicSnapshotsTest2() throws Exception { + String responsesElement = "responsesElement-318365110"; + ListTopicSnapshotsResponse expectedResponse = + ListTopicSnapshotsResponse.newBuilder() + .setNextPageToken("") + .addAllSnapshots(Arrays.asList(responsesElement)) + .build(); + mockService.addResponse(expectedResponse); + + String topic = "projects/project-2486/topics/topic-2486"; + + ListTopicSnapshotsPagedResponse pagedListResponse = client.listTopicSnapshots(topic); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSnapshotsList().get(0), resources.get(0)); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void listTopicSnapshotsExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String topic = "projects/project-2486/topics/topic-2486"; + client.listTopicSnapshots(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteTopicTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + + client.deleteTopic(topic); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void deleteTopicExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + client.deleteTopic(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteTopicTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockService.addResponse(expectedResponse); + + String topic = "projects/project-2486/topics/topic-2486"; + + client.deleteTopic(topic); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void deleteTopicExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String topic = "projects/project-2486/topics/topic-2486"; + client.deleteTopic(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void detachSubscriptionTest() throws Exception { + DetachSubscriptionResponse expectedResponse = DetachSubscriptionResponse.newBuilder().build(); + mockService.addResponse(expectedResponse); + + DetachSubscriptionRequest request = + DetachSubscriptionRequest.newBuilder() + .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .build(); + + DetachSubscriptionResponse actualResponse = client.detachSubscription(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void detachSubscriptionExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + DetachSubscriptionRequest request = + DetachSubscriptionRequest.newBuilder() + .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .build(); + client.detachSubscription(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void setIamPolicyTest() throws Exception { + Policy expectedResponse = + Policy.newBuilder() + .setVersion(351608024) + .addAllBindings(new ArrayList()) + .addAllAuditConfigs(new ArrayList()) + .setEtag(ByteString.EMPTY) + .build(); + mockService.addResponse(expectedResponse); + + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setPolicy(Policy.newBuilder().build()) + .setUpdateMask(FieldMask.newBuilder().build()) + .build(); + + Policy actualResponse = client.setIamPolicy(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void setIamPolicyExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setPolicy(Policy.newBuilder().build()) + .setUpdateMask(FieldMask.newBuilder().build()) + .build(); + client.setIamPolicy(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getIamPolicyTest() throws Exception { + Policy expectedResponse = + Policy.newBuilder() + .setVersion(351608024) + .addAllBindings(new ArrayList()) + .addAllAuditConfigs(new ArrayList()) + .setEtag(ByteString.EMPTY) + .build(); + mockService.addResponse(expectedResponse); + + GetIamPolicyRequest request = + GetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setOptions(GetPolicyOptions.newBuilder().build()) + .build(); + + Policy actualResponse = client.getIamPolicy(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void getIamPolicyExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + GetIamPolicyRequest request = + GetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setOptions(GetPolicyOptions.newBuilder().build()) + .build(); + client.getIamPolicy(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void testIamPermissionsTest() throws Exception { + TestIamPermissionsResponse expectedResponse = + TestIamPermissionsResponse.newBuilder().addAllPermissions(new ArrayList()).build(); + mockService.addResponse(expectedResponse); + + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .addAllPermissions(new ArrayList()) + .build(); + + TestIamPermissionsResponse actualResponse = client.testIamPermissions(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void testIamPermissionsExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .addAllPermissions(new ArrayList()) + .build(); + client.testIamPermissions(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/TopicAdminClientTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/TopicAdminClientTest.java new file mode 100644 index 000000000000..5774110a40e8 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/TopicAdminClientTest.java @@ -0,0 +1,972 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.cloud.pubsub.v1; + +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSnapshotsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicSubscriptionsPagedResponse; +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicsPagedResponse; + +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.grpc.GaxGrpcProperties; +import com.google.api.gax.grpc.testing.LocalChannelProvider; +import com.google.api.gax.grpc.testing.MockGrpcService; +import com.google.api.gax.grpc.testing.MockServiceHelper; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.InvalidArgumentException; +import com.google.common.collect.Lists; +import com.google.iam.v1.AuditConfig; +import com.google.iam.v1.Binding; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.GetPolicyOptions; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.protobuf.AbstractMessage; +import com.google.protobuf.ByteString; +import com.google.protobuf.Duration; +import com.google.protobuf.Empty; +import com.google.protobuf.FieldMask; +import com.google.pubsub.v1.CryptoKeyName; +import com.google.pubsub.v1.DeleteTopicRequest; +import com.google.pubsub.v1.DetachSubscriptionRequest; +import com.google.pubsub.v1.DetachSubscriptionResponse; +import com.google.pubsub.v1.GetTopicRequest; +import com.google.pubsub.v1.IngestionDataSourceSettings; +import com.google.pubsub.v1.ListTopicSnapshotsRequest; +import com.google.pubsub.v1.ListTopicSnapshotsResponse; +import com.google.pubsub.v1.ListTopicSubscriptionsRequest; +import com.google.pubsub.v1.ListTopicSubscriptionsResponse; +import com.google.pubsub.v1.ListTopicsRequest; +import com.google.pubsub.v1.ListTopicsResponse; +import com.google.pubsub.v1.MessageStoragePolicy; +import com.google.pubsub.v1.MessageTransform; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.PublishRequest; +import com.google.pubsub.v1.PublishResponse; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.SchemaName; +import com.google.pubsub.v1.SchemaSettings; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import com.google.pubsub.v1.UpdateTopicRequest; +import io.grpc.StatusRuntimeException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; +import javax.annotation.Generated; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +@Generated("by gapic-generator-java") +public class TopicAdminClientTest { + private static MockIAMPolicy mockIAMPolicy; + private static MockPublisher mockPublisher; + private static MockServiceHelper mockServiceHelper; + private LocalChannelProvider channelProvider; + private TopicAdminClient client; + + @BeforeClass + public static void startStaticServer() { + mockPublisher = new MockPublisher(); + mockIAMPolicy = new MockIAMPolicy(); + mockServiceHelper = + new MockServiceHelper( + UUID.randomUUID().toString(), + Arrays.asList(mockPublisher, mockIAMPolicy)); + mockServiceHelper.start(); + } + + @AfterClass + public static void stopServer() { + mockServiceHelper.stop(); + } + + @Before + public void setUp() throws IOException { + mockServiceHelper.reset(); + channelProvider = mockServiceHelper.createChannelProvider(); + TopicAdminSettings settings = + TopicAdminSettings.newBuilder() + .setTransportChannelProvider(channelProvider) + .setCredentialsProvider(NoCredentialsProvider.create()) + .build(); + client = TopicAdminClient.create(settings); + } + + @After + public void tearDown() throws Exception { + client.close(); + } + + @Test + public void createTopicTest() throws Exception { + Topic expectedResponse = + Topic.newBuilder() + .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .putAllLabels(new HashMap()) + .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build()) + .setKmsKeyName( + CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]") + .toString()) + .setSchemaSettings(SchemaSettings.newBuilder().build()) + .setSatisfiesPzs(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockPublisher.addResponse(expectedResponse); + + TopicName name = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + + Topic actualResponse = client.createTopic(name); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + Topic actualRequest = ((Topic) actualRequests.get(0)); + + Assert.assertEquals(name.toString(), actualRequest.getName()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createTopicExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + TopicName name = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + client.createTopic(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createTopicTest2() throws Exception { + Topic expectedResponse = + Topic.newBuilder() + .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .putAllLabels(new HashMap()) + .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build()) + .setKmsKeyName( + CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]") + .toString()) + .setSchemaSettings(SchemaSettings.newBuilder().build()) + .setSatisfiesPzs(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockPublisher.addResponse(expectedResponse); + + String name = "name3373707"; + + Topic actualResponse = client.createTopic(name); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + Topic actualRequest = ((Topic) actualRequests.get(0)); + + Assert.assertEquals(name, actualRequest.getName()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createTopicExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + String name = "name3373707"; + client.createTopic(name); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void updateTopicTest() throws Exception { + Topic expectedResponse = + Topic.newBuilder() + .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .putAllLabels(new HashMap()) + .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build()) + .setKmsKeyName( + CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]") + .toString()) + .setSchemaSettings(SchemaSettings.newBuilder().build()) + .setSatisfiesPzs(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockPublisher.addResponse(expectedResponse); + + Topic topic = Topic.newBuilder().build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + + Topic actualResponse = client.updateTopic(topic, updateMask); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + UpdateTopicRequest actualRequest = ((UpdateTopicRequest) actualRequests.get(0)); + + Assert.assertEquals(topic, actualRequest.getTopic()); + Assert.assertEquals(updateMask, actualRequest.getUpdateMask()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void updateTopicExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + Topic topic = Topic.newBuilder().build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + client.updateTopic(topic, updateMask); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void publishTest() throws Exception { + PublishResponse expectedResponse = + PublishResponse.newBuilder().addAllMessageIds(new ArrayList()).build(); + mockPublisher.addResponse(expectedResponse); + + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + List messages = new ArrayList<>(); + + PublishResponse actualResponse = client.publish(topic, messages); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + PublishRequest actualRequest = ((PublishRequest) actualRequests.get(0)); + + Assert.assertEquals(topic.toString(), actualRequest.getTopic()); + Assert.assertEquals(messages, actualRequest.getMessagesList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void publishExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + List messages = new ArrayList<>(); + client.publish(topic, messages); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void publishTest2() throws Exception { + PublishResponse expectedResponse = + PublishResponse.newBuilder().addAllMessageIds(new ArrayList()).build(); + mockPublisher.addResponse(expectedResponse); + + String topic = "topic110546223"; + List messages = new ArrayList<>(); + + PublishResponse actualResponse = client.publish(topic, messages); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + PublishRequest actualRequest = ((PublishRequest) actualRequests.get(0)); + + Assert.assertEquals(topic, actualRequest.getTopic()); + Assert.assertEquals(messages, actualRequest.getMessagesList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void publishExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + String topic = "topic110546223"; + List messages = new ArrayList<>(); + client.publish(topic, messages); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getTopicTest() throws Exception { + Topic expectedResponse = + Topic.newBuilder() + .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .putAllLabels(new HashMap()) + .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build()) + .setKmsKeyName( + CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]") + .toString()) + .setSchemaSettings(SchemaSettings.newBuilder().build()) + .setSatisfiesPzs(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockPublisher.addResponse(expectedResponse); + + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + + Topic actualResponse = client.getTopic(topic); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + GetTopicRequest actualRequest = ((GetTopicRequest) actualRequests.get(0)); + + Assert.assertEquals(topic.toString(), actualRequest.getTopic()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void getTopicExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + client.getTopic(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getTopicTest2() throws Exception { + Topic expectedResponse = + Topic.newBuilder() + .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString()) + .putAllLabels(new HashMap()) + .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build()) + .setKmsKeyName( + CryptoKeyName.of("[PROJECT]", "[LOCATION]", "[KEY_RING]", "[CRYPTO_KEY]") + .toString()) + .setSchemaSettings(SchemaSettings.newBuilder().build()) + .setSatisfiesPzs(true) + .setMessageRetentionDuration(Duration.newBuilder().build()) + .setIngestionDataSourceSettings(IngestionDataSourceSettings.newBuilder().build()) + .addAllMessageTransforms(new ArrayList()) + .putAllTags(new HashMap()) + .build(); + mockPublisher.addResponse(expectedResponse); + + String topic = "topic110546223"; + + Topic actualResponse = client.getTopic(topic); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + GetTopicRequest actualRequest = ((GetTopicRequest) actualRequests.get(0)); + + Assert.assertEquals(topic, actualRequest.getTopic()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void getTopicExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + String topic = "topic110546223"; + client.getTopic(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listTopicsTest() throws Exception { + Topic responsesElement = Topic.newBuilder().build(); + ListTopicsResponse expectedResponse = + ListTopicsResponse.newBuilder() + .setNextPageToken("") + .addAllTopics(Arrays.asList(responsesElement)) + .build(); + mockPublisher.addResponse(expectedResponse); + + ProjectName project = ProjectName.of("[PROJECT]"); + + ListTopicsPagedResponse pagedListResponse = client.listTopics(project); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getTopicsList().get(0), resources.get(0)); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListTopicsRequest actualRequest = ((ListTopicsRequest) actualRequests.get(0)); + + Assert.assertEquals(project.toString(), actualRequest.getProject()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listTopicsExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + ProjectName project = ProjectName.of("[PROJECT]"); + client.listTopics(project); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listTopicsTest2() throws Exception { + Topic responsesElement = Topic.newBuilder().build(); + ListTopicsResponse expectedResponse = + ListTopicsResponse.newBuilder() + .setNextPageToken("") + .addAllTopics(Arrays.asList(responsesElement)) + .build(); + mockPublisher.addResponse(expectedResponse); + + String project = "project-309310695"; + + ListTopicsPagedResponse pagedListResponse = client.listTopics(project); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getTopicsList().get(0), resources.get(0)); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListTopicsRequest actualRequest = ((ListTopicsRequest) actualRequests.get(0)); + + Assert.assertEquals(project, actualRequest.getProject()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listTopicsExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + String project = "project-309310695"; + client.listTopics(project); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listTopicSubscriptionsTest() throws Exception { + String responsesElement = "responsesElement-318365110"; + ListTopicSubscriptionsResponse expectedResponse = + ListTopicSubscriptionsResponse.newBuilder() + .setNextPageToken("") + .addAllSubscriptions(Arrays.asList(responsesElement)) + .build(); + mockPublisher.addResponse(expectedResponse); + + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + + ListTopicSubscriptionsPagedResponse pagedListResponse = client.listTopicSubscriptions(topic); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSubscriptionsList().get(0), resources.get(0)); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListTopicSubscriptionsRequest actualRequest = + ((ListTopicSubscriptionsRequest) actualRequests.get(0)); + + Assert.assertEquals(topic.toString(), actualRequest.getTopic()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listTopicSubscriptionsExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + client.listTopicSubscriptions(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listTopicSubscriptionsTest2() throws Exception { + String responsesElement = "responsesElement-318365110"; + ListTopicSubscriptionsResponse expectedResponse = + ListTopicSubscriptionsResponse.newBuilder() + .setNextPageToken("") + .addAllSubscriptions(Arrays.asList(responsesElement)) + .build(); + mockPublisher.addResponse(expectedResponse); + + String topic = "topic110546223"; + + ListTopicSubscriptionsPagedResponse pagedListResponse = client.listTopicSubscriptions(topic); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSubscriptionsList().get(0), resources.get(0)); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListTopicSubscriptionsRequest actualRequest = + ((ListTopicSubscriptionsRequest) actualRequests.get(0)); + + Assert.assertEquals(topic, actualRequest.getTopic()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listTopicSubscriptionsExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + String topic = "topic110546223"; + client.listTopicSubscriptions(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listTopicSnapshotsTest() throws Exception { + String responsesElement = "responsesElement-318365110"; + ListTopicSnapshotsResponse expectedResponse = + ListTopicSnapshotsResponse.newBuilder() + .setNextPageToken("") + .addAllSnapshots(Arrays.asList(responsesElement)) + .build(); + mockPublisher.addResponse(expectedResponse); + + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + + ListTopicSnapshotsPagedResponse pagedListResponse = client.listTopicSnapshots(topic); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSnapshotsList().get(0), resources.get(0)); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListTopicSnapshotsRequest actualRequest = ((ListTopicSnapshotsRequest) actualRequests.get(0)); + + Assert.assertEquals(topic.toString(), actualRequest.getTopic()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listTopicSnapshotsExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + client.listTopicSnapshots(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void listTopicSnapshotsTest2() throws Exception { + String responsesElement = "responsesElement-318365110"; + ListTopicSnapshotsResponse expectedResponse = + ListTopicSnapshotsResponse.newBuilder() + .setNextPageToken("") + .addAllSnapshots(Arrays.asList(responsesElement)) + .build(); + mockPublisher.addResponse(expectedResponse); + + String topic = "topic110546223"; + + ListTopicSnapshotsPagedResponse pagedListResponse = client.listTopicSnapshots(topic); + + List resources = Lists.newArrayList(pagedListResponse.iterateAll()); + + Assert.assertEquals(1, resources.size()); + Assert.assertEquals(expectedResponse.getSnapshotsList().get(0), resources.get(0)); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListTopicSnapshotsRequest actualRequest = ((ListTopicSnapshotsRequest) actualRequests.get(0)); + + Assert.assertEquals(topic, actualRequest.getTopic()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void listTopicSnapshotsExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + String topic = "topic110546223"; + client.listTopicSnapshots(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteTopicTest() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockPublisher.addResponse(expectedResponse); + + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + + client.deleteTopic(topic); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + DeleteTopicRequest actualRequest = ((DeleteTopicRequest) actualRequests.get(0)); + + Assert.assertEquals(topic.toString(), actualRequest.getTopic()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void deleteTopicExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]"); + client.deleteTopic(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void deleteTopicTest2() throws Exception { + Empty expectedResponse = Empty.newBuilder().build(); + mockPublisher.addResponse(expectedResponse); + + String topic = "topic110546223"; + + client.deleteTopic(topic); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + DeleteTopicRequest actualRequest = ((DeleteTopicRequest) actualRequests.get(0)); + + Assert.assertEquals(topic, actualRequest.getTopic()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void deleteTopicExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + String topic = "topic110546223"; + client.deleteTopic(topic); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void detachSubscriptionTest() throws Exception { + DetachSubscriptionResponse expectedResponse = DetachSubscriptionResponse.newBuilder().build(); + mockPublisher.addResponse(expectedResponse); + + DetachSubscriptionRequest request = + DetachSubscriptionRequest.newBuilder() + .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .build(); + + DetachSubscriptionResponse actualResponse = client.detachSubscription(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockPublisher.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + DetachSubscriptionRequest actualRequest = ((DetachSubscriptionRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getSubscription(), actualRequest.getSubscription()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void detachSubscriptionExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockPublisher.addException(exception); + + try { + DetachSubscriptionRequest request = + DetachSubscriptionRequest.newBuilder() + .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString()) + .build(); + client.detachSubscription(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void setIamPolicyTest() throws Exception { + Policy expectedResponse = + Policy.newBuilder() + .setVersion(351608024) + .addAllBindings(new ArrayList()) + .addAllAuditConfigs(new ArrayList()) + .setEtag(ByteString.EMPTY) + .build(); + mockIAMPolicy.addResponse(expectedResponse); + + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setPolicy(Policy.newBuilder().build()) + .setUpdateMask(FieldMask.newBuilder().build()) + .build(); + + Policy actualResponse = client.setIamPolicy(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockIAMPolicy.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + SetIamPolicyRequest actualRequest = ((SetIamPolicyRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getResource(), actualRequest.getResource()); + Assert.assertEquals(request.getPolicy(), actualRequest.getPolicy()); + Assert.assertEquals(request.getUpdateMask(), actualRequest.getUpdateMask()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void setIamPolicyExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockIAMPolicy.addException(exception); + + try { + SetIamPolicyRequest request = + SetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setPolicy(Policy.newBuilder().build()) + .setUpdateMask(FieldMask.newBuilder().build()) + .build(); + client.setIamPolicy(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void getIamPolicyTest() throws Exception { + Policy expectedResponse = + Policy.newBuilder() + .setVersion(351608024) + .addAllBindings(new ArrayList()) + .addAllAuditConfigs(new ArrayList()) + .setEtag(ByteString.EMPTY) + .build(); + mockIAMPolicy.addResponse(expectedResponse); + + GetIamPolicyRequest request = + GetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setOptions(GetPolicyOptions.newBuilder().build()) + .build(); + + Policy actualResponse = client.getIamPolicy(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockIAMPolicy.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + GetIamPolicyRequest actualRequest = ((GetIamPolicyRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getResource(), actualRequest.getResource()); + Assert.assertEquals(request.getOptions(), actualRequest.getOptions()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void getIamPolicyExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockIAMPolicy.addException(exception); + + try { + GetIamPolicyRequest request = + GetIamPolicyRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .setOptions(GetPolicyOptions.newBuilder().build()) + .build(); + client.getIamPolicy(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void testIamPermissionsTest() throws Exception { + TestIamPermissionsResponse expectedResponse = + TestIamPermissionsResponse.newBuilder().addAllPermissions(new ArrayList()).build(); + mockIAMPolicy.addResponse(expectedResponse); + + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .addAllPermissions(new ArrayList()) + .build(); + + TestIamPermissionsResponse actualResponse = client.testIamPermissions(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockIAMPolicy.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + TestIamPermissionsRequest actualRequest = ((TestIamPermissionsRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getResource(), actualRequest.getResource()); + Assert.assertEquals(request.getPermissionsList(), actualRequest.getPermissionsList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void testIamPermissionsExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockIAMPolicy.addException(exception); + + try { + TestIamPermissionsRequest request = + TestIamPermissionsRequest.newBuilder() + .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString()) + .addAllPermissions(new ArrayList()) + .build(); + client.testIamPermissions(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/TopicAdminSmokeTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/TopicAdminSmokeTest.java new file mode 100644 index 000000000000..eb257958f514 --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/TopicAdminSmokeTest.java @@ -0,0 +1,65 @@ +/* + * Copyright 2020 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 + * + * https://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. + */ +package com.google.cloud.pubsub.v1; + +import static com.google.cloud.pubsub.v1.TopicAdminClient.ListTopicsPagedResponse; + +import com.google.common.base.Preconditions; +import com.google.pubsub.v1.ProjectName; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.junit.Test; + +@javax.annotation.Generated("by GAPIC") +public class TopicAdminSmokeTest { + private static final String PROJECT_ENV_NAME = "GOOGLE_CLOUD_PROJECT"; + private static final String LEGACY_PROJECT_ENV_NAME = "GCLOUD_PROJECT"; + + @Test + public void run() { + main(null); + } + + public static void main(String args[]) { + Logger.getLogger("").setLevel(Level.WARNING); + try { + executeNoCatch(getProjectId()); + System.out.println("OK"); + } catch (Exception e) { + System.err.println("Failed with exception:"); + e.printStackTrace(System.err); + System.exit(1); + } + } + + public static void executeNoCatch(String projectId) throws Exception { + try (TopicAdminClient client = TopicAdminClient.create()) { + ProjectName project = ProjectName.of(projectId); + + ListTopicsPagedResponse pagedResponse = client.listTopics(project); + } + } + + private static String getProjectId() { + String projectId = System.getProperty(PROJECT_ENV_NAME, System.getenv(PROJECT_ENV_NAME)); + if (projectId == null) { + projectId = + System.getProperty(LEGACY_PROJECT_ENV_NAME, System.getenv(LEGACY_PROJECT_ENV_NAME)); + } + Preconditions.checkArgument(projectId != null, "A project ID is required."); + return projectId; + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java new file mode 100644 index 000000000000..aaa39669086b --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java @@ -0,0 +1,121 @@ +/* + * Copyright 2016 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. + */ + +package com.google.cloud.pubsub.v1; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.concurrent.TimeUnit; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Tests for {@link Waiter}. */ +@RunWith(JUnit4.class) +public class WaiterTest { + + @Test + public void test() throws Exception { + final Waiter waiter = new Waiter(); + waiter.incrementPendingCount(1); + + final Thread mainThread = Thread.currentThread(); + Thread t = + new Thread( + new Runnable() { + @Override + public void run() { + while (mainThread.getState() != Thread.State.WAITING) { + Thread.yield(); + } + waiter.incrementPendingCount(-1); + } + }); + t.start(); + + waiter.waitComplete(); + t.join(); + + assertEquals(0, waiter.pendingCount()); + } + + @Test + public void testTryWait_Completes() throws Exception { + final Waiter waiter = new Waiter(); + waiter.incrementPendingCount(1); + final FakeClock clock = new FakeClock(); + + final Thread mainThread = Thread.currentThread(); + Thread t = + new Thread( + new Runnable() { + @Override + public void run() { + while (mainThread.getState() == Thread.State.NEW) { + Thread.yield(); + } + waiter.incrementPendingCount(-1); + } + }); + t.start(); + + assertTrue(waiter.tryWait(500, clock)); + t.join(); + + assertEquals(0, waiter.pendingCount()); + } + + @Test + public void testTryWait_TimesOut() throws Exception { + final Waiter waiter = new Waiter(); + waiter.incrementPendingCount(1); + final FakeClock clock = new FakeClock(); + + final Thread mainThread = Thread.currentThread(); + Thread t = + new Thread( + new Runnable() { + @Override + public void run() { + while (mainThread.getState() == Thread.State.NEW) { + Thread.yield(); + } + try { + // Waits some additional time to ensure that the waiter is actually waiting. + Thread.sleep(100); + clock.advance(200, TimeUnit.MILLISECONDS); + } catch (InterruptedException e) { + // Ignored. + } + } + }); + t.start(); + + assertFalse(waiter.tryWait(100, clock)); + t.join(); + + assertEquals(1, waiter.pendingCount()); + } + + @Test + public void testTryWait_NoPending() { + final Waiter waiter = new Waiter(); + final FakeClock clock = new FakeClock(); + assertTrue(waiter.tryWait(100, clock)); + } +} diff --git a/java-pubsub/google-cloud-pubsub/src/test/resources/META-INF/native-image/com.google.cloud/google-cloud-pubsub/native-image.properties b/java-pubsub/google-cloud-pubsub/src/test/resources/META-INF/native-image/com.google.cloud/google-cloud-pubsub/native-image.properties new file mode 100644 index 000000000000..b77dd433ad1c --- /dev/null +++ b/java-pubsub/google-cloud-pubsub/src/test/resources/META-INF/native-image/com.google.cloud/google-cloud-pubsub/native-image.properties @@ -0,0 +1 @@ +Args=--initialize-at-build-time=org.junit.runners.model.FrameworkField \ No newline at end of file diff --git a/java-pubsub/grpc-google-cloud-pubsub-v1/pom.xml b/java-pubsub/grpc-google-cloud-pubsub-v1/pom.xml new file mode 100644 index 000000000000..aac991b79903 --- /dev/null +++ b/java-pubsub/grpc-google-cloud-pubsub-v1/pom.xml @@ -0,0 +1,65 @@ + + 4.0.0 + com.google.api.grpc + grpc-google-cloud-pubsub-v1 + 1.131.1-SNAPSHOT + grpc-google-cloud-pubsub-v1 + GRPC library for grpc-google-cloud-pubsub-v1 + + com.google.cloud + google-cloud-pubsub-parent + 1.149.1-SNAPSHOT + + + + io.grpc + grpc-api + + + io.grpc + grpc-stub + + + io.grpc + grpc-protobuf + + + com.google.protobuf + protobuf-java + + + com.google.api.grpc + proto-google-cloud-pubsub-v1 + + + com.google.guava + guava + + + + + + java9 + + [9,) + + + + javax.annotation + javax.annotation-api + + + + + + + + + org.codehaus.mojo + flatten-maven-plugin + + + + \ No newline at end of file diff --git a/java-pubsub/grpc-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublisherGrpc.java b/java-pubsub/grpc-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublisherGrpc.java new file mode 100644 index 000000000000..16c28e9cc74d --- /dev/null +++ b/java-pubsub/grpc-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublisherGrpc.java @@ -0,0 +1,1475 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +package com.google.pubsub.v1; + +import static io.grpc.MethodDescriptor.generateFullMethodName; + +/** + * + * + *
+ * The service that an application uses to manipulate topics, and to send
+ * messages to a topic.
+ * 
+ */ +@io.grpc.stub.annotations.GrpcGenerated +public final class PublisherGrpc { + + private PublisherGrpc() {} + + public static final java.lang.String SERVICE_NAME = "google.pubsub.v1.Publisher"; + + // Static method descriptors that strictly reflect the proto. + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.Topic, com.google.pubsub.v1.Topic> + getCreateTopicMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "CreateTopic", + requestType = com.google.pubsub.v1.Topic.class, + responseType = com.google.pubsub.v1.Topic.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor + getCreateTopicMethod() { + io.grpc.MethodDescriptor + getCreateTopicMethod; + if ((getCreateTopicMethod = PublisherGrpc.getCreateTopicMethod) == null) { + synchronized (PublisherGrpc.class) { + if ((getCreateTopicMethod = PublisherGrpc.getCreateTopicMethod) == null) { + PublisherGrpc.getCreateTopicMethod = + getCreateTopicMethod = + io.grpc.MethodDescriptor + .newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateTopic")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Topic.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Topic.getDefaultInstance())) + .setSchemaDescriptor(new PublisherMethodDescriptorSupplier("CreateTopic")) + .build(); + } + } + } + return getCreateTopicMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.UpdateTopicRequest, com.google.pubsub.v1.Topic> + getUpdateTopicMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "UpdateTopic", + requestType = com.google.pubsub.v1.UpdateTopicRequest.class, + responseType = com.google.pubsub.v1.Topic.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.UpdateTopicRequest, com.google.pubsub.v1.Topic> + getUpdateTopicMethod() { + io.grpc.MethodDescriptor + getUpdateTopicMethod; + if ((getUpdateTopicMethod = PublisherGrpc.getUpdateTopicMethod) == null) { + synchronized (PublisherGrpc.class) { + if ((getUpdateTopicMethod = PublisherGrpc.getUpdateTopicMethod) == null) { + PublisherGrpc.getUpdateTopicMethod = + getUpdateTopicMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "UpdateTopic")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.UpdateTopicRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Topic.getDefaultInstance())) + .setSchemaDescriptor(new PublisherMethodDescriptorSupplier("UpdateTopic")) + .build(); + } + } + } + return getUpdateTopicMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.PublishRequest, com.google.pubsub.v1.PublishResponse> + getPublishMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "Publish", + requestType = com.google.pubsub.v1.PublishRequest.class, + responseType = com.google.pubsub.v1.PublishResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.PublishRequest, com.google.pubsub.v1.PublishResponse> + getPublishMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.PublishRequest, com.google.pubsub.v1.PublishResponse> + getPublishMethod; + if ((getPublishMethod = PublisherGrpc.getPublishMethod) == null) { + synchronized (PublisherGrpc.class) { + if ((getPublishMethod = PublisherGrpc.getPublishMethod) == null) { + PublisherGrpc.getPublishMethod = + getPublishMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "Publish")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.PublishRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.PublishResponse.getDefaultInstance())) + .setSchemaDescriptor(new PublisherMethodDescriptorSupplier("Publish")) + .build(); + } + } + } + return getPublishMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.GetTopicRequest, com.google.pubsub.v1.Topic> + getGetTopicMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "GetTopic", + requestType = com.google.pubsub.v1.GetTopicRequest.class, + responseType = com.google.pubsub.v1.Topic.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.GetTopicRequest, com.google.pubsub.v1.Topic> + getGetTopicMethod() { + io.grpc.MethodDescriptor + getGetTopicMethod; + if ((getGetTopicMethod = PublisherGrpc.getGetTopicMethod) == null) { + synchronized (PublisherGrpc.class) { + if ((getGetTopicMethod = PublisherGrpc.getGetTopicMethod) == null) { + PublisherGrpc.getGetTopicMethod = + getGetTopicMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetTopic")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.GetTopicRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Topic.getDefaultInstance())) + .setSchemaDescriptor(new PublisherMethodDescriptorSupplier("GetTopic")) + .build(); + } + } + } + return getGetTopicMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListTopicsRequest, com.google.pubsub.v1.ListTopicsResponse> + getListTopicsMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ListTopics", + requestType = com.google.pubsub.v1.ListTopicsRequest.class, + responseType = com.google.pubsub.v1.ListTopicsResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListTopicsRequest, com.google.pubsub.v1.ListTopicsResponse> + getListTopicsMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListTopicsRequest, com.google.pubsub.v1.ListTopicsResponse> + getListTopicsMethod; + if ((getListTopicsMethod = PublisherGrpc.getListTopicsMethod) == null) { + synchronized (PublisherGrpc.class) { + if ((getListTopicsMethod = PublisherGrpc.getListTopicsMethod) == null) { + PublisherGrpc.getListTopicsMethod = + getListTopicsMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListTopics")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListTopicsRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListTopicsResponse.getDefaultInstance())) + .setSchemaDescriptor(new PublisherMethodDescriptorSupplier("ListTopics")) + .build(); + } + } + } + return getListTopicsMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListTopicSubscriptionsRequest, + com.google.pubsub.v1.ListTopicSubscriptionsResponse> + getListTopicSubscriptionsMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ListTopicSubscriptions", + requestType = com.google.pubsub.v1.ListTopicSubscriptionsRequest.class, + responseType = com.google.pubsub.v1.ListTopicSubscriptionsResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListTopicSubscriptionsRequest, + com.google.pubsub.v1.ListTopicSubscriptionsResponse> + getListTopicSubscriptionsMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListTopicSubscriptionsRequest, + com.google.pubsub.v1.ListTopicSubscriptionsResponse> + getListTopicSubscriptionsMethod; + if ((getListTopicSubscriptionsMethod = PublisherGrpc.getListTopicSubscriptionsMethod) == null) { + synchronized (PublisherGrpc.class) { + if ((getListTopicSubscriptionsMethod = PublisherGrpc.getListTopicSubscriptionsMethod) + == null) { + PublisherGrpc.getListTopicSubscriptionsMethod = + getListTopicSubscriptionsMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName( + generateFullMethodName(SERVICE_NAME, "ListTopicSubscriptions")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListTopicSubscriptionsRequest + .getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListTopicSubscriptionsResponse + .getDefaultInstance())) + .setSchemaDescriptor( + new PublisherMethodDescriptorSupplier("ListTopicSubscriptions")) + .build(); + } + } + } + return getListTopicSubscriptionsMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListTopicSnapshotsRequest, + com.google.pubsub.v1.ListTopicSnapshotsResponse> + getListTopicSnapshotsMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ListTopicSnapshots", + requestType = com.google.pubsub.v1.ListTopicSnapshotsRequest.class, + responseType = com.google.pubsub.v1.ListTopicSnapshotsResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListTopicSnapshotsRequest, + com.google.pubsub.v1.ListTopicSnapshotsResponse> + getListTopicSnapshotsMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListTopicSnapshotsRequest, + com.google.pubsub.v1.ListTopicSnapshotsResponse> + getListTopicSnapshotsMethod; + if ((getListTopicSnapshotsMethod = PublisherGrpc.getListTopicSnapshotsMethod) == null) { + synchronized (PublisherGrpc.class) { + if ((getListTopicSnapshotsMethod = PublisherGrpc.getListTopicSnapshotsMethod) == null) { + PublisherGrpc.getListTopicSnapshotsMethod = + getListTopicSnapshotsMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListTopicSnapshots")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListTopicSnapshotsRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListTopicSnapshotsResponse.getDefaultInstance())) + .setSchemaDescriptor( + new PublisherMethodDescriptorSupplier("ListTopicSnapshots")) + .build(); + } + } + } + return getListTopicSnapshotsMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.DeleteTopicRequest, com.google.protobuf.Empty> + getDeleteTopicMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "DeleteTopic", + requestType = com.google.pubsub.v1.DeleteTopicRequest.class, + responseType = com.google.protobuf.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.DeleteTopicRequest, com.google.protobuf.Empty> + getDeleteTopicMethod() { + io.grpc.MethodDescriptor + getDeleteTopicMethod; + if ((getDeleteTopicMethod = PublisherGrpc.getDeleteTopicMethod) == null) { + synchronized (PublisherGrpc.class) { + if ((getDeleteTopicMethod = PublisherGrpc.getDeleteTopicMethod) == null) { + PublisherGrpc.getDeleteTopicMethod = + getDeleteTopicMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteTopic")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.DeleteTopicRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.protobuf.Empty.getDefaultInstance())) + .setSchemaDescriptor(new PublisherMethodDescriptorSupplier("DeleteTopic")) + .build(); + } + } + } + return getDeleteTopicMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.DetachSubscriptionRequest, + com.google.pubsub.v1.DetachSubscriptionResponse> + getDetachSubscriptionMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "DetachSubscription", + requestType = com.google.pubsub.v1.DetachSubscriptionRequest.class, + responseType = com.google.pubsub.v1.DetachSubscriptionResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.DetachSubscriptionRequest, + com.google.pubsub.v1.DetachSubscriptionResponse> + getDetachSubscriptionMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.DetachSubscriptionRequest, + com.google.pubsub.v1.DetachSubscriptionResponse> + getDetachSubscriptionMethod; + if ((getDetachSubscriptionMethod = PublisherGrpc.getDetachSubscriptionMethod) == null) { + synchronized (PublisherGrpc.class) { + if ((getDetachSubscriptionMethod = PublisherGrpc.getDetachSubscriptionMethod) == null) { + PublisherGrpc.getDetachSubscriptionMethod = + getDetachSubscriptionMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DetachSubscription")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.DetachSubscriptionRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.DetachSubscriptionResponse.getDefaultInstance())) + .setSchemaDescriptor( + new PublisherMethodDescriptorSupplier("DetachSubscription")) + .build(); + } + } + } + return getDetachSubscriptionMethod; + } + + /** Creates a new async stub that supports all call types for the service */ + public static PublisherStub newStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public PublisherStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PublisherStub(channel, callOptions); + } + }; + return PublisherStub.newStub(factory, channel); + } + + /** Creates a new blocking-style stub that supports all types of calls on the service */ + public static PublisherBlockingV2Stub newBlockingV2Stub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public PublisherBlockingV2Stub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PublisherBlockingV2Stub(channel, callOptions); + } + }; + return PublisherBlockingV2Stub.newStub(factory, channel); + } + + /** + * Creates a new blocking-style stub that supports unary and streaming output calls on the service + */ + public static PublisherBlockingStub newBlockingStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public PublisherBlockingStub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PublisherBlockingStub(channel, callOptions); + } + }; + return PublisherBlockingStub.newStub(factory, channel); + } + + /** Creates a new ListenableFuture-style stub that supports unary calls on the service */ + public static PublisherFutureStub newFutureStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public PublisherFutureStub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PublisherFutureStub(channel, callOptions); + } + }; + return PublisherFutureStub.newStub(factory, channel); + } + + /** + * + * + *
+   * The service that an application uses to manipulate topics, and to send
+   * messages to a topic.
+   * 
+ */ + public interface AsyncService { + + /** + * + * + *
+     * Creates the given topic with the given name. See the [resource name rules]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * 
+ */ + default void createTopic( + com.google.pubsub.v1.Topic request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getCreateTopicMethod(), responseObserver); + } + + /** + * + * + *
+     * Updates an existing topic by updating the fields specified in the update
+     * mask. Note that certain properties of a topic are not modifiable.
+     * 
+ */ + default void updateTopic( + com.google.pubsub.v1.UpdateTopicRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getUpdateTopicMethod(), responseObserver); + } + + /** + * + * + *
+     * Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic
+     * does not exist.
+     * 
+ */ + default void publish( + com.google.pubsub.v1.PublishRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getPublishMethod(), responseObserver); + } + + /** + * + * + *
+     * Gets the configuration of a topic.
+     * 
+ */ + default void getTopic( + com.google.pubsub.v1.GetTopicRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetTopicMethod(), responseObserver); + } + + /** + * + * + *
+     * Lists matching topics.
+     * 
+ */ + default void listTopics( + com.google.pubsub.v1.ListTopicsRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListTopicsMethod(), responseObserver); + } + + /** + * + * + *
+     * Lists the names of the attached subscriptions on this topic.
+     * 
+ */ + default void listTopicSubscriptions( + com.google.pubsub.v1.ListTopicSubscriptionsRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getListTopicSubscriptionsMethod(), responseObserver); + } + + /** + * + * + *
+     * Lists the names of the snapshots on this topic. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + default void listTopicSnapshots( + com.google.pubsub.v1.ListTopicSnapshotsRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getListTopicSnapshotsMethod(), responseObserver); + } + + /** + * + * + *
+     * Deletes the topic with the given name. Returns `NOT_FOUND` if the topic
+     * does not exist. After a topic is deleted, a new topic may be created with
+     * the same name; this is an entirely new topic with none of the old
+     * configuration or subscriptions. Existing subscriptions to this topic are
+     * not deleted, but their `topic` field is set to `_deleted-topic_`.
+     * 
+ */ + default void deleteTopic( + com.google.pubsub.v1.DeleteTopicRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getDeleteTopicMethod(), responseObserver); + } + + /** + * + * + *
+     * Detaches a subscription from this topic. All messages retained in the
+     * subscription are dropped. Subsequent `Pull` and `StreamingPull` requests
+     * will return FAILED_PRECONDITION. If the subscription is a push
+     * subscription, pushes to the endpoint will stop.
+     * 
+ */ + default void detachSubscription( + com.google.pubsub.v1.DetachSubscriptionRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getDetachSubscriptionMethod(), responseObserver); + } + } + + /** + * Base class for the server implementation of the service Publisher. + * + *
+   * The service that an application uses to manipulate topics, and to send
+   * messages to a topic.
+   * 
+ */ + public abstract static class PublisherImplBase implements io.grpc.BindableService, AsyncService { + + @java.lang.Override + public final io.grpc.ServerServiceDefinition bindService() { + return PublisherGrpc.bindService(this); + } + } + + /** + * A stub to allow clients to do asynchronous rpc calls to service Publisher. + * + *
+   * The service that an application uses to manipulate topics, and to send
+   * messages to a topic.
+   * 
+ */ + public static final class PublisherStub extends io.grpc.stub.AbstractAsyncStub { + private PublisherStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected PublisherStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PublisherStub(channel, callOptions); + } + + /** + * + * + *
+     * Creates the given topic with the given name. See the [resource name rules]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * 
+ */ + public void createTopic( + com.google.pubsub.v1.Topic request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getCreateTopicMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Updates an existing topic by updating the fields specified in the update
+     * mask. Note that certain properties of a topic are not modifiable.
+     * 
+ */ + public void updateTopic( + com.google.pubsub.v1.UpdateTopicRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getUpdateTopicMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic
+     * does not exist.
+     * 
+ */ + public void publish( + com.google.pubsub.v1.PublishRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getPublishMethod(), getCallOptions()), request, responseObserver); + } + + /** + * + * + *
+     * Gets the configuration of a topic.
+     * 
+ */ + public void getTopic( + com.google.pubsub.v1.GetTopicRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getGetTopicMethod(), getCallOptions()), request, responseObserver); + } + + /** + * + * + *
+     * Lists matching topics.
+     * 
+ */ + public void listTopics( + com.google.pubsub.v1.ListTopicsRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getListTopicsMethod(), getCallOptions()), request, responseObserver); + } + + /** + * + * + *
+     * Lists the names of the attached subscriptions on this topic.
+     * 
+ */ + public void listTopicSubscriptions( + com.google.pubsub.v1.ListTopicSubscriptionsRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getListTopicSubscriptionsMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Lists the names of the snapshots on this topic. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public void listTopicSnapshots( + com.google.pubsub.v1.ListTopicSnapshotsRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getListTopicSnapshotsMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Deletes the topic with the given name. Returns `NOT_FOUND` if the topic
+     * does not exist. After a topic is deleted, a new topic may be created with
+     * the same name; this is an entirely new topic with none of the old
+     * configuration or subscriptions. Existing subscriptions to this topic are
+     * not deleted, but their `topic` field is set to `_deleted-topic_`.
+     * 
+ */ + public void deleteTopic( + com.google.pubsub.v1.DeleteTopicRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getDeleteTopicMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Detaches a subscription from this topic. All messages retained in the
+     * subscription are dropped. Subsequent `Pull` and `StreamingPull` requests
+     * will return FAILED_PRECONDITION. If the subscription is a push
+     * subscription, pushes to the endpoint will stop.
+     * 
+ */ + public void detachSubscription( + com.google.pubsub.v1.DetachSubscriptionRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getDetachSubscriptionMethod(), getCallOptions()), + request, + responseObserver); + } + } + + /** + * A stub to allow clients to do synchronous rpc calls to service Publisher. + * + *
+   * The service that an application uses to manipulate topics, and to send
+   * messages to a topic.
+   * 
+ */ + public static final class PublisherBlockingV2Stub + extends io.grpc.stub.AbstractBlockingStub { + private PublisherBlockingV2Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected PublisherBlockingV2Stub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PublisherBlockingV2Stub(channel, callOptions); + } + + /** + * + * + *
+     * Creates the given topic with the given name. See the [resource name rules]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * 
+ */ + public com.google.pubsub.v1.Topic createTopic(com.google.pubsub.v1.Topic request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCreateTopicMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Updates an existing topic by updating the fields specified in the update
+     * mask. Note that certain properties of a topic are not modifiable.
+     * 
+ */ + public com.google.pubsub.v1.Topic updateTopic(com.google.pubsub.v1.UpdateTopicRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getUpdateTopicMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic
+     * does not exist.
+     * 
+ */ + public com.google.pubsub.v1.PublishResponse publish(com.google.pubsub.v1.PublishRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getPublishMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Gets the configuration of a topic.
+     * 
+ */ + public com.google.pubsub.v1.Topic getTopic(com.google.pubsub.v1.GetTopicRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getGetTopicMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists matching topics.
+     * 
+ */ + public com.google.pubsub.v1.ListTopicsResponse listTopics( + com.google.pubsub.v1.ListTopicsRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getListTopicsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists the names of the attached subscriptions on this topic.
+     * 
+ */ + public com.google.pubsub.v1.ListTopicSubscriptionsResponse listTopicSubscriptions( + com.google.pubsub.v1.ListTopicSubscriptionsRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getListTopicSubscriptionsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists the names of the snapshots on this topic. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public com.google.pubsub.v1.ListTopicSnapshotsResponse listTopicSnapshots( + com.google.pubsub.v1.ListTopicSnapshotsRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getListTopicSnapshotsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Deletes the topic with the given name. Returns `NOT_FOUND` if the topic
+     * does not exist. After a topic is deleted, a new topic may be created with
+     * the same name; this is an entirely new topic with none of the old
+     * configuration or subscriptions. Existing subscriptions to this topic are
+     * not deleted, but their `topic` field is set to `_deleted-topic_`.
+     * 
+ */ + public com.google.protobuf.Empty deleteTopic(com.google.pubsub.v1.DeleteTopicRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getDeleteTopicMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Detaches a subscription from this topic. All messages retained in the
+     * subscription are dropped. Subsequent `Pull` and `StreamingPull` requests
+     * will return FAILED_PRECONDITION. If the subscription is a push
+     * subscription, pushes to the endpoint will stop.
+     * 
+ */ + public com.google.pubsub.v1.DetachSubscriptionResponse detachSubscription( + com.google.pubsub.v1.DetachSubscriptionRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getDetachSubscriptionMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do limited synchronous rpc calls to service Publisher. + * + *
+   * The service that an application uses to manipulate topics, and to send
+   * messages to a topic.
+   * 
+ */ + public static final class PublisherBlockingStub + extends io.grpc.stub.AbstractBlockingStub { + private PublisherBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected PublisherBlockingStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PublisherBlockingStub(channel, callOptions); + } + + /** + * + * + *
+     * Creates the given topic with the given name. See the [resource name rules]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * 
+ */ + public com.google.pubsub.v1.Topic createTopic(com.google.pubsub.v1.Topic request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCreateTopicMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Updates an existing topic by updating the fields specified in the update
+     * mask. Note that certain properties of a topic are not modifiable.
+     * 
+ */ + public com.google.pubsub.v1.Topic updateTopic(com.google.pubsub.v1.UpdateTopicRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getUpdateTopicMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic
+     * does not exist.
+     * 
+ */ + public com.google.pubsub.v1.PublishResponse publish( + com.google.pubsub.v1.PublishRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getPublishMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Gets the configuration of a topic.
+     * 
+ */ + public com.google.pubsub.v1.Topic getTopic(com.google.pubsub.v1.GetTopicRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getGetTopicMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists matching topics.
+     * 
+ */ + public com.google.pubsub.v1.ListTopicsResponse listTopics( + com.google.pubsub.v1.ListTopicsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListTopicsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists the names of the attached subscriptions on this topic.
+     * 
+ */ + public com.google.pubsub.v1.ListTopicSubscriptionsResponse listTopicSubscriptions( + com.google.pubsub.v1.ListTopicSubscriptionsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListTopicSubscriptionsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists the names of the snapshots on this topic. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public com.google.pubsub.v1.ListTopicSnapshotsResponse listTopicSnapshots( + com.google.pubsub.v1.ListTopicSnapshotsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListTopicSnapshotsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Deletes the topic with the given name. Returns `NOT_FOUND` if the topic
+     * does not exist. After a topic is deleted, a new topic may be created with
+     * the same name; this is an entirely new topic with none of the old
+     * configuration or subscriptions. Existing subscriptions to this topic are
+     * not deleted, but their `topic` field is set to `_deleted-topic_`.
+     * 
+ */ + public com.google.protobuf.Empty deleteTopic(com.google.pubsub.v1.DeleteTopicRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getDeleteTopicMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Detaches a subscription from this topic. All messages retained in the
+     * subscription are dropped. Subsequent `Pull` and `StreamingPull` requests
+     * will return FAILED_PRECONDITION. If the subscription is a push
+     * subscription, pushes to the endpoint will stop.
+     * 
+ */ + public com.google.pubsub.v1.DetachSubscriptionResponse detachSubscription( + com.google.pubsub.v1.DetachSubscriptionRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getDetachSubscriptionMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do ListenableFuture-style rpc calls to service Publisher. + * + *
+   * The service that an application uses to manipulate topics, and to send
+   * messages to a topic.
+   * 
+ */ + public static final class PublisherFutureStub + extends io.grpc.stub.AbstractFutureStub { + private PublisherFutureStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected PublisherFutureStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PublisherFutureStub(channel, callOptions); + } + + /** + * + * + *
+     * Creates the given topic with the given name. See the [resource name rules]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + createTopic(com.google.pubsub.v1.Topic request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getCreateTopicMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Updates an existing topic by updating the fields specified in the update
+     * mask. Note that certain properties of a topic are not modifiable.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + updateTopic(com.google.pubsub.v1.UpdateTopicRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getUpdateTopicMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic
+     * does not exist.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + publish(com.google.pubsub.v1.PublishRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getPublishMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Gets the configuration of a topic.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture getTopic( + com.google.pubsub.v1.GetTopicRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getGetTopicMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Lists matching topics.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.pubsub.v1.ListTopicsResponse> + listTopics(com.google.pubsub.v1.ListTopicsRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getListTopicsMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Lists the names of the attached subscriptions on this topic.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.pubsub.v1.ListTopicSubscriptionsResponse> + listTopicSubscriptions(com.google.pubsub.v1.ListTopicSubscriptionsRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getListTopicSubscriptionsMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Lists the names of the snapshots on this topic. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.pubsub.v1.ListTopicSnapshotsResponse> + listTopicSnapshots(com.google.pubsub.v1.ListTopicSnapshotsRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getListTopicSnapshotsMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Deletes the topic with the given name. Returns `NOT_FOUND` if the topic
+     * does not exist. After a topic is deleted, a new topic may be created with
+     * the same name; this is an entirely new topic with none of the old
+     * configuration or subscriptions. Existing subscriptions to this topic are
+     * not deleted, but their `topic` field is set to `_deleted-topic_`.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + deleteTopic(com.google.pubsub.v1.DeleteTopicRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getDeleteTopicMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Detaches a subscription from this topic. All messages retained in the
+     * subscription are dropped. Subsequent `Pull` and `StreamingPull` requests
+     * will return FAILED_PRECONDITION. If the subscription is a push
+     * subscription, pushes to the endpoint will stop.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.pubsub.v1.DetachSubscriptionResponse> + detachSubscription(com.google.pubsub.v1.DetachSubscriptionRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getDetachSubscriptionMethod(), getCallOptions()), request); + } + } + + private static final int METHODID_CREATE_TOPIC = 0; + private static final int METHODID_UPDATE_TOPIC = 1; + private static final int METHODID_PUBLISH = 2; + private static final int METHODID_GET_TOPIC = 3; + private static final int METHODID_LIST_TOPICS = 4; + private static final int METHODID_LIST_TOPIC_SUBSCRIPTIONS = 5; + private static final int METHODID_LIST_TOPIC_SNAPSHOTS = 6; + private static final int METHODID_DELETE_TOPIC = 7; + private static final int METHODID_DETACH_SUBSCRIPTION = 8; + + private static final class MethodHandlers + implements io.grpc.stub.ServerCalls.UnaryMethod, + io.grpc.stub.ServerCalls.ServerStreamingMethod, + io.grpc.stub.ServerCalls.ClientStreamingMethod, + io.grpc.stub.ServerCalls.BidiStreamingMethod { + private final AsyncService serviceImpl; + private final int methodId; + + MethodHandlers(AsyncService serviceImpl, int methodId) { + this.serviceImpl = serviceImpl; + this.methodId = methodId; + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + case METHODID_CREATE_TOPIC: + serviceImpl.createTopic( + (com.google.pubsub.v1.Topic) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_UPDATE_TOPIC: + serviceImpl.updateTopic( + (com.google.pubsub.v1.UpdateTopicRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_PUBLISH: + serviceImpl.publish( + (com.google.pubsub.v1.PublishRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_GET_TOPIC: + serviceImpl.getTopic( + (com.google.pubsub.v1.GetTopicRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_LIST_TOPICS: + serviceImpl.listTopics( + (com.google.pubsub.v1.ListTopicsRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_LIST_TOPIC_SUBSCRIPTIONS: + serviceImpl.listTopicSubscriptions( + (com.google.pubsub.v1.ListTopicSubscriptionsRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_LIST_TOPIC_SNAPSHOTS: + serviceImpl.listTopicSnapshots( + (com.google.pubsub.v1.ListTopicSnapshotsRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_DELETE_TOPIC: + serviceImpl.deleteTopic( + (com.google.pubsub.v1.DeleteTopicRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_DETACH_SUBSCRIPTION: + serviceImpl.detachSubscription( + (com.google.pubsub.v1.DetachSubscriptionRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + default: + throw new AssertionError(); + } + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public io.grpc.stub.StreamObserver invoke( + io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + default: + throw new AssertionError(); + } + } + } + + public static final io.grpc.ServerServiceDefinition bindService(AsyncService service) { + return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) + .addMethod( + getCreateTopicMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers( + service, METHODID_CREATE_TOPIC))) + .addMethod( + getUpdateTopicMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.UpdateTopicRequest, com.google.pubsub.v1.Topic>( + service, METHODID_UPDATE_TOPIC))) + .addMethod( + getPublishMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.PublishRequest, com.google.pubsub.v1.PublishResponse>( + service, METHODID_PUBLISH))) + .addMethod( + getGetTopicMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.GetTopicRequest, com.google.pubsub.v1.Topic>( + service, METHODID_GET_TOPIC))) + .addMethod( + getListTopicsMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.ListTopicsRequest, + com.google.pubsub.v1.ListTopicsResponse>(service, METHODID_LIST_TOPICS))) + .addMethod( + getListTopicSubscriptionsMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.ListTopicSubscriptionsRequest, + com.google.pubsub.v1.ListTopicSubscriptionsResponse>( + service, METHODID_LIST_TOPIC_SUBSCRIPTIONS))) + .addMethod( + getListTopicSnapshotsMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.ListTopicSnapshotsRequest, + com.google.pubsub.v1.ListTopicSnapshotsResponse>( + service, METHODID_LIST_TOPIC_SNAPSHOTS))) + .addMethod( + getDeleteTopicMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.DeleteTopicRequest, com.google.protobuf.Empty>( + service, METHODID_DELETE_TOPIC))) + .addMethod( + getDetachSubscriptionMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.DetachSubscriptionRequest, + com.google.pubsub.v1.DetachSubscriptionResponse>( + service, METHODID_DETACH_SUBSCRIPTION))) + .build(); + } + + private abstract static class PublisherBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoFileDescriptorSupplier, + io.grpc.protobuf.ProtoServiceDescriptorSupplier { + PublisherBaseDescriptorSupplier() {} + + @java.lang.Override + public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() { + return com.google.pubsub.v1.PubsubProto.getDescriptor(); + } + + @java.lang.Override + public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() { + return getFileDescriptor().findServiceByName("Publisher"); + } + } + + private static final class PublisherFileDescriptorSupplier + extends PublisherBaseDescriptorSupplier { + PublisherFileDescriptorSupplier() {} + } + + private static final class PublisherMethodDescriptorSupplier + extends PublisherBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoMethodDescriptorSupplier { + private final java.lang.String methodName; + + PublisherMethodDescriptorSupplier(java.lang.String methodName) { + this.methodName = methodName; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() { + return getServiceDescriptor().findMethodByName(methodName); + } + } + + private static volatile io.grpc.ServiceDescriptor serviceDescriptor; + + public static io.grpc.ServiceDescriptor getServiceDescriptor() { + io.grpc.ServiceDescriptor result = serviceDescriptor; + if (result == null) { + synchronized (PublisherGrpc.class) { + result = serviceDescriptor; + if (result == null) { + serviceDescriptor = + result = + io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME) + .setSchemaDescriptor(new PublisherFileDescriptorSupplier()) + .addMethod(getCreateTopicMethod()) + .addMethod(getUpdateTopicMethod()) + .addMethod(getPublishMethod()) + .addMethod(getGetTopicMethod()) + .addMethod(getListTopicsMethod()) + .addMethod(getListTopicSubscriptionsMethod()) + .addMethod(getListTopicSnapshotsMethod()) + .addMethod(getDeleteTopicMethod()) + .addMethod(getDetachSubscriptionMethod()) + .build(); + } + } + } + return result; + } +} diff --git a/java-pubsub/grpc-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaServiceGrpc.java b/java-pubsub/grpc-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaServiceGrpc.java new file mode 100644 index 000000000000..d08c72904fcc --- /dev/null +++ b/java-pubsub/grpc-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaServiceGrpc.java @@ -0,0 +1,1537 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +package com.google.pubsub.v1; + +import static io.grpc.MethodDescriptor.generateFullMethodName; + +/** + * + * + *
+ * Service for doing schema-related operations.
+ * 
+ */ +@io.grpc.stub.annotations.GrpcGenerated +public final class SchemaServiceGrpc { + + private SchemaServiceGrpc() {} + + public static final java.lang.String SERVICE_NAME = "google.pubsub.v1.SchemaService"; + + // Static method descriptors that strictly reflect the proto. + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.CreateSchemaRequest, com.google.pubsub.v1.Schema> + getCreateSchemaMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "CreateSchema", + requestType = com.google.pubsub.v1.CreateSchemaRequest.class, + responseType = com.google.pubsub.v1.Schema.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.CreateSchemaRequest, com.google.pubsub.v1.Schema> + getCreateSchemaMethod() { + io.grpc.MethodDescriptor + getCreateSchemaMethod; + if ((getCreateSchemaMethod = SchemaServiceGrpc.getCreateSchemaMethod) == null) { + synchronized (SchemaServiceGrpc.class) { + if ((getCreateSchemaMethod = SchemaServiceGrpc.getCreateSchemaMethod) == null) { + SchemaServiceGrpc.getCreateSchemaMethod = + getCreateSchemaMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateSchema")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.CreateSchemaRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Schema.getDefaultInstance())) + .setSchemaDescriptor( + new SchemaServiceMethodDescriptorSupplier("CreateSchema")) + .build(); + } + } + } + return getCreateSchemaMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.GetSchemaRequest, com.google.pubsub.v1.Schema> + getGetSchemaMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "GetSchema", + requestType = com.google.pubsub.v1.GetSchemaRequest.class, + responseType = com.google.pubsub.v1.Schema.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.GetSchemaRequest, com.google.pubsub.v1.Schema> + getGetSchemaMethod() { + io.grpc.MethodDescriptor + getGetSchemaMethod; + if ((getGetSchemaMethod = SchemaServiceGrpc.getGetSchemaMethod) == null) { + synchronized (SchemaServiceGrpc.class) { + if ((getGetSchemaMethod = SchemaServiceGrpc.getGetSchemaMethod) == null) { + SchemaServiceGrpc.getGetSchemaMethod = + getGetSchemaMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetSchema")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.GetSchemaRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Schema.getDefaultInstance())) + .setSchemaDescriptor(new SchemaServiceMethodDescriptorSupplier("GetSchema")) + .build(); + } + } + } + return getGetSchemaMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListSchemasRequest, com.google.pubsub.v1.ListSchemasResponse> + getListSchemasMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ListSchemas", + requestType = com.google.pubsub.v1.ListSchemasRequest.class, + responseType = com.google.pubsub.v1.ListSchemasResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListSchemasRequest, com.google.pubsub.v1.ListSchemasResponse> + getListSchemasMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListSchemasRequest, com.google.pubsub.v1.ListSchemasResponse> + getListSchemasMethod; + if ((getListSchemasMethod = SchemaServiceGrpc.getListSchemasMethod) == null) { + synchronized (SchemaServiceGrpc.class) { + if ((getListSchemasMethod = SchemaServiceGrpc.getListSchemasMethod) == null) { + SchemaServiceGrpc.getListSchemasMethod = + getListSchemasMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListSchemas")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListSchemasRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListSchemasResponse.getDefaultInstance())) + .setSchemaDescriptor(new SchemaServiceMethodDescriptorSupplier("ListSchemas")) + .build(); + } + } + } + return getListSchemasMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListSchemaRevisionsRequest, + com.google.pubsub.v1.ListSchemaRevisionsResponse> + getListSchemaRevisionsMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ListSchemaRevisions", + requestType = com.google.pubsub.v1.ListSchemaRevisionsRequest.class, + responseType = com.google.pubsub.v1.ListSchemaRevisionsResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListSchemaRevisionsRequest, + com.google.pubsub.v1.ListSchemaRevisionsResponse> + getListSchemaRevisionsMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListSchemaRevisionsRequest, + com.google.pubsub.v1.ListSchemaRevisionsResponse> + getListSchemaRevisionsMethod; + if ((getListSchemaRevisionsMethod = SchemaServiceGrpc.getListSchemaRevisionsMethod) == null) { + synchronized (SchemaServiceGrpc.class) { + if ((getListSchemaRevisionsMethod = SchemaServiceGrpc.getListSchemaRevisionsMethod) + == null) { + SchemaServiceGrpc.getListSchemaRevisionsMethod = + getListSchemaRevisionsMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName( + generateFullMethodName(SERVICE_NAME, "ListSchemaRevisions")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListSchemaRevisionsRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListSchemaRevisionsResponse + .getDefaultInstance())) + .setSchemaDescriptor( + new SchemaServiceMethodDescriptorSupplier("ListSchemaRevisions")) + .build(); + } + } + } + return getListSchemaRevisionsMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.CommitSchemaRequest, com.google.pubsub.v1.Schema> + getCommitSchemaMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "CommitSchema", + requestType = com.google.pubsub.v1.CommitSchemaRequest.class, + responseType = com.google.pubsub.v1.Schema.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.CommitSchemaRequest, com.google.pubsub.v1.Schema> + getCommitSchemaMethod() { + io.grpc.MethodDescriptor + getCommitSchemaMethod; + if ((getCommitSchemaMethod = SchemaServiceGrpc.getCommitSchemaMethod) == null) { + synchronized (SchemaServiceGrpc.class) { + if ((getCommitSchemaMethod = SchemaServiceGrpc.getCommitSchemaMethod) == null) { + SchemaServiceGrpc.getCommitSchemaMethod = + getCommitSchemaMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CommitSchema")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.CommitSchemaRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Schema.getDefaultInstance())) + .setSchemaDescriptor( + new SchemaServiceMethodDescriptorSupplier("CommitSchema")) + .build(); + } + } + } + return getCommitSchemaMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.RollbackSchemaRequest, com.google.pubsub.v1.Schema> + getRollbackSchemaMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "RollbackSchema", + requestType = com.google.pubsub.v1.RollbackSchemaRequest.class, + responseType = com.google.pubsub.v1.Schema.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.RollbackSchemaRequest, com.google.pubsub.v1.Schema> + getRollbackSchemaMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.RollbackSchemaRequest, com.google.pubsub.v1.Schema> + getRollbackSchemaMethod; + if ((getRollbackSchemaMethod = SchemaServiceGrpc.getRollbackSchemaMethod) == null) { + synchronized (SchemaServiceGrpc.class) { + if ((getRollbackSchemaMethod = SchemaServiceGrpc.getRollbackSchemaMethod) == null) { + SchemaServiceGrpc.getRollbackSchemaMethod = + getRollbackSchemaMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RollbackSchema")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.RollbackSchemaRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Schema.getDefaultInstance())) + .setSchemaDescriptor( + new SchemaServiceMethodDescriptorSupplier("RollbackSchema")) + .build(); + } + } + } + return getRollbackSchemaMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.DeleteSchemaRevisionRequest, com.google.pubsub.v1.Schema> + getDeleteSchemaRevisionMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "DeleteSchemaRevision", + requestType = com.google.pubsub.v1.DeleteSchemaRevisionRequest.class, + responseType = com.google.pubsub.v1.Schema.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.DeleteSchemaRevisionRequest, com.google.pubsub.v1.Schema> + getDeleteSchemaRevisionMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.DeleteSchemaRevisionRequest, com.google.pubsub.v1.Schema> + getDeleteSchemaRevisionMethod; + if ((getDeleteSchemaRevisionMethod = SchemaServiceGrpc.getDeleteSchemaRevisionMethod) == null) { + synchronized (SchemaServiceGrpc.class) { + if ((getDeleteSchemaRevisionMethod = SchemaServiceGrpc.getDeleteSchemaRevisionMethod) + == null) { + SchemaServiceGrpc.getDeleteSchemaRevisionMethod = + getDeleteSchemaRevisionMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName( + generateFullMethodName(SERVICE_NAME, "DeleteSchemaRevision")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.DeleteSchemaRevisionRequest + .getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Schema.getDefaultInstance())) + .setSchemaDescriptor( + new SchemaServiceMethodDescriptorSupplier("DeleteSchemaRevision")) + .build(); + } + } + } + return getDeleteSchemaRevisionMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.DeleteSchemaRequest, com.google.protobuf.Empty> + getDeleteSchemaMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "DeleteSchema", + requestType = com.google.pubsub.v1.DeleteSchemaRequest.class, + responseType = com.google.protobuf.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.DeleteSchemaRequest, com.google.protobuf.Empty> + getDeleteSchemaMethod() { + io.grpc.MethodDescriptor + getDeleteSchemaMethod; + if ((getDeleteSchemaMethod = SchemaServiceGrpc.getDeleteSchemaMethod) == null) { + synchronized (SchemaServiceGrpc.class) { + if ((getDeleteSchemaMethod = SchemaServiceGrpc.getDeleteSchemaMethod) == null) { + SchemaServiceGrpc.getDeleteSchemaMethod = + getDeleteSchemaMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteSchema")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.DeleteSchemaRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.protobuf.Empty.getDefaultInstance())) + .setSchemaDescriptor( + new SchemaServiceMethodDescriptorSupplier("DeleteSchema")) + .build(); + } + } + } + return getDeleteSchemaMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.ValidateSchemaRequest, com.google.pubsub.v1.ValidateSchemaResponse> + getValidateSchemaMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ValidateSchema", + requestType = com.google.pubsub.v1.ValidateSchemaRequest.class, + responseType = com.google.pubsub.v1.ValidateSchemaResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.ValidateSchemaRequest, com.google.pubsub.v1.ValidateSchemaResponse> + getValidateSchemaMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.ValidateSchemaRequest, com.google.pubsub.v1.ValidateSchemaResponse> + getValidateSchemaMethod; + if ((getValidateSchemaMethod = SchemaServiceGrpc.getValidateSchemaMethod) == null) { + synchronized (SchemaServiceGrpc.class) { + if ((getValidateSchemaMethod = SchemaServiceGrpc.getValidateSchemaMethod) == null) { + SchemaServiceGrpc.getValidateSchemaMethod = + getValidateSchemaMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ValidateSchema")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ValidateSchemaRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ValidateSchemaResponse.getDefaultInstance())) + .setSchemaDescriptor( + new SchemaServiceMethodDescriptorSupplier("ValidateSchema")) + .build(); + } + } + } + return getValidateSchemaMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.ValidateMessageRequest, com.google.pubsub.v1.ValidateMessageResponse> + getValidateMessageMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ValidateMessage", + requestType = com.google.pubsub.v1.ValidateMessageRequest.class, + responseType = com.google.pubsub.v1.ValidateMessageResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.ValidateMessageRequest, com.google.pubsub.v1.ValidateMessageResponse> + getValidateMessageMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.ValidateMessageRequest, + com.google.pubsub.v1.ValidateMessageResponse> + getValidateMessageMethod; + if ((getValidateMessageMethod = SchemaServiceGrpc.getValidateMessageMethod) == null) { + synchronized (SchemaServiceGrpc.class) { + if ((getValidateMessageMethod = SchemaServiceGrpc.getValidateMessageMethod) == null) { + SchemaServiceGrpc.getValidateMessageMethod = + getValidateMessageMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ValidateMessage")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ValidateMessageRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ValidateMessageResponse.getDefaultInstance())) + .setSchemaDescriptor( + new SchemaServiceMethodDescriptorSupplier("ValidateMessage")) + .build(); + } + } + } + return getValidateMessageMethod; + } + + /** Creates a new async stub that supports all call types for the service */ + public static SchemaServiceStub newStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SchemaServiceStub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SchemaServiceStub(channel, callOptions); + } + }; + return SchemaServiceStub.newStub(factory, channel); + } + + /** Creates a new blocking-style stub that supports all types of calls on the service */ + public static SchemaServiceBlockingV2Stub newBlockingV2Stub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SchemaServiceBlockingV2Stub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SchemaServiceBlockingV2Stub(channel, callOptions); + } + }; + return SchemaServiceBlockingV2Stub.newStub(factory, channel); + } + + /** + * Creates a new blocking-style stub that supports unary and streaming output calls on the service + */ + public static SchemaServiceBlockingStub newBlockingStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SchemaServiceBlockingStub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SchemaServiceBlockingStub(channel, callOptions); + } + }; + return SchemaServiceBlockingStub.newStub(factory, channel); + } + + /** Creates a new ListenableFuture-style stub that supports unary calls on the service */ + public static SchemaServiceFutureStub newFutureStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SchemaServiceFutureStub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SchemaServiceFutureStub(channel, callOptions); + } + }; + return SchemaServiceFutureStub.newStub(factory, channel); + } + + /** + * + * + *
+   * Service for doing schema-related operations.
+   * 
+ */ + public interface AsyncService { + + /** + * + * + *
+     * Creates a schema.
+     * 
+ */ + default void createSchema( + com.google.pubsub.v1.CreateSchemaRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getCreateSchemaMethod(), responseObserver); + } + + /** + * + * + *
+     * Gets a schema.
+     * 
+ */ + default void getSchema( + com.google.pubsub.v1.GetSchemaRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetSchemaMethod(), responseObserver); + } + + /** + * + * + *
+     * Lists schemas in a project.
+     * 
+ */ + default void listSchemas( + com.google.pubsub.v1.ListSchemasRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getListSchemasMethod(), responseObserver); + } + + /** + * + * + *
+     * Lists all schema revisions for the named schema.
+     * 
+ */ + default void listSchemaRevisions( + com.google.pubsub.v1.ListSchemaRevisionsRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getListSchemaRevisionsMethod(), responseObserver); + } + + /** + * + * + *
+     * Commits a new schema revision to an existing schema.
+     * 
+ */ + default void commitSchema( + com.google.pubsub.v1.CommitSchemaRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getCommitSchemaMethod(), responseObserver); + } + + /** + * + * + *
+     * Creates a new schema revision that is a copy of the provided revision_id.
+     * 
+ */ + default void rollbackSchema( + com.google.pubsub.v1.RollbackSchemaRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getRollbackSchemaMethod(), responseObserver); + } + + /** + * + * + *
+     * Deletes a specific schema revision.
+     * 
+ */ + default void deleteSchemaRevision( + com.google.pubsub.v1.DeleteSchemaRevisionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getDeleteSchemaRevisionMethod(), responseObserver); + } + + /** + * + * + *
+     * Deletes a schema.
+     * 
+ */ + default void deleteSchema( + com.google.pubsub.v1.DeleteSchemaRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getDeleteSchemaMethod(), responseObserver); + } + + /** + * + * + *
+     * Validates a schema.
+     * 
+ */ + default void validateSchema( + com.google.pubsub.v1.ValidateSchemaRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getValidateSchemaMethod(), responseObserver); + } + + /** + * + * + *
+     * Validates a message against a schema.
+     * 
+ */ + default void validateMessage( + com.google.pubsub.v1.ValidateMessageRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getValidateMessageMethod(), responseObserver); + } + } + + /** + * Base class for the server implementation of the service SchemaService. + * + *
+   * Service for doing schema-related operations.
+   * 
+ */ + public abstract static class SchemaServiceImplBase + implements io.grpc.BindableService, AsyncService { + + @java.lang.Override + public final io.grpc.ServerServiceDefinition bindService() { + return SchemaServiceGrpc.bindService(this); + } + } + + /** + * A stub to allow clients to do asynchronous rpc calls to service SchemaService. + * + *
+   * Service for doing schema-related operations.
+   * 
+ */ + public static final class SchemaServiceStub + extends io.grpc.stub.AbstractAsyncStub { + private SchemaServiceStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SchemaServiceStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SchemaServiceStub(channel, callOptions); + } + + /** + * + * + *
+     * Creates a schema.
+     * 
+ */ + public void createSchema( + com.google.pubsub.v1.CreateSchemaRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getCreateSchemaMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Gets a schema.
+     * 
+ */ + public void getSchema( + com.google.pubsub.v1.GetSchemaRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getGetSchemaMethod(), getCallOptions()), request, responseObserver); + } + + /** + * + * + *
+     * Lists schemas in a project.
+     * 
+ */ + public void listSchemas( + com.google.pubsub.v1.ListSchemasRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getListSchemasMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Lists all schema revisions for the named schema.
+     * 
+ */ + public void listSchemaRevisions( + com.google.pubsub.v1.ListSchemaRevisionsRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getListSchemaRevisionsMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Commits a new schema revision to an existing schema.
+     * 
+ */ + public void commitSchema( + com.google.pubsub.v1.CommitSchemaRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getCommitSchemaMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Creates a new schema revision that is a copy of the provided revision_id.
+     * 
+ */ + public void rollbackSchema( + com.google.pubsub.v1.RollbackSchemaRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getRollbackSchemaMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Deletes a specific schema revision.
+     * 
+ */ + public void deleteSchemaRevision( + com.google.pubsub.v1.DeleteSchemaRevisionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getDeleteSchemaRevisionMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Deletes a schema.
+     * 
+ */ + public void deleteSchema( + com.google.pubsub.v1.DeleteSchemaRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getDeleteSchemaMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Validates a schema.
+     * 
+ */ + public void validateSchema( + com.google.pubsub.v1.ValidateSchemaRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getValidateSchemaMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Validates a message against a schema.
+     * 
+ */ + public void validateMessage( + com.google.pubsub.v1.ValidateMessageRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getValidateMessageMethod(), getCallOptions()), + request, + responseObserver); + } + } + + /** + * A stub to allow clients to do synchronous rpc calls to service SchemaService. + * + *
+   * Service for doing schema-related operations.
+   * 
+ */ + public static final class SchemaServiceBlockingV2Stub + extends io.grpc.stub.AbstractBlockingStub { + private SchemaServiceBlockingV2Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SchemaServiceBlockingV2Stub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SchemaServiceBlockingV2Stub(channel, callOptions); + } + + /** + * + * + *
+     * Creates a schema.
+     * 
+ */ + public com.google.pubsub.v1.Schema createSchema( + com.google.pubsub.v1.CreateSchemaRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCreateSchemaMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Gets a schema.
+     * 
+ */ + public com.google.pubsub.v1.Schema getSchema(com.google.pubsub.v1.GetSchemaRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getGetSchemaMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists schemas in a project.
+     * 
+ */ + public com.google.pubsub.v1.ListSchemasResponse listSchemas( + com.google.pubsub.v1.ListSchemasRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getListSchemasMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists all schema revisions for the named schema.
+     * 
+ */ + public com.google.pubsub.v1.ListSchemaRevisionsResponse listSchemaRevisions( + com.google.pubsub.v1.ListSchemaRevisionsRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getListSchemaRevisionsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Commits a new schema revision to an existing schema.
+     * 
+ */ + public com.google.pubsub.v1.Schema commitSchema( + com.google.pubsub.v1.CommitSchemaRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCommitSchemaMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Creates a new schema revision that is a copy of the provided revision_id.
+     * 
+ */ + public com.google.pubsub.v1.Schema rollbackSchema( + com.google.pubsub.v1.RollbackSchemaRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getRollbackSchemaMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Deletes a specific schema revision.
+     * 
+ */ + public com.google.pubsub.v1.Schema deleteSchemaRevision( + com.google.pubsub.v1.DeleteSchemaRevisionRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getDeleteSchemaRevisionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Deletes a schema.
+     * 
+ */ + public com.google.protobuf.Empty deleteSchema(com.google.pubsub.v1.DeleteSchemaRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getDeleteSchemaMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Validates a schema.
+     * 
+ */ + public com.google.pubsub.v1.ValidateSchemaResponse validateSchema( + com.google.pubsub.v1.ValidateSchemaRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getValidateSchemaMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Validates a message against a schema.
+     * 
+ */ + public com.google.pubsub.v1.ValidateMessageResponse validateMessage( + com.google.pubsub.v1.ValidateMessageRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getValidateMessageMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do limited synchronous rpc calls to service SchemaService. + * + *
+   * Service for doing schema-related operations.
+   * 
+ */ + public static final class SchemaServiceBlockingStub + extends io.grpc.stub.AbstractBlockingStub { + private SchemaServiceBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SchemaServiceBlockingStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SchemaServiceBlockingStub(channel, callOptions); + } + + /** + * + * + *
+     * Creates a schema.
+     * 
+ */ + public com.google.pubsub.v1.Schema createSchema( + com.google.pubsub.v1.CreateSchemaRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCreateSchemaMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Gets a schema.
+     * 
+ */ + public com.google.pubsub.v1.Schema getSchema(com.google.pubsub.v1.GetSchemaRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getGetSchemaMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists schemas in a project.
+     * 
+ */ + public com.google.pubsub.v1.ListSchemasResponse listSchemas( + com.google.pubsub.v1.ListSchemasRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListSchemasMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists all schema revisions for the named schema.
+     * 
+ */ + public com.google.pubsub.v1.ListSchemaRevisionsResponse listSchemaRevisions( + com.google.pubsub.v1.ListSchemaRevisionsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListSchemaRevisionsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Commits a new schema revision to an existing schema.
+     * 
+ */ + public com.google.pubsub.v1.Schema commitSchema( + com.google.pubsub.v1.CommitSchemaRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCommitSchemaMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Creates a new schema revision that is a copy of the provided revision_id.
+     * 
+ */ + public com.google.pubsub.v1.Schema rollbackSchema( + com.google.pubsub.v1.RollbackSchemaRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getRollbackSchemaMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Deletes a specific schema revision.
+     * 
+ */ + public com.google.pubsub.v1.Schema deleteSchemaRevision( + com.google.pubsub.v1.DeleteSchemaRevisionRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getDeleteSchemaRevisionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Deletes a schema.
+     * 
+ */ + public com.google.protobuf.Empty deleteSchema( + com.google.pubsub.v1.DeleteSchemaRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getDeleteSchemaMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Validates a schema.
+     * 
+ */ + public com.google.pubsub.v1.ValidateSchemaResponse validateSchema( + com.google.pubsub.v1.ValidateSchemaRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getValidateSchemaMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Validates a message against a schema.
+     * 
+ */ + public com.google.pubsub.v1.ValidateMessageResponse validateMessage( + com.google.pubsub.v1.ValidateMessageRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getValidateMessageMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do ListenableFuture-style rpc calls to service SchemaService. + * + *
+   * Service for doing schema-related operations.
+   * 
+ */ + public static final class SchemaServiceFutureStub + extends io.grpc.stub.AbstractFutureStub { + private SchemaServiceFutureStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SchemaServiceFutureStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SchemaServiceFutureStub(channel, callOptions); + } + + /** + * + * + *
+     * Creates a schema.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + createSchema(com.google.pubsub.v1.CreateSchemaRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getCreateSchemaMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Gets a schema.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + getSchema(com.google.pubsub.v1.GetSchemaRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getGetSchemaMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Lists schemas in a project.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.pubsub.v1.ListSchemasResponse> + listSchemas(com.google.pubsub.v1.ListSchemasRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getListSchemasMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Lists all schema revisions for the named schema.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.pubsub.v1.ListSchemaRevisionsResponse> + listSchemaRevisions(com.google.pubsub.v1.ListSchemaRevisionsRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getListSchemaRevisionsMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Commits a new schema revision to an existing schema.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + commitSchema(com.google.pubsub.v1.CommitSchemaRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getCommitSchemaMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Creates a new schema revision that is a copy of the provided revision_id.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + rollbackSchema(com.google.pubsub.v1.RollbackSchemaRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getRollbackSchemaMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Deletes a specific schema revision.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + deleteSchemaRevision(com.google.pubsub.v1.DeleteSchemaRevisionRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getDeleteSchemaRevisionMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Deletes a schema.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + deleteSchema(com.google.pubsub.v1.DeleteSchemaRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getDeleteSchemaMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Validates a schema.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.pubsub.v1.ValidateSchemaResponse> + validateSchema(com.google.pubsub.v1.ValidateSchemaRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getValidateSchemaMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Validates a message against a schema.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.pubsub.v1.ValidateMessageResponse> + validateMessage(com.google.pubsub.v1.ValidateMessageRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getValidateMessageMethod(), getCallOptions()), request); + } + } + + private static final int METHODID_CREATE_SCHEMA = 0; + private static final int METHODID_GET_SCHEMA = 1; + private static final int METHODID_LIST_SCHEMAS = 2; + private static final int METHODID_LIST_SCHEMA_REVISIONS = 3; + private static final int METHODID_COMMIT_SCHEMA = 4; + private static final int METHODID_ROLLBACK_SCHEMA = 5; + private static final int METHODID_DELETE_SCHEMA_REVISION = 6; + private static final int METHODID_DELETE_SCHEMA = 7; + private static final int METHODID_VALIDATE_SCHEMA = 8; + private static final int METHODID_VALIDATE_MESSAGE = 9; + + private static final class MethodHandlers + implements io.grpc.stub.ServerCalls.UnaryMethod, + io.grpc.stub.ServerCalls.ServerStreamingMethod, + io.grpc.stub.ServerCalls.ClientStreamingMethod, + io.grpc.stub.ServerCalls.BidiStreamingMethod { + private final AsyncService serviceImpl; + private final int methodId; + + MethodHandlers(AsyncService serviceImpl, int methodId) { + this.serviceImpl = serviceImpl; + this.methodId = methodId; + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + case METHODID_CREATE_SCHEMA: + serviceImpl.createSchema( + (com.google.pubsub.v1.CreateSchemaRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_GET_SCHEMA: + serviceImpl.getSchema( + (com.google.pubsub.v1.GetSchemaRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_LIST_SCHEMAS: + serviceImpl.listSchemas( + (com.google.pubsub.v1.ListSchemasRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_LIST_SCHEMA_REVISIONS: + serviceImpl.listSchemaRevisions( + (com.google.pubsub.v1.ListSchemaRevisionsRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_COMMIT_SCHEMA: + serviceImpl.commitSchema( + (com.google.pubsub.v1.CommitSchemaRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_ROLLBACK_SCHEMA: + serviceImpl.rollbackSchema( + (com.google.pubsub.v1.RollbackSchemaRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_DELETE_SCHEMA_REVISION: + serviceImpl.deleteSchemaRevision( + (com.google.pubsub.v1.DeleteSchemaRevisionRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_DELETE_SCHEMA: + serviceImpl.deleteSchema( + (com.google.pubsub.v1.DeleteSchemaRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_VALIDATE_SCHEMA: + serviceImpl.validateSchema( + (com.google.pubsub.v1.ValidateSchemaRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_VALIDATE_MESSAGE: + serviceImpl.validateMessage( + (com.google.pubsub.v1.ValidateMessageRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + default: + throw new AssertionError(); + } + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public io.grpc.stub.StreamObserver invoke( + io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + default: + throw new AssertionError(); + } + } + } + + public static final io.grpc.ServerServiceDefinition bindService(AsyncService service) { + return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) + .addMethod( + getCreateSchemaMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.CreateSchemaRequest, com.google.pubsub.v1.Schema>( + service, METHODID_CREATE_SCHEMA))) + .addMethod( + getGetSchemaMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.GetSchemaRequest, com.google.pubsub.v1.Schema>( + service, METHODID_GET_SCHEMA))) + .addMethod( + getListSchemasMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.ListSchemasRequest, + com.google.pubsub.v1.ListSchemasResponse>(service, METHODID_LIST_SCHEMAS))) + .addMethod( + getListSchemaRevisionsMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.ListSchemaRevisionsRequest, + com.google.pubsub.v1.ListSchemaRevisionsResponse>( + service, METHODID_LIST_SCHEMA_REVISIONS))) + .addMethod( + getCommitSchemaMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.CommitSchemaRequest, com.google.pubsub.v1.Schema>( + service, METHODID_COMMIT_SCHEMA))) + .addMethod( + getRollbackSchemaMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.RollbackSchemaRequest, com.google.pubsub.v1.Schema>( + service, METHODID_ROLLBACK_SCHEMA))) + .addMethod( + getDeleteSchemaRevisionMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.DeleteSchemaRevisionRequest, com.google.pubsub.v1.Schema>( + service, METHODID_DELETE_SCHEMA_REVISION))) + .addMethod( + getDeleteSchemaMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.DeleteSchemaRequest, com.google.protobuf.Empty>( + service, METHODID_DELETE_SCHEMA))) + .addMethod( + getValidateSchemaMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.ValidateSchemaRequest, + com.google.pubsub.v1.ValidateSchemaResponse>( + service, METHODID_VALIDATE_SCHEMA))) + .addMethod( + getValidateMessageMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.ValidateMessageRequest, + com.google.pubsub.v1.ValidateMessageResponse>( + service, METHODID_VALIDATE_MESSAGE))) + .build(); + } + + private abstract static class SchemaServiceBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoFileDescriptorSupplier, + io.grpc.protobuf.ProtoServiceDescriptorSupplier { + SchemaServiceBaseDescriptorSupplier() {} + + @java.lang.Override + public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() { + return com.google.pubsub.v1.SchemaProto.getDescriptor(); + } + + @java.lang.Override + public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() { + return getFileDescriptor().findServiceByName("SchemaService"); + } + } + + private static final class SchemaServiceFileDescriptorSupplier + extends SchemaServiceBaseDescriptorSupplier { + SchemaServiceFileDescriptorSupplier() {} + } + + private static final class SchemaServiceMethodDescriptorSupplier + extends SchemaServiceBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoMethodDescriptorSupplier { + private final java.lang.String methodName; + + SchemaServiceMethodDescriptorSupplier(java.lang.String methodName) { + this.methodName = methodName; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() { + return getServiceDescriptor().findMethodByName(methodName); + } + } + + private static volatile io.grpc.ServiceDescriptor serviceDescriptor; + + public static io.grpc.ServiceDescriptor getServiceDescriptor() { + io.grpc.ServiceDescriptor result = serviceDescriptor; + if (result == null) { + synchronized (SchemaServiceGrpc.class) { + result = serviceDescriptor; + if (result == null) { + serviceDescriptor = + result = + io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME) + .setSchemaDescriptor(new SchemaServiceFileDescriptorSupplier()) + .addMethod(getCreateSchemaMethod()) + .addMethod(getGetSchemaMethod()) + .addMethod(getListSchemasMethod()) + .addMethod(getListSchemaRevisionsMethod()) + .addMethod(getCommitSchemaMethod()) + .addMethod(getRollbackSchemaMethod()) + .addMethod(getDeleteSchemaRevisionMethod()) + .addMethod(getDeleteSchemaMethod()) + .addMethod(getValidateSchemaMethod()) + .addMethod(getValidateMessageMethod()) + .build(); + } + } + } + return result; + } +} diff --git a/java-pubsub/grpc-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SubscriberGrpc.java b/java-pubsub/grpc-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SubscriberGrpc.java new file mode 100644 index 000000000000..8e3a8dc135c0 --- /dev/null +++ b/java-pubsub/grpc-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SubscriberGrpc.java @@ -0,0 +1,2596 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +package com.google.pubsub.v1; + +import static io.grpc.MethodDescriptor.generateFullMethodName; + +/** + * + * + *
+ * The service that an application uses to manipulate subscriptions and to
+ * consume messages from a subscription via the `Pull` method or by
+ * establishing a bi-directional stream using the `StreamingPull` method.
+ * 
+ */ +@io.grpc.stub.annotations.GrpcGenerated +public final class SubscriberGrpc { + + private SubscriberGrpc() {} + + public static final java.lang.String SERVICE_NAME = "google.pubsub.v1.Subscriber"; + + // Static method descriptors that strictly reflect the proto. + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.Subscription, com.google.pubsub.v1.Subscription> + getCreateSubscriptionMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "CreateSubscription", + requestType = com.google.pubsub.v1.Subscription.class, + responseType = com.google.pubsub.v1.Subscription.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.Subscription, com.google.pubsub.v1.Subscription> + getCreateSubscriptionMethod() { + io.grpc.MethodDescriptor + getCreateSubscriptionMethod; + if ((getCreateSubscriptionMethod = SubscriberGrpc.getCreateSubscriptionMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getCreateSubscriptionMethod = SubscriberGrpc.getCreateSubscriptionMethod) == null) { + SubscriberGrpc.getCreateSubscriptionMethod = + getCreateSubscriptionMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateSubscription")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Subscription.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Subscription.getDefaultInstance())) + .setSchemaDescriptor( + new SubscriberMethodDescriptorSupplier("CreateSubscription")) + .build(); + } + } + } + return getCreateSubscriptionMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.GetSubscriptionRequest, com.google.pubsub.v1.Subscription> + getGetSubscriptionMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "GetSubscription", + requestType = com.google.pubsub.v1.GetSubscriptionRequest.class, + responseType = com.google.pubsub.v1.Subscription.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.GetSubscriptionRequest, com.google.pubsub.v1.Subscription> + getGetSubscriptionMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.GetSubscriptionRequest, com.google.pubsub.v1.Subscription> + getGetSubscriptionMethod; + if ((getGetSubscriptionMethod = SubscriberGrpc.getGetSubscriptionMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getGetSubscriptionMethod = SubscriberGrpc.getGetSubscriptionMethod) == null) { + SubscriberGrpc.getGetSubscriptionMethod = + getGetSubscriptionMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetSubscription")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.GetSubscriptionRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Subscription.getDefaultInstance())) + .setSchemaDescriptor( + new SubscriberMethodDescriptorSupplier("GetSubscription")) + .build(); + } + } + } + return getGetSubscriptionMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.UpdateSubscriptionRequest, com.google.pubsub.v1.Subscription> + getUpdateSubscriptionMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "UpdateSubscription", + requestType = com.google.pubsub.v1.UpdateSubscriptionRequest.class, + responseType = com.google.pubsub.v1.Subscription.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.UpdateSubscriptionRequest, com.google.pubsub.v1.Subscription> + getUpdateSubscriptionMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.UpdateSubscriptionRequest, com.google.pubsub.v1.Subscription> + getUpdateSubscriptionMethod; + if ((getUpdateSubscriptionMethod = SubscriberGrpc.getUpdateSubscriptionMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getUpdateSubscriptionMethod = SubscriberGrpc.getUpdateSubscriptionMethod) == null) { + SubscriberGrpc.getUpdateSubscriptionMethod = + getUpdateSubscriptionMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "UpdateSubscription")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.UpdateSubscriptionRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Subscription.getDefaultInstance())) + .setSchemaDescriptor( + new SubscriberMethodDescriptorSupplier("UpdateSubscription")) + .build(); + } + } + } + return getUpdateSubscriptionMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListSubscriptionsRequest, + com.google.pubsub.v1.ListSubscriptionsResponse> + getListSubscriptionsMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ListSubscriptions", + requestType = com.google.pubsub.v1.ListSubscriptionsRequest.class, + responseType = com.google.pubsub.v1.ListSubscriptionsResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListSubscriptionsRequest, + com.google.pubsub.v1.ListSubscriptionsResponse> + getListSubscriptionsMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListSubscriptionsRequest, + com.google.pubsub.v1.ListSubscriptionsResponse> + getListSubscriptionsMethod; + if ((getListSubscriptionsMethod = SubscriberGrpc.getListSubscriptionsMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getListSubscriptionsMethod = SubscriberGrpc.getListSubscriptionsMethod) == null) { + SubscriberGrpc.getListSubscriptionsMethod = + getListSubscriptionsMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListSubscriptions")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListSubscriptionsRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListSubscriptionsResponse.getDefaultInstance())) + .setSchemaDescriptor( + new SubscriberMethodDescriptorSupplier("ListSubscriptions")) + .build(); + } + } + } + return getListSubscriptionsMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.DeleteSubscriptionRequest, com.google.protobuf.Empty> + getDeleteSubscriptionMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "DeleteSubscription", + requestType = com.google.pubsub.v1.DeleteSubscriptionRequest.class, + responseType = com.google.protobuf.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.DeleteSubscriptionRequest, com.google.protobuf.Empty> + getDeleteSubscriptionMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.DeleteSubscriptionRequest, com.google.protobuf.Empty> + getDeleteSubscriptionMethod; + if ((getDeleteSubscriptionMethod = SubscriberGrpc.getDeleteSubscriptionMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getDeleteSubscriptionMethod = SubscriberGrpc.getDeleteSubscriptionMethod) == null) { + SubscriberGrpc.getDeleteSubscriptionMethod = + getDeleteSubscriptionMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteSubscription")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.DeleteSubscriptionRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.protobuf.Empty.getDefaultInstance())) + .setSchemaDescriptor( + new SubscriberMethodDescriptorSupplier("DeleteSubscription")) + .build(); + } + } + } + return getDeleteSubscriptionMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.ModifyAckDeadlineRequest, com.google.protobuf.Empty> + getModifyAckDeadlineMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ModifyAckDeadline", + requestType = com.google.pubsub.v1.ModifyAckDeadlineRequest.class, + responseType = com.google.protobuf.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.ModifyAckDeadlineRequest, com.google.protobuf.Empty> + getModifyAckDeadlineMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.ModifyAckDeadlineRequest, com.google.protobuf.Empty> + getModifyAckDeadlineMethod; + if ((getModifyAckDeadlineMethod = SubscriberGrpc.getModifyAckDeadlineMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getModifyAckDeadlineMethod = SubscriberGrpc.getModifyAckDeadlineMethod) == null) { + SubscriberGrpc.getModifyAckDeadlineMethod = + getModifyAckDeadlineMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ModifyAckDeadline")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ModifyAckDeadlineRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.protobuf.Empty.getDefaultInstance())) + .setSchemaDescriptor( + new SubscriberMethodDescriptorSupplier("ModifyAckDeadline")) + .build(); + } + } + } + return getModifyAckDeadlineMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.AcknowledgeRequest, com.google.protobuf.Empty> + getAcknowledgeMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "Acknowledge", + requestType = com.google.pubsub.v1.AcknowledgeRequest.class, + responseType = com.google.protobuf.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.AcknowledgeRequest, com.google.protobuf.Empty> + getAcknowledgeMethod() { + io.grpc.MethodDescriptor + getAcknowledgeMethod; + if ((getAcknowledgeMethod = SubscriberGrpc.getAcknowledgeMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getAcknowledgeMethod = SubscriberGrpc.getAcknowledgeMethod) == null) { + SubscriberGrpc.getAcknowledgeMethod = + getAcknowledgeMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "Acknowledge")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.AcknowledgeRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.protobuf.Empty.getDefaultInstance())) + .setSchemaDescriptor(new SubscriberMethodDescriptorSupplier("Acknowledge")) + .build(); + } + } + } + return getAcknowledgeMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.PullRequest, com.google.pubsub.v1.PullResponse> + getPullMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "Pull", + requestType = com.google.pubsub.v1.PullRequest.class, + responseType = com.google.pubsub.v1.PullResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.PullRequest, com.google.pubsub.v1.PullResponse> + getPullMethod() { + io.grpc.MethodDescriptor + getPullMethod; + if ((getPullMethod = SubscriberGrpc.getPullMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getPullMethod = SubscriberGrpc.getPullMethod) == null) { + SubscriberGrpc.getPullMethod = + getPullMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "Pull")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.PullRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.PullResponse.getDefaultInstance())) + .setSchemaDescriptor(new SubscriberMethodDescriptorSupplier("Pull")) + .build(); + } + } + } + return getPullMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.StreamingPullRequest, com.google.pubsub.v1.StreamingPullResponse> + getStreamingPullMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "StreamingPull", + requestType = com.google.pubsub.v1.StreamingPullRequest.class, + responseType = com.google.pubsub.v1.StreamingPullResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.BIDI_STREAMING) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.StreamingPullRequest, com.google.pubsub.v1.StreamingPullResponse> + getStreamingPullMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.StreamingPullRequest, com.google.pubsub.v1.StreamingPullResponse> + getStreamingPullMethod; + if ((getStreamingPullMethod = SubscriberGrpc.getStreamingPullMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getStreamingPullMethod = SubscriberGrpc.getStreamingPullMethod) == null) { + SubscriberGrpc.getStreamingPullMethod = + getStreamingPullMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.BIDI_STREAMING) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "StreamingPull")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.StreamingPullRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.StreamingPullResponse.getDefaultInstance())) + .setSchemaDescriptor(new SubscriberMethodDescriptorSupplier("StreamingPull")) + .build(); + } + } + } + return getStreamingPullMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.ModifyPushConfigRequest, com.google.protobuf.Empty> + getModifyPushConfigMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ModifyPushConfig", + requestType = com.google.pubsub.v1.ModifyPushConfigRequest.class, + responseType = com.google.protobuf.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.ModifyPushConfigRequest, com.google.protobuf.Empty> + getModifyPushConfigMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.ModifyPushConfigRequest, com.google.protobuf.Empty> + getModifyPushConfigMethod; + if ((getModifyPushConfigMethod = SubscriberGrpc.getModifyPushConfigMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getModifyPushConfigMethod = SubscriberGrpc.getModifyPushConfigMethod) == null) { + SubscriberGrpc.getModifyPushConfigMethod = + getModifyPushConfigMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ModifyPushConfig")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ModifyPushConfigRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.protobuf.Empty.getDefaultInstance())) + .setSchemaDescriptor( + new SubscriberMethodDescriptorSupplier("ModifyPushConfig")) + .build(); + } + } + } + return getModifyPushConfigMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.GetSnapshotRequest, com.google.pubsub.v1.Snapshot> + getGetSnapshotMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "GetSnapshot", + requestType = com.google.pubsub.v1.GetSnapshotRequest.class, + responseType = com.google.pubsub.v1.Snapshot.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.GetSnapshotRequest, com.google.pubsub.v1.Snapshot> + getGetSnapshotMethod() { + io.grpc.MethodDescriptor + getGetSnapshotMethod; + if ((getGetSnapshotMethod = SubscriberGrpc.getGetSnapshotMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getGetSnapshotMethod = SubscriberGrpc.getGetSnapshotMethod) == null) { + SubscriberGrpc.getGetSnapshotMethod = + getGetSnapshotMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetSnapshot")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.GetSnapshotRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Snapshot.getDefaultInstance())) + .setSchemaDescriptor(new SubscriberMethodDescriptorSupplier("GetSnapshot")) + .build(); + } + } + } + return getGetSnapshotMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListSnapshotsRequest, com.google.pubsub.v1.ListSnapshotsResponse> + getListSnapshotsMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ListSnapshots", + requestType = com.google.pubsub.v1.ListSnapshotsRequest.class, + responseType = com.google.pubsub.v1.ListSnapshotsResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListSnapshotsRequest, com.google.pubsub.v1.ListSnapshotsResponse> + getListSnapshotsMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.ListSnapshotsRequest, com.google.pubsub.v1.ListSnapshotsResponse> + getListSnapshotsMethod; + if ((getListSnapshotsMethod = SubscriberGrpc.getListSnapshotsMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getListSnapshotsMethod = SubscriberGrpc.getListSnapshotsMethod) == null) { + SubscriberGrpc.getListSnapshotsMethod = + getListSnapshotsMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListSnapshots")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListSnapshotsRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.ListSnapshotsResponse.getDefaultInstance())) + .setSchemaDescriptor(new SubscriberMethodDescriptorSupplier("ListSnapshots")) + .build(); + } + } + } + return getListSnapshotsMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.CreateSnapshotRequest, com.google.pubsub.v1.Snapshot> + getCreateSnapshotMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "CreateSnapshot", + requestType = com.google.pubsub.v1.CreateSnapshotRequest.class, + responseType = com.google.pubsub.v1.Snapshot.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.CreateSnapshotRequest, com.google.pubsub.v1.Snapshot> + getCreateSnapshotMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.CreateSnapshotRequest, com.google.pubsub.v1.Snapshot> + getCreateSnapshotMethod; + if ((getCreateSnapshotMethod = SubscriberGrpc.getCreateSnapshotMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getCreateSnapshotMethod = SubscriberGrpc.getCreateSnapshotMethod) == null) { + SubscriberGrpc.getCreateSnapshotMethod = + getCreateSnapshotMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateSnapshot")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.CreateSnapshotRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Snapshot.getDefaultInstance())) + .setSchemaDescriptor(new SubscriberMethodDescriptorSupplier("CreateSnapshot")) + .build(); + } + } + } + return getCreateSnapshotMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.UpdateSnapshotRequest, com.google.pubsub.v1.Snapshot> + getUpdateSnapshotMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "UpdateSnapshot", + requestType = com.google.pubsub.v1.UpdateSnapshotRequest.class, + responseType = com.google.pubsub.v1.Snapshot.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.UpdateSnapshotRequest, com.google.pubsub.v1.Snapshot> + getUpdateSnapshotMethod() { + io.grpc.MethodDescriptor< + com.google.pubsub.v1.UpdateSnapshotRequest, com.google.pubsub.v1.Snapshot> + getUpdateSnapshotMethod; + if ((getUpdateSnapshotMethod = SubscriberGrpc.getUpdateSnapshotMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getUpdateSnapshotMethod = SubscriberGrpc.getUpdateSnapshotMethod) == null) { + SubscriberGrpc.getUpdateSnapshotMethod = + getUpdateSnapshotMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "UpdateSnapshot")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.UpdateSnapshotRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.Snapshot.getDefaultInstance())) + .setSchemaDescriptor(new SubscriberMethodDescriptorSupplier("UpdateSnapshot")) + .build(); + } + } + } + return getUpdateSnapshotMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.DeleteSnapshotRequest, com.google.protobuf.Empty> + getDeleteSnapshotMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "DeleteSnapshot", + requestType = com.google.pubsub.v1.DeleteSnapshotRequest.class, + responseType = com.google.protobuf.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.DeleteSnapshotRequest, com.google.protobuf.Empty> + getDeleteSnapshotMethod() { + io.grpc.MethodDescriptor + getDeleteSnapshotMethod; + if ((getDeleteSnapshotMethod = SubscriberGrpc.getDeleteSnapshotMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getDeleteSnapshotMethod = SubscriberGrpc.getDeleteSnapshotMethod) == null) { + SubscriberGrpc.getDeleteSnapshotMethod = + getDeleteSnapshotMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteSnapshot")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.DeleteSnapshotRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.protobuf.Empty.getDefaultInstance())) + .setSchemaDescriptor(new SubscriberMethodDescriptorSupplier("DeleteSnapshot")) + .build(); + } + } + } + return getDeleteSnapshotMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.pubsub.v1.SeekRequest, com.google.pubsub.v1.SeekResponse> + getSeekMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "Seek", + requestType = com.google.pubsub.v1.SeekRequest.class, + responseType = com.google.pubsub.v1.SeekResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.pubsub.v1.SeekRequest, com.google.pubsub.v1.SeekResponse> + getSeekMethod() { + io.grpc.MethodDescriptor + getSeekMethod; + if ((getSeekMethod = SubscriberGrpc.getSeekMethod) == null) { + synchronized (SubscriberGrpc.class) { + if ((getSeekMethod = SubscriberGrpc.getSeekMethod) == null) { + SubscriberGrpc.getSeekMethod = + getSeekMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "Seek")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.SeekRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.pubsub.v1.SeekResponse.getDefaultInstance())) + .setSchemaDescriptor(new SubscriberMethodDescriptorSupplier("Seek")) + .build(); + } + } + } + return getSeekMethod; + } + + /** Creates a new async stub that supports all call types for the service */ + public static SubscriberStub newStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SubscriberStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SubscriberStub(channel, callOptions); + } + }; + return SubscriberStub.newStub(factory, channel); + } + + /** Creates a new blocking-style stub that supports all types of calls on the service */ + public static SubscriberBlockingV2Stub newBlockingV2Stub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SubscriberBlockingV2Stub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SubscriberBlockingV2Stub(channel, callOptions); + } + }; + return SubscriberBlockingV2Stub.newStub(factory, channel); + } + + /** + * Creates a new blocking-style stub that supports unary and streaming output calls on the service + */ + public static SubscriberBlockingStub newBlockingStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SubscriberBlockingStub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SubscriberBlockingStub(channel, callOptions); + } + }; + return SubscriberBlockingStub.newStub(factory, channel); + } + + /** Creates a new ListenableFuture-style stub that supports unary calls on the service */ + public static SubscriberFutureStub newFutureStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SubscriberFutureStub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SubscriberFutureStub(channel, callOptions); + } + }; + return SubscriberFutureStub.newStub(factory, channel); + } + + /** + * + * + *
+   * The service that an application uses to manipulate subscriptions and to
+   * consume messages from a subscription via the `Pull` method or by
+   * establishing a bi-directional stream using the `StreamingPull` method.
+   * 
+ */ + public interface AsyncService { + + /** + * + * + *
+     * Creates a subscription to a given topic. See the [resource name rules]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * If the subscription already exists, returns `ALREADY_EXISTS`.
+     * If the corresponding topic doesn't exist, returns `NOT_FOUND`.
+     * If the name is not provided in the request, the server will assign a random
+     * name for this subscription on the same project as the topic, conforming
+     * to the [resource name format]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The
+     * generated name is populated in the returned Subscription object. Note that
+     * for REST API requests, you must specify a name in the request.
+     * 
+ */ + default void createSubscription( + com.google.pubsub.v1.Subscription request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getCreateSubscriptionMethod(), responseObserver); + } + + /** + * + * + *
+     * Gets the configuration details of a subscription.
+     * 
+ */ + default void getSubscription( + com.google.pubsub.v1.GetSubscriptionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getGetSubscriptionMethod(), responseObserver); + } + + /** + * + * + *
+     * Updates an existing subscription by updating the fields specified in the
+     * update mask. Note that certain properties of a subscription, such as its
+     * topic, are not modifiable.
+     * 
+ */ + default void updateSubscription( + com.google.pubsub.v1.UpdateSubscriptionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getUpdateSubscriptionMethod(), responseObserver); + } + + /** + * + * + *
+     * Lists matching subscriptions.
+     * 
+ */ + default void listSubscriptions( + com.google.pubsub.v1.ListSubscriptionsRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getListSubscriptionsMethod(), responseObserver); + } + + /** + * + * + *
+     * Deletes an existing subscription. All messages retained in the subscription
+     * are immediately dropped. Calls to `Pull` after deletion will return
+     * `NOT_FOUND`. After a subscription is deleted, a new one may be created with
+     * the same name, but the new one has no association with the old
+     * subscription or its topic unless the same topic is specified.
+     * 
+ */ + default void deleteSubscription( + com.google.pubsub.v1.DeleteSubscriptionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getDeleteSubscriptionMethod(), responseObserver); + } + + /** + * + * + *
+     * Modifies the ack deadline for a specific message. This method is useful
+     * to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted. Note that this does not modify the
+     * subscription-level `ackDeadlineSeconds` used for subsequent messages.
+     * 
+ */ + default void modifyAckDeadline( + com.google.pubsub.v1.ModifyAckDeadlineRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getModifyAckDeadlineMethod(), responseObserver); + } + + /** + * + * + *
+     * Acknowledges the messages associated with the `ack_ids` in the
+     * `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages
+     * from the subscription.
+     * Acknowledging a message whose ack deadline has expired may succeed,
+     * but such a message may be redelivered later. Acknowledging a message more
+     * than once will not result in an error.
+     * 
+ */ + default void acknowledge( + com.google.pubsub.v1.AcknowledgeRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getAcknowledgeMethod(), responseObserver); + } + + /** + * + * + *
+     * Pulls messages from the server.
+     * 
+ */ + default void pull( + com.google.pubsub.v1.PullRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getPullMethod(), responseObserver); + } + + /** + * + * + *
+     * Establishes a stream with the server, which sends messages down to the
+     * client. The client streams acknowledgments and ack deadline modifications
+     * back to the server. The server will close the stream and return the status
+     * on any error. The server may close the stream with status `UNAVAILABLE` to
+     * reassign server-side resources, in which case, the client should
+     * re-establish the stream. Flow control can be achieved by configuring the
+     * underlying RPC channel.
+     * 
+ */ + default io.grpc.stub.StreamObserver streamingPull( + io.grpc.stub.StreamObserver responseObserver) { + return io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall( + getStreamingPullMethod(), responseObserver); + } + + /** + * + * + *
+     * Modifies the `PushConfig` for a specified subscription.
+     * This may be used to change a push subscription to a pull one (signified by
+     * an empty `PushConfig`) or vice versa, or change the endpoint URL and other
+     * attributes of a push subscription. Messages will accumulate for delivery
+     * continuously through the call regardless of changes to the `PushConfig`.
+     * 
+ */ + default void modifyPushConfig( + com.google.pubsub.v1.ModifyPushConfigRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getModifyPushConfigMethod(), responseObserver); + } + + /** + * + * + *
+     * Gets the configuration details of a snapshot. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + default void getSnapshot( + com.google.pubsub.v1.GetSnapshotRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getGetSnapshotMethod(), responseObserver); + } + + /** + * + * + *
+     * Lists the existing snapshots. Snapshots are used in [Seek](
+     * https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + default void listSnapshots( + com.google.pubsub.v1.ListSnapshotsRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getListSnapshotsMethod(), responseObserver); + } + + /** + * + * + *
+     * Creates a snapshot from the requested subscription. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * If the snapshot already exists, returns `ALREADY_EXISTS`.
+     * If the requested subscription doesn't exist, returns `NOT_FOUND`.
+     * If the backlog in the subscription is too old -- and the resulting snapshot
+     * would expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned.
+     * See also the `Snapshot.expire_time` field. If the name is not provided in
+     * the request, the server will assign a random
+     * name for this snapshot on the same project as the subscription, conforming
+     * to the [resource name format]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The
+     * generated name is populated in the returned Snapshot object. Note that for
+     * REST API requests, you must specify a name in the request.
+     * 
+ */ + default void createSnapshot( + com.google.pubsub.v1.CreateSnapshotRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getCreateSnapshotMethod(), responseObserver); + } + + /** + * + * + *
+     * Updates an existing snapshot by updating the fields specified in the update
+     * mask. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + default void updateSnapshot( + com.google.pubsub.v1.UpdateSnapshotRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getUpdateSnapshotMethod(), responseObserver); + } + + /** + * + * + *
+     * Removes an existing snapshot. Snapshots are used in [Seek]
+     * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * When the snapshot is deleted, all messages retained in the snapshot
+     * are immediately dropped. After a snapshot is deleted, a new one may be
+     * created with the same name, but the new one has no association with the old
+     * snapshot or its subscription, unless the same subscription is specified.
+     * 
+ */ + default void deleteSnapshot( + com.google.pubsub.v1.DeleteSnapshotRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getDeleteSnapshotMethod(), responseObserver); + } + + /** + * + * + *
+     * Seeks an existing subscription to a point in time or to a given snapshot,
+     * whichever is provided in the request. Snapshots are used in [Seek]
+     * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot. Note that both the subscription and the
+     * snapshot must be on the same topic.
+     * 
+ */ + default void seek( + com.google.pubsub.v1.SeekRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSeekMethod(), responseObserver); + } + } + + /** + * Base class for the server implementation of the service Subscriber. + * + *
+   * The service that an application uses to manipulate subscriptions and to
+   * consume messages from a subscription via the `Pull` method or by
+   * establishing a bi-directional stream using the `StreamingPull` method.
+   * 
+ */ + public abstract static class SubscriberImplBase implements io.grpc.BindableService, AsyncService { + + @java.lang.Override + public final io.grpc.ServerServiceDefinition bindService() { + return SubscriberGrpc.bindService(this); + } + } + + /** + * A stub to allow clients to do asynchronous rpc calls to service Subscriber. + * + *
+   * The service that an application uses to manipulate subscriptions and to
+   * consume messages from a subscription via the `Pull` method or by
+   * establishing a bi-directional stream using the `StreamingPull` method.
+   * 
+ */ + public static final class SubscriberStub extends io.grpc.stub.AbstractAsyncStub { + private SubscriberStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SubscriberStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SubscriberStub(channel, callOptions); + } + + /** + * + * + *
+     * Creates a subscription to a given topic. See the [resource name rules]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * If the subscription already exists, returns `ALREADY_EXISTS`.
+     * If the corresponding topic doesn't exist, returns `NOT_FOUND`.
+     * If the name is not provided in the request, the server will assign a random
+     * name for this subscription on the same project as the topic, conforming
+     * to the [resource name format]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The
+     * generated name is populated in the returned Subscription object. Note that
+     * for REST API requests, you must specify a name in the request.
+     * 
+ */ + public void createSubscription( + com.google.pubsub.v1.Subscription request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getCreateSubscriptionMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Gets the configuration details of a subscription.
+     * 
+ */ + public void getSubscription( + com.google.pubsub.v1.GetSubscriptionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getGetSubscriptionMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Updates an existing subscription by updating the fields specified in the
+     * update mask. Note that certain properties of a subscription, such as its
+     * topic, are not modifiable.
+     * 
+ */ + public void updateSubscription( + com.google.pubsub.v1.UpdateSubscriptionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getUpdateSubscriptionMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Lists matching subscriptions.
+     * 
+ */ + public void listSubscriptions( + com.google.pubsub.v1.ListSubscriptionsRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getListSubscriptionsMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Deletes an existing subscription. All messages retained in the subscription
+     * are immediately dropped. Calls to `Pull` after deletion will return
+     * `NOT_FOUND`. After a subscription is deleted, a new one may be created with
+     * the same name, but the new one has no association with the old
+     * subscription or its topic unless the same topic is specified.
+     * 
+ */ + public void deleteSubscription( + com.google.pubsub.v1.DeleteSubscriptionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getDeleteSubscriptionMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Modifies the ack deadline for a specific message. This method is useful
+     * to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted. Note that this does not modify the
+     * subscription-level `ackDeadlineSeconds` used for subsequent messages.
+     * 
+ */ + public void modifyAckDeadline( + com.google.pubsub.v1.ModifyAckDeadlineRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getModifyAckDeadlineMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Acknowledges the messages associated with the `ack_ids` in the
+     * `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages
+     * from the subscription.
+     * Acknowledging a message whose ack deadline has expired may succeed,
+     * but such a message may be redelivered later. Acknowledging a message more
+     * than once will not result in an error.
+     * 
+ */ + public void acknowledge( + com.google.pubsub.v1.AcknowledgeRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getAcknowledgeMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Pulls messages from the server.
+     * 
+ */ + public void pull( + com.google.pubsub.v1.PullRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getPullMethod(), getCallOptions()), request, responseObserver); + } + + /** + * + * + *
+     * Establishes a stream with the server, which sends messages down to the
+     * client. The client streams acknowledgments and ack deadline modifications
+     * back to the server. The server will close the stream and return the status
+     * on any error. The server may close the stream with status `UNAVAILABLE` to
+     * reassign server-side resources, in which case, the client should
+     * re-establish the stream. Flow control can be achieved by configuring the
+     * underlying RPC channel.
+     * 
+ */ + public io.grpc.stub.StreamObserver streamingPull( + io.grpc.stub.StreamObserver responseObserver) { + return io.grpc.stub.ClientCalls.asyncBidiStreamingCall( + getChannel().newCall(getStreamingPullMethod(), getCallOptions()), responseObserver); + } + + /** + * + * + *
+     * Modifies the `PushConfig` for a specified subscription.
+     * This may be used to change a push subscription to a pull one (signified by
+     * an empty `PushConfig`) or vice versa, or change the endpoint URL and other
+     * attributes of a push subscription. Messages will accumulate for delivery
+     * continuously through the call regardless of changes to the `PushConfig`.
+     * 
+ */ + public void modifyPushConfig( + com.google.pubsub.v1.ModifyPushConfigRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getModifyPushConfigMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Gets the configuration details of a snapshot. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public void getSnapshot( + com.google.pubsub.v1.GetSnapshotRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getGetSnapshotMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Lists the existing snapshots. Snapshots are used in [Seek](
+     * https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public void listSnapshots( + com.google.pubsub.v1.ListSnapshotsRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getListSnapshotsMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Creates a snapshot from the requested subscription. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * If the snapshot already exists, returns `ALREADY_EXISTS`.
+     * If the requested subscription doesn't exist, returns `NOT_FOUND`.
+     * If the backlog in the subscription is too old -- and the resulting snapshot
+     * would expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned.
+     * See also the `Snapshot.expire_time` field. If the name is not provided in
+     * the request, the server will assign a random
+     * name for this snapshot on the same project as the subscription, conforming
+     * to the [resource name format]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The
+     * generated name is populated in the returned Snapshot object. Note that for
+     * REST API requests, you must specify a name in the request.
+     * 
+ */ + public void createSnapshot( + com.google.pubsub.v1.CreateSnapshotRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getCreateSnapshotMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Updates an existing snapshot by updating the fields specified in the update
+     * mask. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public void updateSnapshot( + com.google.pubsub.v1.UpdateSnapshotRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getUpdateSnapshotMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Removes an existing snapshot. Snapshots are used in [Seek]
+     * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * When the snapshot is deleted, all messages retained in the snapshot
+     * are immediately dropped. After a snapshot is deleted, a new one may be
+     * created with the same name, but the new one has no association with the old
+     * snapshot or its subscription, unless the same subscription is specified.
+     * 
+ */ + public void deleteSnapshot( + com.google.pubsub.v1.DeleteSnapshotRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getDeleteSnapshotMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Seeks an existing subscription to a point in time or to a given snapshot,
+     * whichever is provided in the request. Snapshots are used in [Seek]
+     * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot. Note that both the subscription and the
+     * snapshot must be on the same topic.
+     * 
+ */ + public void seek( + com.google.pubsub.v1.SeekRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getSeekMethod(), getCallOptions()), request, responseObserver); + } + } + + /** + * A stub to allow clients to do synchronous rpc calls to service Subscriber. + * + *
+   * The service that an application uses to manipulate subscriptions and to
+   * consume messages from a subscription via the `Pull` method or by
+   * establishing a bi-directional stream using the `StreamingPull` method.
+   * 
+ */ + public static final class SubscriberBlockingV2Stub + extends io.grpc.stub.AbstractBlockingStub { + private SubscriberBlockingV2Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SubscriberBlockingV2Stub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SubscriberBlockingV2Stub(channel, callOptions); + } + + /** + * + * + *
+     * Creates a subscription to a given topic. See the [resource name rules]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * If the subscription already exists, returns `ALREADY_EXISTS`.
+     * If the corresponding topic doesn't exist, returns `NOT_FOUND`.
+     * If the name is not provided in the request, the server will assign a random
+     * name for this subscription on the same project as the topic, conforming
+     * to the [resource name format]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The
+     * generated name is populated in the returned Subscription object. Note that
+     * for REST API requests, you must specify a name in the request.
+     * 
+ */ + public com.google.pubsub.v1.Subscription createSubscription( + com.google.pubsub.v1.Subscription request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCreateSubscriptionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Gets the configuration details of a subscription.
+     * 
+ */ + public com.google.pubsub.v1.Subscription getSubscription( + com.google.pubsub.v1.GetSubscriptionRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getGetSubscriptionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Updates an existing subscription by updating the fields specified in the
+     * update mask. Note that certain properties of a subscription, such as its
+     * topic, are not modifiable.
+     * 
+ */ + public com.google.pubsub.v1.Subscription updateSubscription( + com.google.pubsub.v1.UpdateSubscriptionRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getUpdateSubscriptionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists matching subscriptions.
+     * 
+ */ + public com.google.pubsub.v1.ListSubscriptionsResponse listSubscriptions( + com.google.pubsub.v1.ListSubscriptionsRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getListSubscriptionsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Deletes an existing subscription. All messages retained in the subscription
+     * are immediately dropped. Calls to `Pull` after deletion will return
+     * `NOT_FOUND`. After a subscription is deleted, a new one may be created with
+     * the same name, but the new one has no association with the old
+     * subscription or its topic unless the same topic is specified.
+     * 
+ */ + public com.google.protobuf.Empty deleteSubscription( + com.google.pubsub.v1.DeleteSubscriptionRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getDeleteSubscriptionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Modifies the ack deadline for a specific message. This method is useful
+     * to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted. Note that this does not modify the
+     * subscription-level `ackDeadlineSeconds` used for subsequent messages.
+     * 
+ */ + public com.google.protobuf.Empty modifyAckDeadline( + com.google.pubsub.v1.ModifyAckDeadlineRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getModifyAckDeadlineMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Acknowledges the messages associated with the `ack_ids` in the
+     * `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages
+     * from the subscription.
+     * Acknowledging a message whose ack deadline has expired may succeed,
+     * but such a message may be redelivered later. Acknowledging a message more
+     * than once will not result in an error.
+     * 
+ */ + public com.google.protobuf.Empty acknowledge(com.google.pubsub.v1.AcknowledgeRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getAcknowledgeMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Pulls messages from the server.
+     * 
+ */ + public com.google.pubsub.v1.PullResponse pull(com.google.pubsub.v1.PullRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getPullMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Establishes a stream with the server, which sends messages down to the
+     * client. The client streams acknowledgments and ack deadline modifications
+     * back to the server. The server will close the stream and return the status
+     * on any error. The server may close the stream with status `UNAVAILABLE` to
+     * reassign server-side resources, in which case, the client should
+     * re-establish the stream. Flow control can be achieved by configuring the
+     * underlying RPC channel.
+     * 
+ */ + @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/10918") + public io.grpc.stub.BlockingClientCall< + com.google.pubsub.v1.StreamingPullRequest, com.google.pubsub.v1.StreamingPullResponse> + streamingPull() { + return io.grpc.stub.ClientCalls.blockingBidiStreamingCall( + getChannel(), getStreamingPullMethod(), getCallOptions()); + } + + /** + * + * + *
+     * Modifies the `PushConfig` for a specified subscription.
+     * This may be used to change a push subscription to a pull one (signified by
+     * an empty `PushConfig`) or vice versa, or change the endpoint URL and other
+     * attributes of a push subscription. Messages will accumulate for delivery
+     * continuously through the call regardless of changes to the `PushConfig`.
+     * 
+ */ + public com.google.protobuf.Empty modifyPushConfig( + com.google.pubsub.v1.ModifyPushConfigRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getModifyPushConfigMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Gets the configuration details of a snapshot. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public com.google.pubsub.v1.Snapshot getSnapshot( + com.google.pubsub.v1.GetSnapshotRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getGetSnapshotMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists the existing snapshots. Snapshots are used in [Seek](
+     * https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public com.google.pubsub.v1.ListSnapshotsResponse listSnapshots( + com.google.pubsub.v1.ListSnapshotsRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getListSnapshotsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Creates a snapshot from the requested subscription. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * If the snapshot already exists, returns `ALREADY_EXISTS`.
+     * If the requested subscription doesn't exist, returns `NOT_FOUND`.
+     * If the backlog in the subscription is too old -- and the resulting snapshot
+     * would expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned.
+     * See also the `Snapshot.expire_time` field. If the name is not provided in
+     * the request, the server will assign a random
+     * name for this snapshot on the same project as the subscription, conforming
+     * to the [resource name format]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The
+     * generated name is populated in the returned Snapshot object. Note that for
+     * REST API requests, you must specify a name in the request.
+     * 
+ */ + public com.google.pubsub.v1.Snapshot createSnapshot( + com.google.pubsub.v1.CreateSnapshotRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCreateSnapshotMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Updates an existing snapshot by updating the fields specified in the update
+     * mask. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public com.google.pubsub.v1.Snapshot updateSnapshot( + com.google.pubsub.v1.UpdateSnapshotRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getUpdateSnapshotMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Removes an existing snapshot. Snapshots are used in [Seek]
+     * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * When the snapshot is deleted, all messages retained in the snapshot
+     * are immediately dropped. After a snapshot is deleted, a new one may be
+     * created with the same name, but the new one has no association with the old
+     * snapshot or its subscription, unless the same subscription is specified.
+     * 
+ */ + public com.google.protobuf.Empty deleteSnapshot( + com.google.pubsub.v1.DeleteSnapshotRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getDeleteSnapshotMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Seeks an existing subscription to a point in time or to a given snapshot,
+     * whichever is provided in the request. Snapshots are used in [Seek]
+     * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot. Note that both the subscription and the
+     * snapshot must be on the same topic.
+     * 
+ */ + public com.google.pubsub.v1.SeekResponse seek(com.google.pubsub.v1.SeekRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getSeekMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do limited synchronous rpc calls to service Subscriber. + * + *
+   * The service that an application uses to manipulate subscriptions and to
+   * consume messages from a subscription via the `Pull` method or by
+   * establishing a bi-directional stream using the `StreamingPull` method.
+   * 
+ */ + public static final class SubscriberBlockingStub + extends io.grpc.stub.AbstractBlockingStub { + private SubscriberBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SubscriberBlockingStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SubscriberBlockingStub(channel, callOptions); + } + + /** + * + * + *
+     * Creates a subscription to a given topic. See the [resource name rules]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * If the subscription already exists, returns `ALREADY_EXISTS`.
+     * If the corresponding topic doesn't exist, returns `NOT_FOUND`.
+     * If the name is not provided in the request, the server will assign a random
+     * name for this subscription on the same project as the topic, conforming
+     * to the [resource name format]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The
+     * generated name is populated in the returned Subscription object. Note that
+     * for REST API requests, you must specify a name in the request.
+     * 
+ */ + public com.google.pubsub.v1.Subscription createSubscription( + com.google.pubsub.v1.Subscription request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCreateSubscriptionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Gets the configuration details of a subscription.
+     * 
+ */ + public com.google.pubsub.v1.Subscription getSubscription( + com.google.pubsub.v1.GetSubscriptionRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getGetSubscriptionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Updates an existing subscription by updating the fields specified in the
+     * update mask. Note that certain properties of a subscription, such as its
+     * topic, are not modifiable.
+     * 
+ */ + public com.google.pubsub.v1.Subscription updateSubscription( + com.google.pubsub.v1.UpdateSubscriptionRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getUpdateSubscriptionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists matching subscriptions.
+     * 
+ */ + public com.google.pubsub.v1.ListSubscriptionsResponse listSubscriptions( + com.google.pubsub.v1.ListSubscriptionsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListSubscriptionsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Deletes an existing subscription. All messages retained in the subscription
+     * are immediately dropped. Calls to `Pull` after deletion will return
+     * `NOT_FOUND`. After a subscription is deleted, a new one may be created with
+     * the same name, but the new one has no association with the old
+     * subscription or its topic unless the same topic is specified.
+     * 
+ */ + public com.google.protobuf.Empty deleteSubscription( + com.google.pubsub.v1.DeleteSubscriptionRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getDeleteSubscriptionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Modifies the ack deadline for a specific message. This method is useful
+     * to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted. Note that this does not modify the
+     * subscription-level `ackDeadlineSeconds` used for subsequent messages.
+     * 
+ */ + public com.google.protobuf.Empty modifyAckDeadline( + com.google.pubsub.v1.ModifyAckDeadlineRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getModifyAckDeadlineMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Acknowledges the messages associated with the `ack_ids` in the
+     * `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages
+     * from the subscription.
+     * Acknowledging a message whose ack deadline has expired may succeed,
+     * but such a message may be redelivered later. Acknowledging a message more
+     * than once will not result in an error.
+     * 
+ */ + public com.google.protobuf.Empty acknowledge(com.google.pubsub.v1.AcknowledgeRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getAcknowledgeMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Pulls messages from the server.
+     * 
+ */ + public com.google.pubsub.v1.PullResponse pull(com.google.pubsub.v1.PullRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getPullMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Modifies the `PushConfig` for a specified subscription.
+     * This may be used to change a push subscription to a pull one (signified by
+     * an empty `PushConfig`) or vice versa, or change the endpoint URL and other
+     * attributes of a push subscription. Messages will accumulate for delivery
+     * continuously through the call regardless of changes to the `PushConfig`.
+     * 
+ */ + public com.google.protobuf.Empty modifyPushConfig( + com.google.pubsub.v1.ModifyPushConfigRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getModifyPushConfigMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Gets the configuration details of a snapshot. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public com.google.pubsub.v1.Snapshot getSnapshot( + com.google.pubsub.v1.GetSnapshotRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getGetSnapshotMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists the existing snapshots. Snapshots are used in [Seek](
+     * https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public com.google.pubsub.v1.ListSnapshotsResponse listSnapshots( + com.google.pubsub.v1.ListSnapshotsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListSnapshotsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Creates a snapshot from the requested subscription. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * If the snapshot already exists, returns `ALREADY_EXISTS`.
+     * If the requested subscription doesn't exist, returns `NOT_FOUND`.
+     * If the backlog in the subscription is too old -- and the resulting snapshot
+     * would expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned.
+     * See also the `Snapshot.expire_time` field. If the name is not provided in
+     * the request, the server will assign a random
+     * name for this snapshot on the same project as the subscription, conforming
+     * to the [resource name format]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The
+     * generated name is populated in the returned Snapshot object. Note that for
+     * REST API requests, you must specify a name in the request.
+     * 
+ */ + public com.google.pubsub.v1.Snapshot createSnapshot( + com.google.pubsub.v1.CreateSnapshotRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCreateSnapshotMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Updates an existing snapshot by updating the fields specified in the update
+     * mask. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public com.google.pubsub.v1.Snapshot updateSnapshot( + com.google.pubsub.v1.UpdateSnapshotRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getUpdateSnapshotMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Removes an existing snapshot. Snapshots are used in [Seek]
+     * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * When the snapshot is deleted, all messages retained in the snapshot
+     * are immediately dropped. After a snapshot is deleted, a new one may be
+     * created with the same name, but the new one has no association with the old
+     * snapshot or its subscription, unless the same subscription is specified.
+     * 
+ */ + public com.google.protobuf.Empty deleteSnapshot( + com.google.pubsub.v1.DeleteSnapshotRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getDeleteSnapshotMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Seeks an existing subscription to a point in time or to a given snapshot,
+     * whichever is provided in the request. Snapshots are used in [Seek]
+     * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot. Note that both the subscription and the
+     * snapshot must be on the same topic.
+     * 
+ */ + public com.google.pubsub.v1.SeekResponse seek(com.google.pubsub.v1.SeekRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getSeekMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do ListenableFuture-style rpc calls to service Subscriber. + * + *
+   * The service that an application uses to manipulate subscriptions and to
+   * consume messages from a subscription via the `Pull` method or by
+   * establishing a bi-directional stream using the `StreamingPull` method.
+   * 
+ */ + public static final class SubscriberFutureStub + extends io.grpc.stub.AbstractFutureStub { + private SubscriberFutureStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SubscriberFutureStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SubscriberFutureStub(channel, callOptions); + } + + /** + * + * + *
+     * Creates a subscription to a given topic. See the [resource name rules]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * If the subscription already exists, returns `ALREADY_EXISTS`.
+     * If the corresponding topic doesn't exist, returns `NOT_FOUND`.
+     * If the name is not provided in the request, the server will assign a random
+     * name for this subscription on the same project as the topic, conforming
+     * to the [resource name format]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The
+     * generated name is populated in the returned Subscription object. Note that
+     * for REST API requests, you must specify a name in the request.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + createSubscription(com.google.pubsub.v1.Subscription request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getCreateSubscriptionMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Gets the configuration details of a subscription.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + getSubscription(com.google.pubsub.v1.GetSubscriptionRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getGetSubscriptionMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Updates an existing subscription by updating the fields specified in the
+     * update mask. Note that certain properties of a subscription, such as its
+     * topic, are not modifiable.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + updateSubscription(com.google.pubsub.v1.UpdateSubscriptionRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getUpdateSubscriptionMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Lists matching subscriptions.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.pubsub.v1.ListSubscriptionsResponse> + listSubscriptions(com.google.pubsub.v1.ListSubscriptionsRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getListSubscriptionsMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Deletes an existing subscription. All messages retained in the subscription
+     * are immediately dropped. Calls to `Pull` after deletion will return
+     * `NOT_FOUND`. After a subscription is deleted, a new one may be created with
+     * the same name, but the new one has no association with the old
+     * subscription or its topic unless the same topic is specified.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + deleteSubscription(com.google.pubsub.v1.DeleteSubscriptionRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getDeleteSubscriptionMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Modifies the ack deadline for a specific message. This method is useful
+     * to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted. Note that this does not modify the
+     * subscription-level `ackDeadlineSeconds` used for subsequent messages.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + modifyAckDeadline(com.google.pubsub.v1.ModifyAckDeadlineRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getModifyAckDeadlineMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Acknowledges the messages associated with the `ack_ids` in the
+     * `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages
+     * from the subscription.
+     * Acknowledging a message whose ack deadline has expired may succeed,
+     * but such a message may be redelivered later. Acknowledging a message more
+     * than once will not result in an error.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + acknowledge(com.google.pubsub.v1.AcknowledgeRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getAcknowledgeMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Pulls messages from the server.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + pull(com.google.pubsub.v1.PullRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getPullMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Modifies the `PushConfig` for a specified subscription.
+     * This may be used to change a push subscription to a pull one (signified by
+     * an empty `PushConfig`) or vice versa, or change the endpoint URL and other
+     * attributes of a push subscription. Messages will accumulate for delivery
+     * continuously through the call regardless of changes to the `PushConfig`.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + modifyPushConfig(com.google.pubsub.v1.ModifyPushConfigRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getModifyPushConfigMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Gets the configuration details of a snapshot. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + getSnapshot(com.google.pubsub.v1.GetSnapshotRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getGetSnapshotMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Lists the existing snapshots. Snapshots are used in [Seek](
+     * https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.pubsub.v1.ListSnapshotsResponse> + listSnapshots(com.google.pubsub.v1.ListSnapshotsRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getListSnapshotsMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Creates a snapshot from the requested subscription. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * If the snapshot already exists, returns `ALREADY_EXISTS`.
+     * If the requested subscription doesn't exist, returns `NOT_FOUND`.
+     * If the backlog in the subscription is too old -- and the resulting snapshot
+     * would expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned.
+     * See also the `Snapshot.expire_time` field. If the name is not provided in
+     * the request, the server will assign a random
+     * name for this snapshot on the same project as the subscription, conforming
+     * to the [resource name format]
+     * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The
+     * generated name is populated in the returned Snapshot object. Note that for
+     * REST API requests, you must specify a name in the request.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + createSnapshot(com.google.pubsub.v1.CreateSnapshotRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getCreateSnapshotMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Updates an existing snapshot by updating the fields specified in the update
+     * mask. Snapshots are used in
+     * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations,
+     * which allow you to manage message acknowledgments in bulk. That is, you can
+     * set the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + updateSnapshot(com.google.pubsub.v1.UpdateSnapshotRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getUpdateSnapshotMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Removes an existing snapshot. Snapshots are used in [Seek]
+     * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot.
+     * When the snapshot is deleted, all messages retained in the snapshot
+     * are immediately dropped. After a snapshot is deleted, a new one may be
+     * created with the same name, but the new one has no association with the old
+     * snapshot or its subscription, unless the same subscription is specified.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + deleteSnapshot(com.google.pubsub.v1.DeleteSnapshotRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getDeleteSnapshotMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Seeks an existing subscription to a point in time or to a given snapshot,
+     * whichever is provided in the request. Snapshots are used in [Seek]
+     * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which
+     * allow you to manage message acknowledgments in bulk. That is, you can set
+     * the acknowledgment state of messages in an existing subscription to the
+     * state captured by a snapshot. Note that both the subscription and the
+     * snapshot must be on the same topic.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + seek(com.google.pubsub.v1.SeekRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getSeekMethod(), getCallOptions()), request); + } + } + + private static final int METHODID_CREATE_SUBSCRIPTION = 0; + private static final int METHODID_GET_SUBSCRIPTION = 1; + private static final int METHODID_UPDATE_SUBSCRIPTION = 2; + private static final int METHODID_LIST_SUBSCRIPTIONS = 3; + private static final int METHODID_DELETE_SUBSCRIPTION = 4; + private static final int METHODID_MODIFY_ACK_DEADLINE = 5; + private static final int METHODID_ACKNOWLEDGE = 6; + private static final int METHODID_PULL = 7; + private static final int METHODID_MODIFY_PUSH_CONFIG = 8; + private static final int METHODID_GET_SNAPSHOT = 9; + private static final int METHODID_LIST_SNAPSHOTS = 10; + private static final int METHODID_CREATE_SNAPSHOT = 11; + private static final int METHODID_UPDATE_SNAPSHOT = 12; + private static final int METHODID_DELETE_SNAPSHOT = 13; + private static final int METHODID_SEEK = 14; + private static final int METHODID_STREAMING_PULL = 15; + + private static final class MethodHandlers + implements io.grpc.stub.ServerCalls.UnaryMethod, + io.grpc.stub.ServerCalls.ServerStreamingMethod, + io.grpc.stub.ServerCalls.ClientStreamingMethod, + io.grpc.stub.ServerCalls.BidiStreamingMethod { + private final AsyncService serviceImpl; + private final int methodId; + + MethodHandlers(AsyncService serviceImpl, int methodId) { + this.serviceImpl = serviceImpl; + this.methodId = methodId; + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + case METHODID_CREATE_SUBSCRIPTION: + serviceImpl.createSubscription( + (com.google.pubsub.v1.Subscription) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_GET_SUBSCRIPTION: + serviceImpl.getSubscription( + (com.google.pubsub.v1.GetSubscriptionRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_UPDATE_SUBSCRIPTION: + serviceImpl.updateSubscription( + (com.google.pubsub.v1.UpdateSubscriptionRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_LIST_SUBSCRIPTIONS: + serviceImpl.listSubscriptions( + (com.google.pubsub.v1.ListSubscriptionsRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_DELETE_SUBSCRIPTION: + serviceImpl.deleteSubscription( + (com.google.pubsub.v1.DeleteSubscriptionRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_MODIFY_ACK_DEADLINE: + serviceImpl.modifyAckDeadline( + (com.google.pubsub.v1.ModifyAckDeadlineRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_ACKNOWLEDGE: + serviceImpl.acknowledge( + (com.google.pubsub.v1.AcknowledgeRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_PULL: + serviceImpl.pull( + (com.google.pubsub.v1.PullRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_MODIFY_PUSH_CONFIG: + serviceImpl.modifyPushConfig( + (com.google.pubsub.v1.ModifyPushConfigRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_GET_SNAPSHOT: + serviceImpl.getSnapshot( + (com.google.pubsub.v1.GetSnapshotRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_LIST_SNAPSHOTS: + serviceImpl.listSnapshots( + (com.google.pubsub.v1.ListSnapshotsRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_CREATE_SNAPSHOT: + serviceImpl.createSnapshot( + (com.google.pubsub.v1.CreateSnapshotRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_UPDATE_SNAPSHOT: + serviceImpl.updateSnapshot( + (com.google.pubsub.v1.UpdateSnapshotRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_DELETE_SNAPSHOT: + serviceImpl.deleteSnapshot( + (com.google.pubsub.v1.DeleteSnapshotRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_SEEK: + serviceImpl.seek( + (com.google.pubsub.v1.SeekRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + default: + throw new AssertionError(); + } + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public io.grpc.stub.StreamObserver invoke( + io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + case METHODID_STREAMING_PULL: + return (io.grpc.stub.StreamObserver) + serviceImpl.streamingPull( + (io.grpc.stub.StreamObserver) + responseObserver); + default: + throw new AssertionError(); + } + } + } + + public static final io.grpc.ServerServiceDefinition bindService(AsyncService service) { + return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) + .addMethod( + getCreateSubscriptionMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.Subscription, com.google.pubsub.v1.Subscription>( + service, METHODID_CREATE_SUBSCRIPTION))) + .addMethod( + getGetSubscriptionMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.GetSubscriptionRequest, com.google.pubsub.v1.Subscription>( + service, METHODID_GET_SUBSCRIPTION))) + .addMethod( + getUpdateSubscriptionMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.UpdateSubscriptionRequest, + com.google.pubsub.v1.Subscription>(service, METHODID_UPDATE_SUBSCRIPTION))) + .addMethod( + getListSubscriptionsMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.ListSubscriptionsRequest, + com.google.pubsub.v1.ListSubscriptionsResponse>( + service, METHODID_LIST_SUBSCRIPTIONS))) + .addMethod( + getDeleteSubscriptionMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.DeleteSubscriptionRequest, com.google.protobuf.Empty>( + service, METHODID_DELETE_SUBSCRIPTION))) + .addMethod( + getModifyAckDeadlineMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.ModifyAckDeadlineRequest, com.google.protobuf.Empty>( + service, METHODID_MODIFY_ACK_DEADLINE))) + .addMethod( + getAcknowledgeMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.AcknowledgeRequest, com.google.protobuf.Empty>( + service, METHODID_ACKNOWLEDGE))) + .addMethod( + getPullMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.PullRequest, com.google.pubsub.v1.PullResponse>( + service, METHODID_PULL))) + .addMethod( + getStreamingPullMethod(), + io.grpc.stub.ServerCalls.asyncBidiStreamingCall( + new MethodHandlers< + com.google.pubsub.v1.StreamingPullRequest, + com.google.pubsub.v1.StreamingPullResponse>(service, METHODID_STREAMING_PULL))) + .addMethod( + getModifyPushConfigMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.ModifyPushConfigRequest, com.google.protobuf.Empty>( + service, METHODID_MODIFY_PUSH_CONFIG))) + .addMethod( + getGetSnapshotMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.GetSnapshotRequest, com.google.pubsub.v1.Snapshot>( + service, METHODID_GET_SNAPSHOT))) + .addMethod( + getListSnapshotsMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.ListSnapshotsRequest, + com.google.pubsub.v1.ListSnapshotsResponse>(service, METHODID_LIST_SNAPSHOTS))) + .addMethod( + getCreateSnapshotMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.CreateSnapshotRequest, com.google.pubsub.v1.Snapshot>( + service, METHODID_CREATE_SNAPSHOT))) + .addMethod( + getUpdateSnapshotMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.UpdateSnapshotRequest, com.google.pubsub.v1.Snapshot>( + service, METHODID_UPDATE_SNAPSHOT))) + .addMethod( + getDeleteSnapshotMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.DeleteSnapshotRequest, com.google.protobuf.Empty>( + service, METHODID_DELETE_SNAPSHOT))) + .addMethod( + getSeekMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.pubsub.v1.SeekRequest, com.google.pubsub.v1.SeekResponse>( + service, METHODID_SEEK))) + .build(); + } + + private abstract static class SubscriberBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoFileDescriptorSupplier, + io.grpc.protobuf.ProtoServiceDescriptorSupplier { + SubscriberBaseDescriptorSupplier() {} + + @java.lang.Override + public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() { + return com.google.pubsub.v1.PubsubProto.getDescriptor(); + } + + @java.lang.Override + public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() { + return getFileDescriptor().findServiceByName("Subscriber"); + } + } + + private static final class SubscriberFileDescriptorSupplier + extends SubscriberBaseDescriptorSupplier { + SubscriberFileDescriptorSupplier() {} + } + + private static final class SubscriberMethodDescriptorSupplier + extends SubscriberBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoMethodDescriptorSupplier { + private final java.lang.String methodName; + + SubscriberMethodDescriptorSupplier(java.lang.String methodName) { + this.methodName = methodName; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() { + return getServiceDescriptor().findMethodByName(methodName); + } + } + + private static volatile io.grpc.ServiceDescriptor serviceDescriptor; + + public static io.grpc.ServiceDescriptor getServiceDescriptor() { + io.grpc.ServiceDescriptor result = serviceDescriptor; + if (result == null) { + synchronized (SubscriberGrpc.class) { + result = serviceDescriptor; + if (result == null) { + serviceDescriptor = + result = + io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME) + .setSchemaDescriptor(new SubscriberFileDescriptorSupplier()) + .addMethod(getCreateSubscriptionMethod()) + .addMethod(getGetSubscriptionMethod()) + .addMethod(getUpdateSubscriptionMethod()) + .addMethod(getListSubscriptionsMethod()) + .addMethod(getDeleteSubscriptionMethod()) + .addMethod(getModifyAckDeadlineMethod()) + .addMethod(getAcknowledgeMethod()) + .addMethod(getPullMethod()) + .addMethod(getStreamingPullMethod()) + .addMethod(getModifyPushConfigMethod()) + .addMethod(getGetSnapshotMethod()) + .addMethod(getListSnapshotsMethod()) + .addMethod(getCreateSnapshotMethod()) + .addMethod(getUpdateSnapshotMethod()) + .addMethod(getDeleteSnapshotMethod()) + .addMethod(getSeekMethod()) + .build(); + } + } + } + return result; + } +} diff --git a/java-pubsub/owlbot.py b/java-pubsub/owlbot.py new file mode 100644 index 000000000000..bcd78edbc1e8 --- /dev/null +++ b/java-pubsub/owlbot.py @@ -0,0 +1,100 @@ +# Copyright 2026 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 +# +# https://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. + +import synthtool as s +from synthtool.languages import java + +service = 'pubsub' +version = 'v1' +GET_IAM_POLICY_TOPIC = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD\n /**\n * Gets the access control policy for a resource. Returns an empty policy if the resource exists\n * and does not have a policy set.\n *\n *

Sample code:\n *\n *

\n   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {\n   *   String formattedResource = ProjectTopicName.format("[PROJECT]", "[TOPIC]");\n   *   Policy response = topicAdminClient.getIamPolicy(formattedResource);\n   * }\n   * 
\n *\n * @param resource REQUIRED: The resource for which the policy is being requested. See the\n * operation documentation for the appropriate value for this field.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #getIamPolicy(GetIamPolicyRequest)} instead.\n */\n @Deprecated\n public final Policy getIamPolicy(String resource) {\n GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder().setResource(resource).build(); \n return getIamPolicy(request);\n }\n' +GET_IAM_POLICY_SUBSCRIPTION = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD\n /**\n * Gets the access control policy for a resource. Returns an empty policy if the resource exists\n * and does not have a policy set.\n *\n *

Sample code:\n *\n *

\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   String formattedResource = ProjectTopicName.format("[PROJECT]", "[TOPIC]");\n   *   Policy response = subscriptionAdminClient.getIamPolicy(formattedResource);\n   * }\n   * 
\n *\n * @param resource REQUIRED: The resource for which the policy is being requested. See the\n * operation documentation for the appropriate value for this field.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #getIamPolicy(GetIamPolicyRequest)} instead.\n */\n @Deprecated\n public final Policy getIamPolicy(String resource) {\n GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder().setResource(resource).build(); \n return getIamPolicy(request);\n }\n' +GET_IAM_POLICY_PREVIOUS = '(\\s+public final Policy getIamPolicy\\(GetIamPolicyRequest request\\) {\\n\\s+return .*\\n\\s+})' +SET_IAM_POLICY_TOPIC = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD\n /**\n * Sets the access control policy on the specified resource. Replaces any existing policy.\n *\n *

Can return Public Errors: NOT_FOUND, INVALID_ARGUMENT and PERMISSION_DENIED\n *\n *

Sample code:\n *\n *

\n   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {\n   *   String formattedResource = ProjectTopicName.format("[PROJECT]", "[TOPIC]");\n   *   Policy policy = Policy.newBuilder().build();\n   *   Policy response = topicAdminClient.setIamPolicy(formattedResource, policy);\n   * }\n   * 
\n *\n * @param resource REQUIRED: The resource for which the policy is being specified. See the\n * operation documentation for the appropriate value for this field.\n * @param policy REQUIRED: The complete policy to be applied to the `resource`. The size of the\n * policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud\n * Platform services (such as Projects) might reject them.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #setIamPolicy(SetIamPolicyRequest)} instead.\n */\n @Deprecated\n public final Policy setIamPolicy(String resource, Policy policy) { \n SetIamPolicyRequest request = \n SetIamPolicyRequest.newBuilder().setResource(resource).setPolicy(policy).build(); \n return setIamPolicy(request); \n }\n' +SET_IAM_POLICY_SUBSCRIPTION = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD\n /**\n * Sets the access control policy on the specified resource. Replaces any existing policy.\n *\n *

Can return Public Errors: NOT_FOUND, INVALID_ARGUMENT and PERMISSION_DENIED\n *\n *

Sample code:\n *\n *

\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   String formattedResource = ProjectTopicName.format("[PROJECT]", "[TOPIC]");\n   *   Policy policy = Policy.newBuilder().build();\n   *   Policy response = subscriptionAdminClient.setIamPolicy(formattedResource, policy);\n   * }\n   * 
\n *\n * @param resource REQUIRED: The resource for which the policy is being specified. See the\n * operation documentation for the appropriate value for this field.\n * @param policy REQUIRED: The complete policy to be applied to the `resource`. The size of the\n * policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud\n * Platform services (such as Projects) might reject them.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #setIamPolicy(SetIamPolicyRequest)} instead.\n */\n @Deprecated\n public final Policy setIamPolicy(String resource, Policy policy) { \n SetIamPolicyRequest request = \n SetIamPolicyRequest.newBuilder().setResource(resource).setPolicy(policy).build(); \n return setIamPolicy(request); \n }\n' +SET_IAM_POLICY_PREVIOUS = '(\\s+public final Policy setIamPolicy\\(SetIamPolicyRequest request\\) {\\n\\s+return .*\\n\\s+})' +TEST_IAM_PERMISSIONS_TOPIC = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD\n /**\n * Returns permissions that a caller has on the specified resource. If the resource does not\n * exist, this will return an empty set of permissions, not a NOT_FOUND error.\n *\n *

Note: This operation is designed to be used for building permission-aware UIs and\n * command-line tools, not for authorization checking. This operation may "fail open" without\n * warning.\n *\n *

Sample code:\n *\n *

\n   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {\n   *   String formattedResource = ProjectTopicName.format("[PROJECT]", "[TOPIC]");\n   *   List<String> permissions = new ArrayList<>();\n   *   TestIamPermissionsResponse response = topicAdminClient.testIamPermissions(formattedResource, permissions);\n   * }\n   * 
\n *\n * @param resource REQUIRED: The resource for which the policy detail is being requested. See the\n * operation documentation for the appropriate value for this field.\n * @param permissions The set of permissions to check for the `resource`. Permissions with\n * wildcards (such as \'*\' or \'storage.*\') are not allowed. For more information see\n * [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #testIamPermissions(TestIamPermissionsRequest)} instead.\n */\n @Deprecated\n public final TestIamPermissionsResponse testIamPermissions( \n String resource, List permissions) { \n TestIamPermissionsRequest request = \n TestIamPermissionsRequest.newBuilder() \n .setResource(resource) \n .addAllPermissions(permissions) \n .build(); \n return testIamPermissions(request); \n }\n' +TEST_IAM_PERMISSIONS_SUBSCRIPTION = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD\n /**\n * Returns permissions that a caller has on the specified resource. If the resource does not\n * exist, this will return an empty set of permissions, not a NOT_FOUND error.\n *\n *

Note: This operation is designed to be used for building permission-aware UIs and\n * command-line tools, not for authorization checking. This operation may "fail open" without\n * warning.\n *\n *

Sample code:\n *\n *

\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   String formattedResource = ProjectTopicName.format("[PROJECT]", "[TOPIC]");\n   *   List<String> permissions = new ArrayList<>();\n   *   TestIamPermissionsResponse response = subscriptionAdminClient.testIamPermissions(formattedResource, permissions);\n   * }\n   * 
\n *\n * @param resource REQUIRED: The resource for which the policy detail is being requested. See the\n * operation documentation for the appropriate value for this field.\n * @param permissions The set of permissions to check for the `resource`. Permissions with\n * wildcards (such as \'*\' or \'storage.*\') are not allowed. For more information see\n * [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #testIamPermissions(TestIamPermissionsRequest)} instead.\n */\n @Deprecated\n public final TestIamPermissionsResponse testIamPermissions( \n String resource, List permissions) { \n TestIamPermissionsRequest request = \n TestIamPermissionsRequest.newBuilder() \n .setResource(resource) \n .addAllPermissions(permissions) \n .build(); \n return testIamPermissions(request); \n }\n' +TEST_IAM_PERMISSIONS_PREVIOUS = '(\\s+public final TestIamPermissionsResponse testIamPermissions\\(TestIamPermissionsRequest request\\) {\\n\\s+return .*\\n\\s+})' +CREATE_TOPIC = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD\n /**\n * Creates the given topic with the given name. See the <a\n * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name\n * rules</a>.\n *\n *

Sample code:\n *\n *

\n   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {\n   *   ProjectTopicName name = ProjectTopicName.of("[PROJECT]", "[TOPIC]");\n   *   Topic response = topicAdminClient.createTopic(name);\n   * }\n   * 
\n *\n * @param name Required. The name of the topic. It must have the format\n * `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter, and contain only\n * letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`),\n * tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters in\n * length, and it must not start with `"goog"`.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #createTopic(TopicName)} instead.\n */\n @Deprecated\n public final Topic createTopic(ProjectTopicName name) {\n Topic request = Topic.newBuilder().setName(name == null ? null : name.toString()).build();\n return createTopic(request);\n }\n' +CREATE_TOPIC_PREVIOUS = '(\\s+public final Topic createTopic\\(String name\\) {\\n\\s+.*\\n\\s+return.*\\n\\s+})' +DELETE_TOPIC = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD\n /**\n * Deletes the topic with the given name. Returns `NOT_FOUND` if the topic does not exist. After a\n * topic is deleted, a new topic may be created with the same name; this is an entirely new topic\n * with none of the old configuration or subscriptions. Existing subscriptions to this topic are\n * not deleted, but their `topic` field is set to `_deleted-topic_`.\n *\n *

Sample code:\n *\n *

\n   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {\n   *   ProjectTopicName topic = ProjectTopicName.of("[PROJECT]", "[TOPIC]");\n   *   topicAdminClient.deleteTopic(topic);\n   * }\n   * 
\n *\n * @param topic Required. Name of the topic to delete. Format is\n * `projects/{project}/topics/{topic}`.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #deleteTopic(TopicName)} instead.\n */\n @Deprecated\n public final void deleteTopic(ProjectTopicName topic) {\n DeleteTopicRequest request =\n DeleteTopicRequest.newBuilder().setTopic(topic == null ? null : topic.toString()).build();\n deleteTopic(request);\n }\n' +GET_TOPIC_PREVIOUS = '(\\s+public final Topic getTopic\\(String topic\\) {\\n\\s+.*\\n\\s+return.*\\n\\s+})' +GET_TOPIC = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD\n /**\n * Gets the configuration of a topic.\n *\n *

Sample code:\n *\n *

\n   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {\n   *   ProjectTopicName topic = ProjectTopicName.of("[PROJECT]", "[TOPIC]");\n   *   Topic response = topicAdminClient.getTopic(topic);\n   * }\n   * 
\n *\n * @param topic Required. The name of the topic to get. Format is\n * `projects/{project}/topics/{topic}`.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #getTopic(TopicName)} instead.\n */\n @Deprecated\n public final Topic getTopic(ProjectTopicName topic) {\n GetTopicRequest request =\n GetTopicRequest.newBuilder().setTopic(topic == null ? null : topic.toString()).build();\n return getTopic(request);\n }\n' +DELETE_TOPIC_PREVIOUS = '(\\s+public final void deleteTopic\\(String topic\\) {\\n\\s+.*\\n\\s+deleteTopic.*\\n\\s+})' +LIST_TOPIC_SUBSCRIPTIONS = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD\n /**\n * Lists the names of the subscriptions on this topic.\n *\n *

Sample code:\n *\n *

\n   * try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {\n   *   ProjectTopicName topic = ProjectTopicName.of("[PROJECT]", "[TOPIC]");\n   *   for (ProjectSubscriptionName element : topicAdminClient.listTopicSubscriptions(topic).iterateAllAsProjectSubscriptionName()) {\n   *     // doThingsWith(element);\n   *   }\n   * }\n   * 
\n *\n * @param topic Required. The name of the topic that subscriptions are attached to. Format is\n * `projects/{project}/topics/{topic}`.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #listTopicSubscriptions(TopicName)} instead.\n */\n @Deprecated\n public final ListTopicSubscriptionsPagedResponse listTopicSubscriptions(ProjectTopicName topic) {\n ListTopicSubscriptionsRequest request =\n ListTopicSubscriptionsRequest.newBuilder()\n .setTopic(topic == null ? null : topic.toString())\n .build();\n return listTopicSubscriptions(request);\n }\n' +LIST_TOPIC_SUBSCRIPTIONS_PREVIOUS = '(\\s+public final ListTopicSubscriptionsPagedResponse listTopicSubscriptions\\(String topic\\) {\\n\\s+.*\\n\\s+.*\\n\\s+return.*\\n\\s+})' +CREATE_SUBSCRIPTION_PREVIOUS = '(\\s+public final Subscription createSubscription\\(Subscription request\\) {\\n\\s+return.*\\n\\s+})' +CREATE_SUBSCRIPTION = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD\n /**\n * Creates a subscription to a given topic. See the <a\n * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name\n * rules</a>. If the subscription already exists, returns `ALREADY_EXISTS`. If the\n * corresponding topic doesn\'t exist, returns `NOT_FOUND`.\n *\n *

If the name is not provided in the request, the server will assign a random name for this\n * subscription on the same project as the topic, conforming to the [resource name\n * format](https://cloud.google.com/pubsub/docs/admin#resource_names). The generated name is\n * populated in the returned Subscription object. Note that for REST API requests, you must\n * specify a name in the request.\n *\n *

Sample code:\n *\n *

\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSubscriptionName name = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");\n   *   ProjectTopicName topic = ProjectTopicName.of("[PROJECT]", "[TOPIC]");\n   *   PushConfig pushConfig = PushConfig.newBuilder().build();\n   *   int ackDeadlineSeconds = 0;\n   *   Subscription response = subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);\n   * }\n   * 
\n *\n * @param name Required. The name of the subscription. It must have the format\n * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a\n * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores\n * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3\n * and 255 characters in length, and it must not start with `"goog"`.\n * @param topic Required. The name of the topic from which this subscription is receiving\n * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be\n * `_deleted-topic_` if the topic has been deleted.\n * @param pushConfig If push delivery is used with this subscription, this field is used to\n * configure it. An empty `pushConfig` signifies that the subscriber will pull and ack\n * messages using API methods.\n * @param ackDeadlineSeconds The approximate amount of time (on a best-effort basis) Pub/Sub waits\n * for the subscriber to acknowledge receipt before resending the message. In the interval\n * after the message is delivered and before it is acknowledged, it is considered to be\n * <i>outstanding</i>. During that time period, the message will not be\n * redelivered (on a best-effort basis).\n *

For pull subscriptions, this value is used as the initial value for the ack deadline. To\n * override this value for a given message, call `ModifyAckDeadline` with the corresponding\n * `ack_id` if using non-streaming pull or send the `ack_id` in a\n * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline\n * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds\n * (10 minutes). If this parameter is 0, a default value of 10 seconds is used.\n *

For push delivery, this value is also used to set the request timeout for the call to\n * the push endpoint.\n *

If the subscriber never acknowledges the message, the Pub/Sub system will eventually\n * redeliver the message.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #createSubscription(SubscriptionName, TopicName, PushConfig, int)} instead.\n */\n @Deprecated\n public final Subscription createSubscription(\n ProjectSubscriptionName name,\n ProjectTopicName topic,\n PushConfig pushConfig,\n int ackDeadlineSeconds) {\n Subscription request =\n Subscription.newBuilder()\n .setName(name == null ? null : name.toString())\n .setTopic(topic == null ? null : topic.toString())\n .setPushConfig(pushConfig)\n .setAckDeadlineSeconds(ackDeadlineSeconds)\n .build();\n return createSubscription(request);\n }\n \n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Creates a subscription to a given topic. See the [resource name rules]\n * (https://cloud.google.com/pubsub/docs/admin#resource_names). If the subscription already\n * exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn\'t exist, returns\n * `NOT_FOUND`.\n *\n *

If the name is not provided in the request, the server will assign a random name for this\n * subscription on the same project as the topic, conforming to the [resource name format]\n * (https://cloud.google.com/pubsub/docs/admin#resource_names). The generated name is populated in\n * the returned Subscription object. Note that for REST API requests, you must specify a name in\n * the request.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSubscriptionName name = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");\n   *   String topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString();\n   *   PushConfig pushConfig = PushConfig.newBuilder().build();\n   *   int ackDeadlineSeconds = 2135351438;\n   *   Subscription response =\n   *       subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);\n   * }\n   * }
\n *\n * @param name Required. The name of the subscription. It must have the format\n * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a\n * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores\n * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3\n * and 255 characters in length, and it must not start with `"goog"`.\n * @param topic Required. The name of the topic from which this subscription is receiving\n * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be\n * `_deleted-topic_` if the topic has been deleted.\n * @param pushConfig If push delivery is used with this subscription, this field is used to\n * configure it. An empty `pushConfig` signifies that the subscriber will pull and ack\n * messages using API methods.\n * @param ackDeadlineSeconds The approximate amount of time (on a best-effort basis) Pub/Sub waits\n * for the subscriber to acknowledge receipt before resending the message. In the interval\n * after the message is delivered and before it is acknowledged, it is considered to be\n * <i>outstanding</i>. During that time period, the message will not be\n * redelivered (on a best-effort basis).\n *

For pull subscriptions, this value is used as the initial value for the ack deadline. To\n * override this value for a given message, call `ModifyAckDeadline` with the corresponding\n * `ack_id` if using non-streaming pull or send the `ack_id` in a\n * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline\n * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds\n * (10 minutes). If this parameter is 0, a default value of 10 seconds is used.\n *

For push delivery, this value is also used to set the request timeout for the call to\n * the push endpoint.\n *

If the subscriber never acknowledges the message, the Pub/Sub system will eventually\n * redeliver the message.\n * @deprecated Use {@link #createSubscription(SubscriptionName, String, PushConfig, int)} instead.\n */\n @Deprecated\n public final Subscription createSubscription(\n ProjectSubscriptionName name, String topic, PushConfig pushConfig, int ackDeadlineSeconds) {\n Subscription request =\n Subscription.newBuilder()\n .setName(name == null ? null : name.toString())\n .setTopic(topic)\n .setPushConfig(pushConfig)\n .setAckDeadlineSeconds(ackDeadlineSeconds)\n .build();\n return createSubscription(request);\n }\n \n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Creates a subscription to a given topic. See the [resource name rules]\n * (https://cloud.google.com/pubsub/docs/admin#resource_names). If the subscription already\n * exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn\'t exist, returns\n * `NOT_FOUND`.\n *\n *

If the name is not provided in the request, the server will assign a random name for this\n * subscription on the same project as the topic, conforming to the [resource name format]\n * (https://cloud.google.com/pubsub/docs/admin#resource_names). The generated name is populated in\n * the returned Subscription object. Note that for REST API requests, you must specify a name in\n * the request.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSubscriptionName name = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");\n   *   TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");\n   *   PushConfig pushConfig = PushConfig.newBuilder().build();\n   *   int ackDeadlineSeconds = 2135351438;\n   *   Subscription response =\n   *       subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);\n   * }\n   * }
\n *\n * @param name Required. The name of the subscription. It must have the format\n * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a\n * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores\n * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3\n * and 255 characters in length, and it must not start with `"goog"`.\n * @param topic Required. The name of the topic from which this subscription is receiving\n * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be\n * `_deleted-topic_` if the topic has been deleted.\n * @param pushConfig If push delivery is used with this subscription, this field is used to\n * configure it. An empty `pushConfig` signifies that the subscriber will pull and ack\n * messages using API methods.\n * @param ackDeadlineSeconds The approximate amount of time (on a best-effort basis) Pub/Sub waits\n * for the subscriber to acknowledge receipt before resending the message. In the interval\n * after the message is delivered and before it is acknowledged, it is considered to be\n * <i>outstanding</i>. During that time period, the message will not be\n * redelivered (on a best-effort basis).\n *

For pull subscriptions, this value is used as the initial value for the ack deadline. To\n * override this value for a given message, call `ModifyAckDeadline` with the corresponding\n * `ack_id` if using non-streaming pull or send the `ack_id` in a\n * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline\n * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds\n * (10 minutes). If this parameter is 0, a default value of 10 seconds is used.\n *

For push delivery, this value is also used to set the request timeout for the call to\n * the push endpoint.\n *

If the subscriber never acknowledges the message, the Pub/Sub system will eventually\n * redeliver the message.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #createSubscription(SubscriptionName, TopicName, PushConfig, int)} instead.\n */\n @Deprecated\n public final Subscription createSubscription(\n ProjectSubscriptionName name,\n TopicName topic,\n PushConfig pushConfig,\n int ackDeadlineSeconds) {\n Subscription request =\n Subscription.newBuilder()\n .setName(name == null ? null : name.toString())\n .setTopic(topic == null ? null : topic.toString())\n .setPushConfig(pushConfig)\n .setAckDeadlineSeconds(ackDeadlineSeconds)\n .build();\n return createSubscription(request);\n }\n' +GET_SUBSCRIPTION_PREVIOUS = '(\\s+public final Subscription getSubscription\\(GetSubscriptionRequest request\\) {\\n\\s+return.*\\n\\s+})' +GET_SUBSCRIPTION = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Gets the configuration details of a subscription.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");\n   *   Subscription response = subscriptionAdminClient.getSubscription(subscription);\n   * }\n   * }
\n *\n * @param subscription Required. The name of the subscription to get. Format is\n * `projects/{project}/subscriptions/{sub}`.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #getSubscription(SubscriptionName)} instead. \n */\n @Deprecated\n public final Subscription getSubscription(ProjectSubscriptionName subscription) {\n GetSubscriptionRequest request =\n GetSubscriptionRequest.newBuilder()\n .setSubscription(subscription == null ? null : subscription.toString())\n .build();\n return getSubscription(request);\n }\n' +DELETE_SUBSCRIPTION_PREVIOUS = '(\\s+public final void deleteSubscription\\(DeleteSubscriptionRequest request\\) {\\n\\s+deleteSubscription.*\\n\\s+})' +DELETE_SUBSCRIPTION = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Deletes an existing subscription. All messages retained in the subscription are immediately\n * dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is\n * deleted, a new one may be created with the same name, but the new one has no association with\n * the old subscription or its topic unless the same topic is specified.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");\n   *   subscriptionAdminClient.deleteSubscription(subscription);\n   * }\n   * }
\n *\n * @param subscription Required. The subscription to delete. Format is\n * `projects/{project}/subscriptions/{sub}`.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #deleteSubscription(SubscriptionName)} instead.\n */\n @Deprecated\n public final void deleteSubscription(ProjectSubscriptionName subscription) {\n DeleteSubscriptionRequest request =\n DeleteSubscriptionRequest.newBuilder()\n .setSubscription(subscription == null ? null : subscription.toString())\n .build();\n deleteSubscription(request);\n }\n' +MODIFY_ACK_DEADLINE_PREVIOUS = '(\\s+public final void modifyAckDeadline\\(ModifyAckDeadlineRequest request\\) {\\n\\s+modifyAckDeadline.*\\n\\s+})' +MODIFY_ACK_DEADLINE = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Modifies the ack deadline for a specific message. This method is useful to indicate that more\n * time is needed to process a message by the subscriber, or to make the message available for\n * redelivery if the processing was interrupted. Note that this does not modify the\n * subscription-level `ackDeadlineSeconds` used for subsequent messages.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");\n   *   List ackIds = new ArrayList<>();\n   *   int ackDeadlineSeconds = 2135351438;\n   *   subscriptionAdminClient.modifyAckDeadline(subscription, ackIds, ackDeadlineSeconds);\n   * }\n   * }
\n *\n * @param subscription Required. The name of the subscription. Format is\n * `projects/{project}/subscriptions/{sub}`.\n * @param ackIds Required. List of acknowledgment IDs.\n * @param ackDeadlineSeconds Required. The new ack deadline with respect to the time this request\n * was sent to the Pub/Sub system. For example, if the value is 10, the new ack deadline will\n * expire 10 seconds after the `ModifyAckDeadline` call was made. Specifying zero might\n * immediately make the message available for delivery to another subscriber client. This\n * typically results in an increase in the rate of message redeliveries (that is, duplicates).\n * The minimum deadline you can specify is 0 seconds. The maximum deadline you can specify is\n * 600 seconds (10 minutes).\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #modifyAckDeadline(SubscriptionName, List, int)} instead.\n */\n @Deprecated\n final void modifyAckDeadline(\n ProjectSubscriptionName subscription, List ackIds, int ackDeadlineSeconds) {\n ModifyAckDeadlineRequest request =\n ModifyAckDeadlineRequest.newBuilder()\n .setSubscription(subscription == null ? null : subscription.toString())\n .addAllAckIds(ackIds)\n .setAckDeadlineSeconds(ackDeadlineSeconds)\n .build();\n modifyAckDeadline(request);\n }\n' +ACKNOWLEDGE_PREVIOUS = '(\\s+public final void acknowledge\\(AcknowledgeRequest request\\) {\\n\\s+acknowledge.*\\n\\s+})' +ACKNOWLEDGE = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The\n * Pub/Sub system can remove the relevant messages from the subscription.\n *\n *

Acknowledging a message whose ack deadline has expired may succeed, but such a message may\n * be redelivered later. Acknowledging a message more than once will not result in an error.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");\n   *   List ackIds = new ArrayList<>();\n   *   subscriptionAdminClient.acknowledge(subscription, ackIds);\n   * }\n   * }
\n *\n * @param subscription Required. The subscription whose message is being acknowledged. Format is\n * `projects/{project}/subscriptions/{sub}`.\n * @param ackIds Required. The acknowledgment ID for the messages being acknowledged that was\n * returned by the Pub/Sub system in the `Pull` response. Must not be empty.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #acknowledge(SubscriptionName, List)} instead.\n */\n @Deprecated\n public final void acknowledge(ProjectSubscriptionName subscription, List ackIds) {\n AcknowledgeRequest request =\n AcknowledgeRequest.newBuilder()\n .setSubscription(subscription == null ? null : subscription.toString())\n .addAllAckIds(ackIds)\n .build();\n acknowledge(request);\n }\n' +PULL_PREVIOUS = '(\\s+public final PullResponse pull\\(PullRequest request\\) {\\n\\s+return.*\\n\\s+})' +PULL = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Pulls messages from the server. The server may return `UNAVAILABLE` if there are too many\n * concurrent pull requests pending for the given subscription.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");\n   *   int maxMessages = 496131527;\n   *   PullResponse response = subscriptionAdminClient.pull(subscription, maxMessages);\n   * }\n   * }
\n *\n * @param subscription Required. The subscription from which messages should be pulled. Format is\n * `projects/{project}/subscriptions/{sub}`.\n * @param maxMessages Required. The maximum number of messages to return for this request. Must be\n * a positive integer. The Pub/Sub system may return fewer than the number specified.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #pull(SubscriptionName, int)} instead.\n */\n @Deprecated\n public final PullResponse pull(ProjectSubscriptionName subscription, int maxMessages) {\n PullRequest request =\n PullRequest.newBuilder()\n .setSubscription(subscription == null ? null : subscription.toString())\n .setMaxMessages(maxMessages)\n .build();\n return pull(request);\n }\n \n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Pulls messages from the server. The server may return `UNAVAILABLE` if there are too many\n * concurrent pull requests pending for the given subscription.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");\n   *   boolean returnImmediately = true;\n   *   int maxMessages = 496131527;\n   *   PullResponse response =\n   *       subscriptionAdminClient.pull(subscription, returnImmediately, maxMessages);\n   * }\n   * }
\n *\n * @param subscription Required. The subscription from which messages should be pulled. Format is\n * `projects/{project}/subscriptions/{sub}`.\n * @param returnImmediately Optional. If this field set to true, the system will respond\n * immediately even if it there are no messages available to return in the `Pull` response.\n * Otherwise, the system may wait (for a bounded amount of time) until at least one message is\n * available, rather than returning no messages. Warning: setting this field to `true` is\n * discouraged because it adversely impacts the performance of `Pull` operations. We recommend\n * that users do not set this field.\n * @param maxMessages Required. The maximum number of messages to return for this request. Must be\n * a positive integer. The Pub/Sub system may return fewer than the number specified.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #pull(SubscriptionName, boolean, int)} instead.\n */\n @Deprecated\n final PullResponse pull(\n ProjectSubscriptionName subscription, boolean returnImmediately, int maxMessages) {\n PullRequest request =\n PullRequest.newBuilder()\n .setSubscription(subscription == null ? null : subscription.toString())\n .setReturnImmediately(returnImmediately)\n .setMaxMessages(maxMessages)\n .build();\n return pull(request);\n }\n' +MODIFY_PUSH_CONFIG_PREVIOUS = '(\\s+public final void modifyPushConfig\\(ModifyPushConfigRequest request\\) {\\n\\s+modifyPushConfig.*\\n\\s+})' +MODIFY_PUSH_CONFIG = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Modifies the `PushConfig` for a specified subscription.\n *\n *

This may be used to change a push subscription to a pull one (signified by an empty\n * `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push\n * subscription. Messages will accumulate for delivery continuously through the call regardless of\n * changes to the `PushConfig`.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");\n   *   PushConfig pushConfig = PushConfig.newBuilder().build();\n   *   subscriptionAdminClient.modifyPushConfig(subscription, pushConfig);\n   * }\n   * }
\n *\n * @param subscription Required. The name of the subscription. Format is\n * `projects/{project}/subscriptions/{sub}`.\n * @param pushConfig Required. The push configuration for future deliveries.\n *

An empty `pushConfig` indicates that the Pub/Sub system should stop pushing messages\n * from the given subscription and allow messages to be pulled and acknowledged - effectively\n * pausing the subscription if `Pull` or `StreamingPull` is not called.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use {@link #modifyPushConfig(SubscriptionName, PushConfig)} instead.\n */\n @Deprecated\n public final void modifyPushConfig(ProjectSubscriptionName subscription, PushConfig pushConfig) {\n ModifyPushConfigRequest request =\n ModifyPushConfigRequest.newBuilder()\n .setSubscription(subscription == null ? null : subscription.toString())\n .setPushConfig(pushConfig)\n .build();\n modifyPushConfig(request);\n }\n' +CREATE_SNAPSHOT_PREVIOUS = '(\\s+public final Snapshot createSnapshot\\(CreateSnapshotRequest request\\) {\\n\\s+return.*\\n\\s+})' +CREATE_SNAPSHOT = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Creates a snapshot from the requested subscription. Snapshots are used in\n * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to\n * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of\n * messages in an existing subscription to the state captured by a snapshot. If the snapshot\n * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn\'t exist, returns\n * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would\n * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the\n * `Snapshot.expire_time` field. If the name is not provided in the request, the server will\n * assign a random name for this snapshot on the same project as the subscription, conforming to\n * the [resource name format] (https://cloud.google.com/pubsub/docs/admin#resource_names). The\n * generated name is populated in the returned Snapshot object. Note that for REST API requests,\n * you must specify a name in the request.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSnapshotName name = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]");\n   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");\n   *   Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);\n   * }\n   * }
\n *\n * @param name Required. User-provided name for this snapshot. If the name is not provided in the\n * request, the server will assign a random name for this snapshot on the same project as the\n * subscription. Note that for REST API requests, you must specify a name. See the <a\n * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name\n * rules</a>. Format is `projects/{project}/snapshots/{snap}`.\n * @param subscription Required. The subscription whose backlog the snapshot retains.\n * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the\n * subscription. More precisely, this is defined as the messages in the subscription\'s backlog\n * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as\n * well as: (b) Any messages published to the subscription\'s topic following the successful\n * completion of the CreateSnapshot request. Format is\n * `projects/{project}/subscriptions/{sub}`.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use Use {@link #createSnapshot(SnapshotName, SubscriptionName)} instead.\n */\n @Deprecated\n public final Snapshot createSnapshot(\n ProjectSnapshotName name, ProjectSubscriptionName subscription) {\n CreateSnapshotRequest request =\n CreateSnapshotRequest.newBuilder()\n .setName(name == null ? null : name.toString())\n .setSubscription(subscription == null ? null : subscription.toString())\n .build();\n return createSnapshot(request);\n }\n \n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Creates a snapshot from the requested subscription. Snapshots are used in\n * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to\n * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of\n * messages in an existing subscription to the state captured by a snapshot. If the snapshot\n * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn\'t exist, returns\n * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would\n * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the\n * `Snapshot.expire_time` field. If the name is not provided in the request, the server will\n * assign a random name for this snapshot on the same project as the subscription, conforming to\n * the [resource name format] (https://cloud.google.com/pubsub/docs/admin#resource_names). The\n * generated name is populated in the returned Snapshot object. Note that for REST API requests,\n * you must specify a name in the request.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   String name = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString();\n   *   ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");\n   *   Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);\n   * }\n   * }
\n *\n * @param name Required. User-provided name for this snapshot. If the name is not provided in the\n * request, the server will assign a random name for this snapshot on the same project as the\n * subscription. Note that for REST API requests, you must specify a name. See the <a\n * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name\n * rules</a>. Format is `projects/{project}/snapshots/{snap}`.\n * @param subscription Required. The subscription whose backlog the snapshot retains.\n * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the\n * subscription. More precisely, this is defined as the messages in the subscription\'s backlog\n * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as\n * well as: (b) Any messages published to the subscription\'s topic following the successful\n * completion of the CreateSnapshot request. Format is\n * `projects/{project}/subscriptions/{sub}`.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use Use {@link #createSnapshot(String, SubscriptionName)} instead.\n */\n @Deprecated\n public final Snapshot createSnapshot(String name, ProjectSubscriptionName subscription) {\n CreateSnapshotRequest request =\n CreateSnapshotRequest.newBuilder()\n .setName(name)\n .setSubscription(subscription == null ? null : subscription.toString())\n .build();\n return createSnapshot(request);\n }\n \n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Creates a snapshot from the requested subscription. Snapshots are used in\n * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to\n * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of\n * messages in an existing subscription to the state captured by a snapshot. If the snapshot\n * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn\'t exist, returns\n * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would\n * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the\n * `Snapshot.expire_time` field. If the name is not provided in the request, the server will\n * assign a random name for this snapshot on the same project as the subscription, conforming to\n * the [resource name format] (https://cloud.google.com/pubsub/docs/admin#resource_names). The\n * generated name is populated in the returned Snapshot object. Note that for REST API requests,\n * you must specify a name in the request.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSnapshotName name = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]");\n   *   String subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();\n   *   Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);\n   * }\n   * }
\n *\n * @param name Required. User-provided name for this snapshot. If the name is not provided in the\n * request, the server will assign a random name for this snapshot on the same project as the\n * subscription. Note that for REST API requests, you must specify a name. See the <a\n * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name\n * rules</a>. Format is `projects/{project}/snapshots/{snap}`.\n * @param subscription Required. The subscription whose backlog the snapshot retains.\n * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the\n * subscription. More precisely, this is defined as the messages in the subscription\'s backlog\n * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as\n * well as: (b) Any messages published to the subscription\'s topic following the successful\n * completion of the CreateSnapshot request. Format is\n * `projects/{project}/subscriptions/{sub}`.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use Use {@link #createSnapshot(SnapshotName, String)} instead.\n */\n @Deprecated\n public final Snapshot createSnapshot(ProjectSnapshotName name, String subscription) {\n CreateSnapshotRequest request =\n CreateSnapshotRequest.newBuilder()\n .setName(name == null ? null : name.toString())\n .setSubscription(subscription)\n .build();\n return createSnapshot(request);\n }\n' +DELETE_SNAPSHOT_PREVIOUS = '(\\s+public final void deleteSnapshot\\(DeleteSnapshotRequest request\\) {\\n\\s+deleteSnapshot.*\\n\\s+})' +DELETE_SNAPSHOT = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Removes an existing snapshot. Snapshots are used in [Seek]\n * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage\n * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in\n * an existing subscription to the state captured by a snapshot. When the snapshot is deleted, all\n * messages retained in the snapshot are immediately dropped. After a snapshot is deleted, a new\n * one may be created with the same name, but the new one has no association with the old snapshot\n * or its subscription, unless the same subscription is specified.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSnapshotName snapshot = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]");\n   *   subscriptionAdminClient.deleteSnapshot(snapshot);\n   * }\n   * }
\n *\n * @param snapshot Required. The name of the snapshot to delete. Format is\n * `projects/{project}/snapshots/{snap}`.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use Use {@link #deleteSnapshot(SnapshotName)} instead.\n */\n @Deprecated\n public final void deleteSnapshot(ProjectSnapshotName snapshot) {\n DeleteSnapshotRequest request =\n DeleteSnapshotRequest.newBuilder()\n .setSnapshot(snapshot == null ? null : snapshot.toString())\n .build();\n deleteSnapshot(request);\n }\n' +GET_SNAPSHOT_PREVIOUS = '(\\s+public final Snapshot getSnapshot\\(GetSnapshotRequest request\\) {\\n\\s+return.*\\n\\s+})' +GET_SNAPSHOT = '\n // AUTO-GENERATED DOCUMENTATION AND METHOD.\n /**\n * Gets the configuration details of a snapshot. Snapshots are used in <a\n * href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a> operations, which\n * allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment\n * state of messages in an existing subscription to the state captured by a snapshot.\n *\n *

Sample code:\n *\n *

{@code\n   * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {\n   *   ProjectSnapshotName snapshot = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]");\n   *   Snapshot response = subscriptionAdminClient.getSnapshot(snapshot);\n   * }\n   * }
\n *\n * @param snapshot Required. The name of the snapshot to get. Format is\n * `projects/{project}/snapshots/{snap}`.\n * @throws com.google.api.gax.rpc.ApiException if the remote call fails\n * @deprecated Use Use {@link #getSnapshot(SnapshotName)} instead.\n */\n @Deprecated\n public final Snapshot getSnapshot(ProjectSnapshotName snapshot) {\n GetSnapshotRequest request =\n GetSnapshotRequest.newBuilder()\n .setSnapshot(snapshot == null ? null : snapshot.toString())\n .build();\n return getSnapshot(request);\n } \n' +PACKAGE = 'package com.google.cloud.pubsub.v1;' +IMPORT_PROJECT_TOPIC_NAME = 'import com.google.pubsub.v1.ProjectTopicName;' +IMPORT_PROJECT_SUBSCRIPTION_NAME = 'import com.google.pubsub.v1.ProjectSubscriptionName;' +IMPORT_PROJECT_SNAPSHOT_NAME = 'import com.google.pubsub.v1.ProjectSnapshotName;' + +for library in s.get_staging_dirs(): + # put any special-case replacements here + s.replace('**/stub/SubscriberStubSettings.java', 'setMaxInboundMessageSize\\(Integer.MAX_VALUE\\)', 'setMaxInboundMessageSize(20 << 20)') + s.replace('**/TopicAdminClient.java', GET_IAM_POLICY_PREVIOUS, '\\g<1>\n\n' + GET_IAM_POLICY_TOPIC) + s.replace('**/TopicAdminClient.java', SET_IAM_POLICY_PREVIOUS, '\\g<1>\n\n' + SET_IAM_POLICY_TOPIC) + s.replace('**/TopicAdminClient.java', TEST_IAM_PERMISSIONS_PREVIOUS, '\\g<1>\n\n' + TEST_IAM_PERMISSIONS_TOPIC) + s.replace('**/SubscriptionAdminClient.java', GET_IAM_POLICY_PREVIOUS, '\\g<1>\n\n' + GET_IAM_POLICY_SUBSCRIPTION) + s.replace('**/SubscriptionAdminClient.java', SET_IAM_POLICY_PREVIOUS, '\\g<1>\n\n' + SET_IAM_POLICY_SUBSCRIPTION) + s.replace('**/SubscriptionAdminClient.java', TEST_IAM_PERMISSIONS_PREVIOUS, '\\g<1>\n\n' + TEST_IAM_PERMISSIONS_SUBSCRIPTION) + s.replace('**/TopicAdminClient.java', CREATE_TOPIC_PREVIOUS, '\\g<1>\n\n' + CREATE_TOPIC) + s.replace('**/TopicAdminClient.java', DELETE_TOPIC_PREVIOUS, '\\g<1>\n\n' + DELETE_TOPIC) + s.replace('**/TopicAdminClient.java', LIST_TOPIC_SUBSCRIPTIONS_PREVIOUS, '\\g<1>\n\n' + LIST_TOPIC_SUBSCRIPTIONS) + s.replace('**/TopicAdminClient.java', GET_TOPIC_PREVIOUS, '\\g<1>\n\n' + GET_TOPIC) + s.replace('**/SubscriptionAdminClient.java', CREATE_SUBSCRIPTION_PREVIOUS, '\\g<1>\n\n' + CREATE_SUBSCRIPTION) + s.replace('**/SubscriptionAdminClient.java', DELETE_SUBSCRIPTION_PREVIOUS, '\\g<1>\n\n' + DELETE_SUBSCRIPTION) + s.replace('**/SubscriptionAdminClient.java', GET_SUBSCRIPTION_PREVIOUS, '\\g<1>\n\n' + GET_SUBSCRIPTION) + s.replace('**/SubscriptionAdminClient.java', MODIFY_ACK_DEADLINE_PREVIOUS, '\\g<1>\n\n' + MODIFY_ACK_DEADLINE) + s.replace('**/SubscriptionAdminClient.java', ACKNOWLEDGE_PREVIOUS, '\\g<1>\n\n' + ACKNOWLEDGE) + s.replace('**/SubscriptionAdminClient.java', PULL_PREVIOUS, '\\g<1>\n\n' + PULL) + s.replace('**/SubscriptionAdminClient.java', MODIFY_PUSH_CONFIG_PREVIOUS, '\\g<1>\n\n' + MODIFY_PUSH_CONFIG) + s.replace('**/SubscriptionAdminClient.java', CREATE_SNAPSHOT_PREVIOUS, '\\g<1>\n\n' + CREATE_SNAPSHOT) + s.replace('**/SubscriptionAdminClient.java', GET_SNAPSHOT_PREVIOUS, '\\g<1>\n\n' + GET_SNAPSHOT) + s.replace('**/SubscriptionAdminClient.java', DELETE_SNAPSHOT_PREVIOUS, '\\g<1>\n\n' + DELETE_SNAPSHOT) + s.replace('**/*AdminClient.java', PACKAGE, PACKAGE + '\n\n' + IMPORT_PROJECT_TOPIC_NAME + '\n' + IMPORT_PROJECT_SUBSCRIPTION_NAME + '\n' + IMPORT_PROJECT_SNAPSHOT_NAME + '\n') + s.move(library) +s.remove_staging_dirs() +java.common_templates(monorepo=True, excludes=[ + ".github/*", + ".kokoro/*", + "samples/*", + "CODE_OF_CONDUCT.md", + "CONTRIBUTING.md", + "LICENSE", + "SECURITY.md", + "java.header", + "license-checks.xml", + "renovate.json", + ".gitignore" +]) diff --git a/java-pubsub/pom.xml b/java-pubsub/pom.xml new file mode 100644 index 000000000000..befd4960d462 --- /dev/null +++ b/java-pubsub/pom.xml @@ -0,0 +1,130 @@ + + + 4.0.0 + com.google.cloud + google-cloud-pubsub-parent + pom + 1.149.1-SNAPSHOT + Google Cloud Pub/Sub Parent + https://github.com/googleapis/google-cloud-java + + Java idiomatic client for Google Cloud Platform services. + + + + com.google.cloud + google-cloud-jar-parent + 1.82.0-SNAPSHOT + ../google-cloud-jar-parent/pom.xml + + + + + chingor + Jeff Ching + chingor@google.com + Google + + Developer + + + + + Google LLC + + + scm:git:git@github.com:googleapis/google-cloud-java.git + scm:git:git@github.com:googleapis/google-cloud-java.git + https://github.com/googleapis/google-cloud-java + HEAD + + + https://github.com/googleapis/google-cloud-java/issues + GitHub Issues + + + + + Apache-2.0 + https://www.apache.org/licenses/LICENSE-2.0.txt + + + + + UTF-8 + UTF-8 + github + google-cloud-pubsub-parent + + + + + + + com.google.api.grpc + proto-google-cloud-pubsub-v1 + 1.131.1-SNAPSHOT + + + com.google.api.grpc + grpc-google-cloud-pubsub-v1 + 1.131.1-SNAPSHOT + + + com.google.cloud + google-cloud-pubsub + 1.149.1-SNAPSHOT + + + + org.easymock + easymock + 5.6.0 + test + + + com.google.truth + truth + 1.4.5 + test + + + org.checkerframework + checker-qual + + + + + org.assertj + assertj-core + 3.27.7 + test + + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + org.objenesis:objenesis + javax.annotation:javax.annotation-api + + + + + + + + + google-cloud-pubsub + grpc-google-cloud-pubsub-v1 + proto-google-cloud-pubsub-v1 + google-cloud-pubsub-bom + + + diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/clirr-ignored-differences.xml b/java-pubsub/proto-google-cloud-pubsub-v1/clirr-ignored-differences.xml new file mode 100644 index 000000000000..75ea618eaae2 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/clirr-ignored-differences.xml @@ -0,0 +1,81 @@ + + + + + 7012 + com/google/pubsub/v1/*OrBuilder + * get*(*) + + + 7012 + com/google/pubsub/v1/*OrBuilder + boolean contains*(*) + + + 7012 + com/google/pubsub/v1/*OrBuilder + boolean has*(*) + + + + + 7006 + com/google/pubsub/v1/** + * getDefaultInstanceForType() + ** + + + 7006 + com/google/pubsub/v1/** + * addRepeatedField(*) + ** + + + 7006 + com/google/pubsub/v1/** + * clear() + ** + + + 7006 + com/google/pubsub/v1/** + * clearField(*) + ** + + + 7006 + com/google/pubsub/v1/** + * clearOneof(*) + ** + + + 7006 + com/google/pubsub/v1/** + * clone() + ** + + + 7006 + com/google/pubsub/v1/** + * mergeUnknownFields(*) + ** + + + 7006 + com/google/pubsub/v1/** + * setField(*) + ** + + + 7006 + com/google/pubsub/v1/** + * setRepeatedField(*) + ** + + + 7006 + com/google/pubsub/v1/** + * setUnknownFields(*) + ** + + diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/pom.xml b/java-pubsub/proto-google-cloud-pubsub-v1/pom.xml new file mode 100644 index 000000000000..797014929e3c --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/pom.xml @@ -0,0 +1,42 @@ + + 4.0.0 + com.google.api.grpc + proto-google-cloud-pubsub-v1 + 1.131.1-SNAPSHOT + proto-google-cloud-pubsub-v1 + PROTO library for proto-google-cloud-pubsub-v1 + + com.google.cloud + google-cloud-pubsub-parent + 1.149.1-SNAPSHOT + + + + com.google.protobuf + protobuf-java + + + com.google.api.grpc + proto-google-common-protos + + + com.google.api + api-common + + + com.google.guava + guava + + + + + + + org.codehaus.mojo + flatten-maven-plugin + + + + \ No newline at end of file diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/AIInference.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/AIInference.java new file mode 100644 index 000000000000..82440715acb5 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/AIInference.java @@ -0,0 +1,2019 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Configuration for making inference requests against Vertex AI models.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.AIInference} + */ +@com.google.protobuf.Generated +public final class AIInference extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.AIInference) + AIInferenceOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AIInference"); + } + + // Use AIInference.newBuilder() to construct. + private AIInference(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AIInference() { + endpoint_ = ""; + serviceAccountEmail_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto.internal_static_google_pubsub_v1_AIInference_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AIInference_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.AIInference.class, com.google.pubsub.v1.AIInference.Builder.class); + } + + public interface UnstructuredInferenceOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.AIInference.UnstructuredInference) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Optional. A parameters object to be included in each inference request.
+     * The parameters object is combined with the data field of the Pub/Sub
+     * message to form the inference request.
+     * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the parameters field is set. + */ + boolean hasParameters(); + + /** + * + * + *
+     * Optional. A parameters object to be included in each inference request.
+     * The parameters object is combined with the data field of the Pub/Sub
+     * message to form the inference request.
+     * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The parameters. + */ + com.google.protobuf.Struct getParameters(); + + /** + * + * + *
+     * Optional. A parameters object to be included in each inference request.
+     * The parameters object is combined with the data field of the Pub/Sub
+     * message to form the inference request.
+     * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.protobuf.StructOrBuilder getParametersOrBuilder(); + } + + /** + * + * + *
+   * Configuration for making inferences using arbitrary JSON payloads.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.AIInference.UnstructuredInference} + */ + public static final class UnstructuredInference extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.AIInference.UnstructuredInference) + UnstructuredInferenceOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UnstructuredInference"); + } + + // Use UnstructuredInference.newBuilder() to construct. + private UnstructuredInference(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private UnstructuredInference() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AIInference_UnstructuredInference_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AIInference_UnstructuredInference_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.AIInference.UnstructuredInference.class, + com.google.pubsub.v1.AIInference.UnstructuredInference.Builder.class); + } + + private int bitField0_; + public static final int PARAMETERS_FIELD_NUMBER = 1; + private com.google.protobuf.Struct parameters_; + + /** + * + * + *
+     * Optional. A parameters object to be included in each inference request.
+     * The parameters object is combined with the data field of the Pub/Sub
+     * message to form the inference request.
+     * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the parameters field is set. + */ + @java.lang.Override + public boolean hasParameters() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+     * Optional. A parameters object to be included in each inference request.
+     * The parameters object is combined with the data field of the Pub/Sub
+     * message to form the inference request.
+     * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The parameters. + */ + @java.lang.Override + public com.google.protobuf.Struct getParameters() { + return parameters_ == null ? com.google.protobuf.Struct.getDefaultInstance() : parameters_; + } + + /** + * + * + *
+     * Optional. A parameters object to be included in each inference request.
+     * The parameters object is combined with the data field of the Pub/Sub
+     * message to form the inference request.
+     * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.protobuf.StructOrBuilder getParametersOrBuilder() { + return parameters_ == null ? com.google.protobuf.Struct.getDefaultInstance() : parameters_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getParameters()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getParameters()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.AIInference.UnstructuredInference)) { + return super.equals(obj); + } + com.google.pubsub.v1.AIInference.UnstructuredInference other = + (com.google.pubsub.v1.AIInference.UnstructuredInference) obj; + + if (hasParameters() != other.hasParameters()) return false; + if (hasParameters()) { + if (!getParameters().equals(other.getParameters())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasParameters()) { + hash = (37 * hash) + PARAMETERS_FIELD_NUMBER; + hash = (53 * hash) + getParameters().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.AIInference.UnstructuredInference parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.AIInference.UnstructuredInference parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.AIInference.UnstructuredInference parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.AIInference.UnstructuredInference parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.AIInference.UnstructuredInference parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.AIInference.UnstructuredInference parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.AIInference.UnstructuredInference parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.AIInference.UnstructuredInference parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.AIInference.UnstructuredInference parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.AIInference.UnstructuredInference parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.AIInference.UnstructuredInference parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.AIInference.UnstructuredInference parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.AIInference.UnstructuredInference prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Configuration for making inferences using arbitrary JSON payloads.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.AIInference.UnstructuredInference} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.AIInference.UnstructuredInference) + com.google.pubsub.v1.AIInference.UnstructuredInferenceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AIInference_UnstructuredInference_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AIInference_UnstructuredInference_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.AIInference.UnstructuredInference.class, + com.google.pubsub.v1.AIInference.UnstructuredInference.Builder.class); + } + + // Construct using com.google.pubsub.v1.AIInference.UnstructuredInference.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetParametersFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + parameters_ = null; + if (parametersBuilder_ != null) { + parametersBuilder_.dispose(); + parametersBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AIInference_UnstructuredInference_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.AIInference.UnstructuredInference getDefaultInstanceForType() { + return com.google.pubsub.v1.AIInference.UnstructuredInference.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.AIInference.UnstructuredInference build() { + com.google.pubsub.v1.AIInference.UnstructuredInference result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.AIInference.UnstructuredInference buildPartial() { + com.google.pubsub.v1.AIInference.UnstructuredInference result = + new com.google.pubsub.v1.AIInference.UnstructuredInference(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.AIInference.UnstructuredInference result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.parameters_ = + parametersBuilder_ == null ? parameters_ : parametersBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.AIInference.UnstructuredInference) { + return mergeFrom((com.google.pubsub.v1.AIInference.UnstructuredInference) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.AIInference.UnstructuredInference other) { + if (other == com.google.pubsub.v1.AIInference.UnstructuredInference.getDefaultInstance()) + return this; + if (other.hasParameters()) { + mergeParameters(other.getParameters()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage( + internalGetParametersFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.Struct parameters_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Struct, + com.google.protobuf.Struct.Builder, + com.google.protobuf.StructOrBuilder> + parametersBuilder_; + + /** + * + * + *
+       * Optional. A parameters object to be included in each inference request.
+       * The parameters object is combined with the data field of the Pub/Sub
+       * message to form the inference request.
+       * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the parameters field is set. + */ + public boolean hasParameters() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+       * Optional. A parameters object to be included in each inference request.
+       * The parameters object is combined with the data field of the Pub/Sub
+       * message to form the inference request.
+       * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The parameters. + */ + public com.google.protobuf.Struct getParameters() { + if (parametersBuilder_ == null) { + return parameters_ == null + ? com.google.protobuf.Struct.getDefaultInstance() + : parameters_; + } else { + return parametersBuilder_.getMessage(); + } + } + + /** + * + * + *
+       * Optional. A parameters object to be included in each inference request.
+       * The parameters object is combined with the data field of the Pub/Sub
+       * message to form the inference request.
+       * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setParameters(com.google.protobuf.Struct value) { + if (parametersBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + parameters_ = value; + } else { + parametersBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. A parameters object to be included in each inference request.
+       * The parameters object is combined with the data field of the Pub/Sub
+       * message to form the inference request.
+       * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setParameters(com.google.protobuf.Struct.Builder builderForValue) { + if (parametersBuilder_ == null) { + parameters_ = builderForValue.build(); + } else { + parametersBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. A parameters object to be included in each inference request.
+       * The parameters object is combined with the data field of the Pub/Sub
+       * message to form the inference request.
+       * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeParameters(com.google.protobuf.Struct value) { + if (parametersBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && parameters_ != null + && parameters_ != com.google.protobuf.Struct.getDefaultInstance()) { + getParametersBuilder().mergeFrom(value); + } else { + parameters_ = value; + } + } else { + parametersBuilder_.mergeFrom(value); + } + if (parameters_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
+       * Optional. A parameters object to be included in each inference request.
+       * The parameters object is combined with the data field of the Pub/Sub
+       * message to form the inference request.
+       * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearParameters() { + bitField0_ = (bitField0_ & ~0x00000001); + parameters_ = null; + if (parametersBuilder_ != null) { + parametersBuilder_.dispose(); + parametersBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. A parameters object to be included in each inference request.
+       * The parameters object is combined with the data field of the Pub/Sub
+       * message to form the inference request.
+       * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.Struct.Builder getParametersBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetParametersFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. A parameters object to be included in each inference request.
+       * The parameters object is combined with the data field of the Pub/Sub
+       * message to form the inference request.
+       * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.StructOrBuilder getParametersOrBuilder() { + if (parametersBuilder_ != null) { + return parametersBuilder_.getMessageOrBuilder(); + } else { + return parameters_ == null + ? com.google.protobuf.Struct.getDefaultInstance() + : parameters_; + } + } + + /** + * + * + *
+       * Optional. A parameters object to be included in each inference request.
+       * The parameters object is combined with the data field of the Pub/Sub
+       * message to form the inference request.
+       * 
+ * + * .google.protobuf.Struct parameters = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Struct, + com.google.protobuf.Struct.Builder, + com.google.protobuf.StructOrBuilder> + internalGetParametersFieldBuilder() { + if (parametersBuilder_ == null) { + parametersBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Struct, + com.google.protobuf.Struct.Builder, + com.google.protobuf.StructOrBuilder>( + getParameters(), getParentForChildren(), isClean()); + parameters_ = null; + } + return parametersBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.AIInference.UnstructuredInference) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.AIInference.UnstructuredInference) + private static final com.google.pubsub.v1.AIInference.UnstructuredInference DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.AIInference.UnstructuredInference(); + } + + public static com.google.pubsub.v1.AIInference.UnstructuredInference getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public UnstructuredInference parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.AIInference.UnstructuredInference getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int inferenceModeCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object inferenceMode_; + + public enum InferenceModeCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + UNSTRUCTURED_INFERENCE(2), + INFERENCEMODE_NOT_SET(0); + private final int value; + + private InferenceModeCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static InferenceModeCase valueOf(int value) { + return forNumber(value); + } + + public static InferenceModeCase forNumber(int value) { + switch (value) { + case 2: + return UNSTRUCTURED_INFERENCE; + case 0: + return INFERENCEMODE_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public InferenceModeCase getInferenceModeCase() { + return InferenceModeCase.forNumber(inferenceModeCase_); + } + + public static final int ENDPOINT_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object endpoint_ = ""; + + /** + * + * + *
+   * Required. An endpoint to a Vertex AI model of the form
+   * `projects/{project}/locations/{location}/endpoints/{endpoint}` or
+   * `projects/{project}/locations/{location}/publishers/{publisher}/models/{model}`.
+   * Vertex AI API requests will be sent to this endpoint.
+   * 
+ * + * string endpoint = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The endpoint. + */ + @java.lang.Override + public java.lang.String getEndpoint() { + java.lang.Object ref = endpoint_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + endpoint_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. An endpoint to a Vertex AI model of the form
+   * `projects/{project}/locations/{location}/endpoints/{endpoint}` or
+   * `projects/{project}/locations/{location}/publishers/{publisher}/models/{model}`.
+   * Vertex AI API requests will be sent to this endpoint.
+   * 
+ * + * string endpoint = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for endpoint. + */ + @java.lang.Override + public com.google.protobuf.ByteString getEndpointBytes() { + java.lang.Object ref = endpoint_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + endpoint_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int UNSTRUCTURED_INFERENCE_FIELD_NUMBER = 2; + + /** + * + * + *
+   * Optional. Requests and responses can be any arbitrary JSON object.
+   * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the unstructuredInference field is set. + */ + @java.lang.Override + public boolean hasUnstructuredInference() { + return inferenceModeCase_ == 2; + } + + /** + * + * + *
+   * Optional. Requests and responses can be any arbitrary JSON object.
+   * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The unstructuredInference. + */ + @java.lang.Override + public com.google.pubsub.v1.AIInference.UnstructuredInference getUnstructuredInference() { + if (inferenceModeCase_ == 2) { + return (com.google.pubsub.v1.AIInference.UnstructuredInference) inferenceMode_; + } + return com.google.pubsub.v1.AIInference.UnstructuredInference.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. Requests and responses can be any arbitrary JSON object.
+   * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.AIInference.UnstructuredInferenceOrBuilder + getUnstructuredInferenceOrBuilder() { + if (inferenceModeCase_ == 2) { + return (com.google.pubsub.v1.AIInference.UnstructuredInference) inferenceMode_; + } + return com.google.pubsub.v1.AIInference.UnstructuredInference.getDefaultInstance(); + } + + public static final int SERVICE_ACCOUNT_EMAIL_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object serviceAccountEmail_ = ""; + + /** + * + * + *
+   * Optional. The service account to use to make prediction requests against
+   * endpoints. The resource creator or updater that specifies this field must
+   * have `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub [service
+   * agent]({$universe.dns_names.final_documentation_domain}/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + @java.lang.Override + public java.lang.String getServiceAccountEmail() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceAccountEmail_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The service account to use to make prediction requests against
+   * endpoints. The resource creator or updater that specifies this field must
+   * have `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub [service
+   * agent]({$universe.dns_names.final_documentation_domain}/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + @java.lang.Override + public com.google.protobuf.ByteString getServiceAccountEmailBytes() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serviceAccountEmail_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(endpoint_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, endpoint_); + } + if (inferenceModeCase_ == 2) { + output.writeMessage( + 2, (com.google.pubsub.v1.AIInference.UnstructuredInference) inferenceMode_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serviceAccountEmail_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, serviceAccountEmail_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(endpoint_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, endpoint_); + } + if (inferenceModeCase_ == 2) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 2, (com.google.pubsub.v1.AIInference.UnstructuredInference) inferenceMode_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serviceAccountEmail_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, serviceAccountEmail_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.AIInference)) { + return super.equals(obj); + } + com.google.pubsub.v1.AIInference other = (com.google.pubsub.v1.AIInference) obj; + + if (!getEndpoint().equals(other.getEndpoint())) return false; + if (!getServiceAccountEmail().equals(other.getServiceAccountEmail())) return false; + if (!getInferenceModeCase().equals(other.getInferenceModeCase())) return false; + switch (inferenceModeCase_) { + case 2: + if (!getUnstructuredInference().equals(other.getUnstructuredInference())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ENDPOINT_FIELD_NUMBER; + hash = (53 * hash) + getEndpoint().hashCode(); + hash = (37 * hash) + SERVICE_ACCOUNT_EMAIL_FIELD_NUMBER; + hash = (53 * hash) + getServiceAccountEmail().hashCode(); + switch (inferenceModeCase_) { + case 2: + hash = (37 * hash) + UNSTRUCTURED_INFERENCE_FIELD_NUMBER; + hash = (53 * hash) + getUnstructuredInference().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.AIInference parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.AIInference parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.AIInference parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.AIInference parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.AIInference parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.AIInference parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.AIInference parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.AIInference parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.AIInference parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.AIInference parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.AIInference parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.AIInference parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.AIInference prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Configuration for making inference requests against Vertex AI models.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.AIInference} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.AIInference) + com.google.pubsub.v1.AIInferenceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AIInference_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AIInference_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.AIInference.class, + com.google.pubsub.v1.AIInference.Builder.class); + } + + // Construct using com.google.pubsub.v1.AIInference.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + endpoint_ = ""; + if (unstructuredInferenceBuilder_ != null) { + unstructuredInferenceBuilder_.clear(); + } + serviceAccountEmail_ = ""; + inferenceModeCase_ = 0; + inferenceMode_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AIInference_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.AIInference getDefaultInstanceForType() { + return com.google.pubsub.v1.AIInference.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.AIInference build() { + com.google.pubsub.v1.AIInference result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.AIInference buildPartial() { + com.google.pubsub.v1.AIInference result = new com.google.pubsub.v1.AIInference(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.AIInference result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.endpoint_ = endpoint_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.serviceAccountEmail_ = serviceAccountEmail_; + } + } + + private void buildPartialOneofs(com.google.pubsub.v1.AIInference result) { + result.inferenceModeCase_ = inferenceModeCase_; + result.inferenceMode_ = this.inferenceMode_; + if (inferenceModeCase_ == 2 && unstructuredInferenceBuilder_ != null) { + result.inferenceMode_ = unstructuredInferenceBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.AIInference) { + return mergeFrom((com.google.pubsub.v1.AIInference) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.AIInference other) { + if (other == com.google.pubsub.v1.AIInference.getDefaultInstance()) return this; + if (!other.getEndpoint().isEmpty()) { + endpoint_ = other.endpoint_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getServiceAccountEmail().isEmpty()) { + serviceAccountEmail_ = other.serviceAccountEmail_; + bitField0_ |= 0x00000004; + onChanged(); + } + switch (other.getInferenceModeCase()) { + case UNSTRUCTURED_INFERENCE: + { + mergeUnstructuredInference(other.getUnstructuredInference()); + break; + } + case INFERENCEMODE_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + endpoint_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetUnstructuredInferenceFieldBuilder().getBuilder(), extensionRegistry); + inferenceModeCase_ = 2; + break; + } // case 18 + case 26: + { + serviceAccountEmail_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int inferenceModeCase_ = 0; + private java.lang.Object inferenceMode_; + + public InferenceModeCase getInferenceModeCase() { + return InferenceModeCase.forNumber(inferenceModeCase_); + } + + public Builder clearInferenceMode() { + inferenceModeCase_ = 0; + inferenceMode_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private java.lang.Object endpoint_ = ""; + + /** + * + * + *
+     * Required. An endpoint to a Vertex AI model of the form
+     * `projects/{project}/locations/{location}/endpoints/{endpoint}` or
+     * `projects/{project}/locations/{location}/publishers/{publisher}/models/{model}`.
+     * Vertex AI API requests will be sent to this endpoint.
+     * 
+ * + * string endpoint = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The endpoint. + */ + public java.lang.String getEndpoint() { + java.lang.Object ref = endpoint_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + endpoint_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. An endpoint to a Vertex AI model of the form
+     * `projects/{project}/locations/{location}/endpoints/{endpoint}` or
+     * `projects/{project}/locations/{location}/publishers/{publisher}/models/{model}`.
+     * Vertex AI API requests will be sent to this endpoint.
+     * 
+ * + * string endpoint = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for endpoint. + */ + public com.google.protobuf.ByteString getEndpointBytes() { + java.lang.Object ref = endpoint_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + endpoint_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. An endpoint to a Vertex AI model of the form
+     * `projects/{project}/locations/{location}/endpoints/{endpoint}` or
+     * `projects/{project}/locations/{location}/publishers/{publisher}/models/{model}`.
+     * Vertex AI API requests will be sent to this endpoint.
+     * 
+ * + * string endpoint = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The endpoint to set. + * @return This builder for chaining. + */ + public Builder setEndpoint(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + endpoint_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. An endpoint to a Vertex AI model of the form
+     * `projects/{project}/locations/{location}/endpoints/{endpoint}` or
+     * `projects/{project}/locations/{location}/publishers/{publisher}/models/{model}`.
+     * Vertex AI API requests will be sent to this endpoint.
+     * 
+ * + * string endpoint = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearEndpoint() { + endpoint_ = getDefaultInstance().getEndpoint(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. An endpoint to a Vertex AI model of the form
+     * `projects/{project}/locations/{location}/endpoints/{endpoint}` or
+     * `projects/{project}/locations/{location}/publishers/{publisher}/models/{model}`.
+     * Vertex AI API requests will be sent to this endpoint.
+     * 
+ * + * string endpoint = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for endpoint to set. + * @return This builder for chaining. + */ + public Builder setEndpointBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + endpoint_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.AIInference.UnstructuredInference, + com.google.pubsub.v1.AIInference.UnstructuredInference.Builder, + com.google.pubsub.v1.AIInference.UnstructuredInferenceOrBuilder> + unstructuredInferenceBuilder_; + + /** + * + * + *
+     * Optional. Requests and responses can be any arbitrary JSON object.
+     * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the unstructuredInference field is set. + */ + @java.lang.Override + public boolean hasUnstructuredInference() { + return inferenceModeCase_ == 2; + } + + /** + * + * + *
+     * Optional. Requests and responses can be any arbitrary JSON object.
+     * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The unstructuredInference. + */ + @java.lang.Override + public com.google.pubsub.v1.AIInference.UnstructuredInference getUnstructuredInference() { + if (unstructuredInferenceBuilder_ == null) { + if (inferenceModeCase_ == 2) { + return (com.google.pubsub.v1.AIInference.UnstructuredInference) inferenceMode_; + } + return com.google.pubsub.v1.AIInference.UnstructuredInference.getDefaultInstance(); + } else { + if (inferenceModeCase_ == 2) { + return unstructuredInferenceBuilder_.getMessage(); + } + return com.google.pubsub.v1.AIInference.UnstructuredInference.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Requests and responses can be any arbitrary JSON object.
+     * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setUnstructuredInference( + com.google.pubsub.v1.AIInference.UnstructuredInference value) { + if (unstructuredInferenceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + inferenceMode_ = value; + onChanged(); + } else { + unstructuredInferenceBuilder_.setMessage(value); + } + inferenceModeCase_ = 2; + return this; + } + + /** + * + * + *
+     * Optional. Requests and responses can be any arbitrary JSON object.
+     * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setUnstructuredInference( + com.google.pubsub.v1.AIInference.UnstructuredInference.Builder builderForValue) { + if (unstructuredInferenceBuilder_ == null) { + inferenceMode_ = builderForValue.build(); + onChanged(); + } else { + unstructuredInferenceBuilder_.setMessage(builderForValue.build()); + } + inferenceModeCase_ = 2; + return this; + } + + /** + * + * + *
+     * Optional. Requests and responses can be any arbitrary JSON object.
+     * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeUnstructuredInference( + com.google.pubsub.v1.AIInference.UnstructuredInference value) { + if (unstructuredInferenceBuilder_ == null) { + if (inferenceModeCase_ == 2 + && inferenceMode_ + != com.google.pubsub.v1.AIInference.UnstructuredInference.getDefaultInstance()) { + inferenceMode_ = + com.google.pubsub.v1.AIInference.UnstructuredInference.newBuilder( + (com.google.pubsub.v1.AIInference.UnstructuredInference) inferenceMode_) + .mergeFrom(value) + .buildPartial(); + } else { + inferenceMode_ = value; + } + onChanged(); + } else { + if (inferenceModeCase_ == 2) { + unstructuredInferenceBuilder_.mergeFrom(value); + } else { + unstructuredInferenceBuilder_.setMessage(value); + } + } + inferenceModeCase_ = 2; + return this; + } + + /** + * + * + *
+     * Optional. Requests and responses can be any arbitrary JSON object.
+     * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearUnstructuredInference() { + if (unstructuredInferenceBuilder_ == null) { + if (inferenceModeCase_ == 2) { + inferenceModeCase_ = 0; + inferenceMode_ = null; + onChanged(); + } + } else { + if (inferenceModeCase_ == 2) { + inferenceModeCase_ = 0; + inferenceMode_ = null; + } + unstructuredInferenceBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Requests and responses can be any arbitrary JSON object.
+     * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.AIInference.UnstructuredInference.Builder + getUnstructuredInferenceBuilder() { + return internalGetUnstructuredInferenceFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Requests and responses can be any arbitrary JSON object.
+     * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.AIInference.UnstructuredInferenceOrBuilder + getUnstructuredInferenceOrBuilder() { + if ((inferenceModeCase_ == 2) && (unstructuredInferenceBuilder_ != null)) { + return unstructuredInferenceBuilder_.getMessageOrBuilder(); + } else { + if (inferenceModeCase_ == 2) { + return (com.google.pubsub.v1.AIInference.UnstructuredInference) inferenceMode_; + } + return com.google.pubsub.v1.AIInference.UnstructuredInference.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Requests and responses can be any arbitrary JSON object.
+     * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.AIInference.UnstructuredInference, + com.google.pubsub.v1.AIInference.UnstructuredInference.Builder, + com.google.pubsub.v1.AIInference.UnstructuredInferenceOrBuilder> + internalGetUnstructuredInferenceFieldBuilder() { + if (unstructuredInferenceBuilder_ == null) { + if (!(inferenceModeCase_ == 2)) { + inferenceMode_ = + com.google.pubsub.v1.AIInference.UnstructuredInference.getDefaultInstance(); + } + unstructuredInferenceBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.AIInference.UnstructuredInference, + com.google.pubsub.v1.AIInference.UnstructuredInference.Builder, + com.google.pubsub.v1.AIInference.UnstructuredInferenceOrBuilder>( + (com.google.pubsub.v1.AIInference.UnstructuredInference) inferenceMode_, + getParentForChildren(), + isClean()); + inferenceMode_ = null; + } + inferenceModeCase_ = 2; + onChanged(); + return unstructuredInferenceBuilder_; + } + + private java.lang.Object serviceAccountEmail_ = ""; + + /** + * + * + *
+     * Optional. The service account to use to make prediction requests against
+     * endpoints. The resource creator or updater that specifies this field must
+     * have `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent]({$universe.dns_names.final_documentation_domain}/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + public java.lang.String getServiceAccountEmail() { + java.lang.Object ref = serviceAccountEmail_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceAccountEmail_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The service account to use to make prediction requests against
+     * endpoints. The resource creator or updater that specifies this field must
+     * have `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent]({$universe.dns_names.final_documentation_domain}/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + public com.google.protobuf.ByteString getServiceAccountEmailBytes() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serviceAccountEmail_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The service account to use to make prediction requests against
+     * endpoints. The resource creator or updater that specifies this field must
+     * have `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent]({$universe.dns_names.final_documentation_domain}/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The serviceAccountEmail to set. + * @return This builder for chaining. + */ + public Builder setServiceAccountEmail(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + serviceAccountEmail_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The service account to use to make prediction requests against
+     * endpoints. The resource creator or updater that specifies this field must
+     * have `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent]({$universe.dns_names.final_documentation_domain}/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearServiceAccountEmail() { + serviceAccountEmail_ = getDefaultInstance().getServiceAccountEmail(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The service account to use to make prediction requests against
+     * endpoints. The resource creator or updater that specifies this field must
+     * have `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent]({$universe.dns_names.final_documentation_domain}/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for serviceAccountEmail to set. + * @return This builder for chaining. + */ + public Builder setServiceAccountEmailBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + serviceAccountEmail_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.AIInference) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.AIInference) + private static final com.google.pubsub.v1.AIInference DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.AIInference(); + } + + public static com.google.pubsub.v1.AIInference getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AIInference parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.AIInference getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/AIInferenceOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/AIInferenceOrBuilder.java new file mode 100644 index 000000000000..c7039d308042 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/AIInferenceOrBuilder.java @@ -0,0 +1,142 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface AIInferenceOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.AIInference) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. An endpoint to a Vertex AI model of the form
+   * `projects/{project}/locations/{location}/endpoints/{endpoint}` or
+   * `projects/{project}/locations/{location}/publishers/{publisher}/models/{model}`.
+   * Vertex AI API requests will be sent to this endpoint.
+   * 
+ * + * string endpoint = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The endpoint. + */ + java.lang.String getEndpoint(); + + /** + * + * + *
+   * Required. An endpoint to a Vertex AI model of the form
+   * `projects/{project}/locations/{location}/endpoints/{endpoint}` or
+   * `projects/{project}/locations/{location}/publishers/{publisher}/models/{model}`.
+   * Vertex AI API requests will be sent to this endpoint.
+   * 
+ * + * string endpoint = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for endpoint. + */ + com.google.protobuf.ByteString getEndpointBytes(); + + /** + * + * + *
+   * Optional. Requests and responses can be any arbitrary JSON object.
+   * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the unstructuredInference field is set. + */ + boolean hasUnstructuredInference(); + + /** + * + * + *
+   * Optional. Requests and responses can be any arbitrary JSON object.
+   * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The unstructuredInference. + */ + com.google.pubsub.v1.AIInference.UnstructuredInference getUnstructuredInference(); + + /** + * + * + *
+   * Optional. Requests and responses can be any arbitrary JSON object.
+   * 
+ * + * + * .google.pubsub.v1.AIInference.UnstructuredInference unstructured_inference = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.AIInference.UnstructuredInferenceOrBuilder + getUnstructuredInferenceOrBuilder(); + + /** + * + * + *
+   * Optional. The service account to use to make prediction requests against
+   * endpoints. The resource creator or updater that specifies this field must
+   * have `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub [service
+   * agent]({$universe.dns_names.final_documentation_domain}/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + java.lang.String getServiceAccountEmail(); + + /** + * + * + *
+   * Optional. The service account to use to make prediction requests against
+   * endpoints. The resource creator or updater that specifies this field must
+   * have `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub [service
+   * agent]({$universe.dns_names.final_documentation_domain}/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + com.google.protobuf.ByteString getServiceAccountEmailBytes(); + + com.google.pubsub.v1.AIInference.InferenceModeCase getInferenceModeCase(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/AcknowledgeRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/AcknowledgeRequest.java new file mode 100644 index 000000000000..392f45dc6942 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/AcknowledgeRequest.java @@ -0,0 +1,931 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the Acknowledge method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.AcknowledgeRequest} + */ +@com.google.protobuf.Generated +public final class AcknowledgeRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.AcknowledgeRequest) + AcknowledgeRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AcknowledgeRequest"); + } + + // Use AcknowledgeRequest.newBuilder() to construct. + private AcknowledgeRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AcknowledgeRequest() { + subscription_ = ""; + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AcknowledgeRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AcknowledgeRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.AcknowledgeRequest.class, + com.google.pubsub.v1.AcknowledgeRequest.Builder.class); + } + + public static final int SUBSCRIPTION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object subscription_ = ""; + + /** + * + * + *
+   * Required. The subscription whose message is being acknowledged.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + @java.lang.Override + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The subscription whose message is being acknowledged.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ACK_IDS_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList ackIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+   * Required. The acknowledgment ID for the messages being acknowledged that
+   * was returned by the Pub/Sub system in the `Pull` response. Must not be
+   * empty.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return A list containing the ackIds. + */ + public com.google.protobuf.ProtocolStringList getAckIdsList() { + return ackIds_; + } + + /** + * + * + *
+   * Required. The acknowledgment ID for the messages being acknowledged that
+   * was returned by the Pub/Sub system in the `Pull` response. Must not be
+   * empty.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The count of ackIds. + */ + public int getAckIdsCount() { + return ackIds_.size(); + } + + /** + * + * + *
+   * Required. The acknowledgment ID for the messages being acknowledged that
+   * was returned by the Pub/Sub system in the `Pull` response. Must not be
+   * empty.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + public java.lang.String getAckIds(int index) { + return ackIds_.get(index); + } + + /** + * + * + *
+   * Required. The acknowledgment ID for the messages being acknowledged that
+   * was returned by the Pub/Sub system in the `Pull` response. Must not be
+   * empty.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + public com.google.protobuf.ByteString getAckIdsBytes(int index) { + return ackIds_.getByteString(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, subscription_); + } + for (int i = 0; i < ackIds_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, ackIds_.getRaw(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, subscription_); + } + { + int dataSize = 0; + for (int i = 0; i < ackIds_.size(); i++) { + dataSize += computeStringSizeNoTag(ackIds_.getRaw(i)); + } + size += dataSize; + size += 1 * getAckIdsList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.AcknowledgeRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.AcknowledgeRequest other = (com.google.pubsub.v1.AcknowledgeRequest) obj; + + if (!getSubscription().equals(other.getSubscription())) return false; + if (!getAckIdsList().equals(other.getAckIdsList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SUBSCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getSubscription().hashCode(); + if (getAckIdsCount() > 0) { + hash = (37 * hash) + ACK_IDS_FIELD_NUMBER; + hash = (53 * hash) + getAckIdsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.AcknowledgeRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.AcknowledgeRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.AcknowledgeRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.AcknowledgeRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.AcknowledgeRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.AcknowledgeRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.AcknowledgeRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.AcknowledgeRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.AcknowledgeRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.AcknowledgeRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.AcknowledgeRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.AcknowledgeRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.AcknowledgeRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the Acknowledge method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.AcknowledgeRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.AcknowledgeRequest) + com.google.pubsub.v1.AcknowledgeRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AcknowledgeRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AcknowledgeRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.AcknowledgeRequest.class, + com.google.pubsub.v1.AcknowledgeRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.AcknowledgeRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + subscription_ = ""; + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_AcknowledgeRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.AcknowledgeRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.AcknowledgeRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.AcknowledgeRequest build() { + com.google.pubsub.v1.AcknowledgeRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.AcknowledgeRequest buildPartial() { + com.google.pubsub.v1.AcknowledgeRequest result = + new com.google.pubsub.v1.AcknowledgeRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.AcknowledgeRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.subscription_ = subscription_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + ackIds_.makeImmutable(); + result.ackIds_ = ackIds_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.AcknowledgeRequest) { + return mergeFrom((com.google.pubsub.v1.AcknowledgeRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.AcknowledgeRequest other) { + if (other == com.google.pubsub.v1.AcknowledgeRequest.getDefaultInstance()) return this; + if (!other.getSubscription().isEmpty()) { + subscription_ = other.subscription_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.ackIds_.isEmpty()) { + if (ackIds_.isEmpty()) { + ackIds_ = other.ackIds_; + bitField0_ |= 0x00000002; + } else { + ensureAckIdsIsMutable(); + ackIds_.addAll(other.ackIds_); + } + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + subscription_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureAckIdsIsMutable(); + ackIds_.add(s); + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object subscription_ = ""; + + /** + * + * + *
+     * Required. The subscription whose message is being acknowledged.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The subscription whose message is being acknowledged.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The subscription whose message is being acknowledged.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscription(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription whose message is being acknowledged.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSubscription() { + subscription_ = getDefaultInstance().getSubscription(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription whose message is being acknowledged.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscriptionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.protobuf.LazyStringArrayList ackIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureAckIdsIsMutable() { + if (!ackIds_.isModifiable()) { + ackIds_ = new com.google.protobuf.LazyStringArrayList(ackIds_); + } + bitField0_ |= 0x00000002; + } + + /** + * + * + *
+     * Required. The acknowledgment ID for the messages being acknowledged that
+     * was returned by the Pub/Sub system in the `Pull` response. Must not be
+     * empty.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return A list containing the ackIds. + */ + public com.google.protobuf.ProtocolStringList getAckIdsList() { + ackIds_.makeImmutable(); + return ackIds_; + } + + /** + * + * + *
+     * Required. The acknowledgment ID for the messages being acknowledged that
+     * was returned by the Pub/Sub system in the `Pull` response. Must not be
+     * empty.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The count of ackIds. + */ + public int getAckIdsCount() { + return ackIds_.size(); + } + + /** + * + * + *
+     * Required. The acknowledgment ID for the messages being acknowledged that
+     * was returned by the Pub/Sub system in the `Pull` response. Must not be
+     * empty.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + public java.lang.String getAckIds(int index) { + return ackIds_.get(index); + } + + /** + * + * + *
+     * Required. The acknowledgment ID for the messages being acknowledged that
+     * was returned by the Pub/Sub system in the `Pull` response. Must not be
+     * empty.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + public com.google.protobuf.ByteString getAckIdsBytes(int index) { + return ackIds_.getByteString(index); + } + + /** + * + * + *
+     * Required. The acknowledgment ID for the messages being acknowledged that
+     * was returned by the Pub/Sub system in the `Pull` response. Must not be
+     * empty.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index to set the value at. + * @param value The ackIds to set. + * @return This builder for chaining. + */ + public Builder setAckIds(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureAckIdsIsMutable(); + ackIds_.set(index, value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The acknowledgment ID for the messages being acknowledged that
+     * was returned by the Pub/Sub system in the `Pull` response. Must not be
+     * empty.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The ackIds to add. + * @return This builder for chaining. + */ + public Builder addAckIds(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureAckIdsIsMutable(); + ackIds_.add(value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The acknowledgment ID for the messages being acknowledged that
+     * was returned by the Pub/Sub system in the `Pull` response. Must not be
+     * empty.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param values The ackIds to add. + * @return This builder for chaining. + */ + public Builder addAllAckIds(java.lang.Iterable values) { + ensureAckIdsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, ackIds_); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The acknowledgment ID for the messages being acknowledged that
+     * was returned by the Pub/Sub system in the `Pull` response. Must not be
+     * empty.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearAckIds() { + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + ; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The acknowledgment ID for the messages being acknowledged that
+     * was returned by the Pub/Sub system in the `Pull` response. Must not be
+     * empty.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes of the ackIds to add. + * @return This builder for chaining. + */ + public Builder addAckIdsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureAckIdsIsMutable(); + ackIds_.add(value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.AcknowledgeRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.AcknowledgeRequest) + private static final com.google.pubsub.v1.AcknowledgeRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.AcknowledgeRequest(); + } + + public static com.google.pubsub.v1.AcknowledgeRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AcknowledgeRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.AcknowledgeRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/AcknowledgeRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/AcknowledgeRequestOrBuilder.java new file mode 100644 index 000000000000..f74ab5d14f51 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/AcknowledgeRequestOrBuilder.java @@ -0,0 +1,122 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface AcknowledgeRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.AcknowledgeRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The subscription whose message is being acknowledged.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + java.lang.String getSubscription(); + + /** + * + * + *
+   * Required. The subscription whose message is being acknowledged.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + com.google.protobuf.ByteString getSubscriptionBytes(); + + /** + * + * + *
+   * Required. The acknowledgment ID for the messages being acknowledged that
+   * was returned by the Pub/Sub system in the `Pull` response. Must not be
+   * empty.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return A list containing the ackIds. + */ + java.util.List getAckIdsList(); + + /** + * + * + *
+   * Required. The acknowledgment ID for the messages being acknowledged that
+   * was returned by the Pub/Sub system in the `Pull` response. Must not be
+   * empty.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The count of ackIds. + */ + int getAckIdsCount(); + + /** + * + * + *
+   * Required. The acknowledgment ID for the messages being acknowledged that
+   * was returned by the Pub/Sub system in the `Pull` response. Must not be
+   * empty.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + java.lang.String getAckIds(int index); + + /** + * + * + *
+   * Required. The acknowledgment ID for the messages being acknowledged that
+   * was returned by the Pub/Sub system in the `Pull` response. Must not be
+   * empty.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + com.google.protobuf.ByteString getAckIdsBytes(int index); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/BigQueryConfig.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/BigQueryConfig.java new file mode 100644 index 000000000000..6dc42b7be876 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/BigQueryConfig.java @@ -0,0 +1,1712 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Configuration for a BigQuery subscription.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.BigQueryConfig} + */ +@com.google.protobuf.Generated +public final class BigQueryConfig extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.BigQueryConfig) + BigQueryConfigOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BigQueryConfig"); + } + + // Use BigQueryConfig.newBuilder() to construct. + private BigQueryConfig(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private BigQueryConfig() { + table_ = ""; + state_ = 0; + serviceAccountEmail_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_BigQueryConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_BigQueryConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.BigQueryConfig.class, + com.google.pubsub.v1.BigQueryConfig.Builder.class); + } + + /** + * + * + *
+   * Possible states for a BigQuery subscription.
+   * 
+ * + * Protobuf enum {@code google.pubsub.v1.BigQueryConfig.State} + */ + public enum State implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+     * Default value. This value is unused.
+     * 
+ * + * STATE_UNSPECIFIED = 0; + */ + STATE_UNSPECIFIED(0), + /** + * + * + *
+     * The subscription can actively send messages to BigQuery
+     * 
+ * + * ACTIVE = 1; + */ + ACTIVE(1), + /** + * + * + *
+     * Cannot write to the BigQuery table because of permission denied errors.
+     * This can happen if
+     * - Pub/Sub SA has not been granted the [appropriate BigQuery IAM
+     * permissions](https://cloud.google.com/pubsub/docs/create-subscription#assign_bigquery_service_account)
+     * - bigquery.googleapis.com API is not enabled for the project
+     * ([instructions](https://cloud.google.com/service-usage/docs/enable-disable))
+     * 
+ * + * PERMISSION_DENIED = 2; + */ + PERMISSION_DENIED(2), + /** + * + * + *
+     * Cannot write to the BigQuery table because it does not exist.
+     * 
+ * + * NOT_FOUND = 3; + */ + NOT_FOUND(3), + /** + * + * + *
+     * Cannot write to the BigQuery table due to a schema mismatch.
+     * 
+ * + * SCHEMA_MISMATCH = 4; + */ + SCHEMA_MISMATCH(4), + /** + * + * + *
+     * Cannot write to the destination because enforce_in_transit is set to true
+     * and the destination locations are not in the allowed regions.
+     * 
+ * + * IN_TRANSIT_LOCATION_RESTRICTION = 5; + */ + IN_TRANSIT_LOCATION_RESTRICTION(5), + /** + * + * + *
+     * Cannot write to the BigQuery table because the table is not in the same
+     * location as where Vertex AI models used in `message_transform`s are
+     * deployed.
+     * 
+ * + * VERTEX_AI_LOCATION_RESTRICTION = 6; + */ + VERTEX_AI_LOCATION_RESTRICTION(6), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + + /** + * + * + *
+     * Default value. This value is unused.
+     * 
+ * + * STATE_UNSPECIFIED = 0; + */ + public static final int STATE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+     * The subscription can actively send messages to BigQuery
+     * 
+ * + * ACTIVE = 1; + */ + public static final int ACTIVE_VALUE = 1; + + /** + * + * + *
+     * Cannot write to the BigQuery table because of permission denied errors.
+     * This can happen if
+     * - Pub/Sub SA has not been granted the [appropriate BigQuery IAM
+     * permissions](https://cloud.google.com/pubsub/docs/create-subscription#assign_bigquery_service_account)
+     * - bigquery.googleapis.com API is not enabled for the project
+     * ([instructions](https://cloud.google.com/service-usage/docs/enable-disable))
+     * 
+ * + * PERMISSION_DENIED = 2; + */ + public static final int PERMISSION_DENIED_VALUE = 2; + + /** + * + * + *
+     * Cannot write to the BigQuery table because it does not exist.
+     * 
+ * + * NOT_FOUND = 3; + */ + public static final int NOT_FOUND_VALUE = 3; + + /** + * + * + *
+     * Cannot write to the BigQuery table due to a schema mismatch.
+     * 
+ * + * SCHEMA_MISMATCH = 4; + */ + public static final int SCHEMA_MISMATCH_VALUE = 4; + + /** + * + * + *
+     * Cannot write to the destination because enforce_in_transit is set to true
+     * and the destination locations are not in the allowed regions.
+     * 
+ * + * IN_TRANSIT_LOCATION_RESTRICTION = 5; + */ + public static final int IN_TRANSIT_LOCATION_RESTRICTION_VALUE = 5; + + /** + * + * + *
+     * Cannot write to the BigQuery table because the table is not in the same
+     * location as where Vertex AI models used in `message_transform`s are
+     * deployed.
+     * 
+ * + * VERTEX_AI_LOCATION_RESTRICTION = 6; + */ + public static final int VERTEX_AI_LOCATION_RESTRICTION_VALUE = 6; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static State valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static State forNumber(int value) { + switch (value) { + case 0: + return STATE_UNSPECIFIED; + case 1: + return ACTIVE; + case 2: + return PERMISSION_DENIED; + case 3: + return NOT_FOUND; + case 4: + return SCHEMA_MISMATCH; + case 5: + return IN_TRANSIT_LOCATION_RESTRICTION; + case 6: + return VERTEX_AI_LOCATION_RESTRICTION; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public State findValueByNumber(int number) { + return State.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.BigQueryConfig.getDescriptor().getEnumTypes().get(0); + } + + private static final State[] VALUES = values(); + + public static State valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private State(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.BigQueryConfig.State) + } + + public static final int TABLE_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object table_ = ""; + + /** + * + * + *
+   * Optional. The name of the table to which to write data, of the form
+   * {projectId}.{datasetId}.{tableId}
+   * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The table. + */ + @java.lang.Override + public java.lang.String getTable() { + java.lang.Object ref = table_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + table_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The name of the table to which to write data, of the form
+   * {projectId}.{datasetId}.{tableId}
+   * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for table. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTableBytes() { + java.lang.Object ref = table_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + table_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int USE_TOPIC_SCHEMA_FIELD_NUMBER = 2; + private boolean useTopicSchema_ = false; + + /** + * + * + *
+   * Optional. When true, use the topic's schema as the columns to write to in
+   * BigQuery, if it exists. `use_topic_schema` and `use_table_schema` cannot be
+   * enabled at the same time.
+   * 
+ * + * bool use_topic_schema = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The useTopicSchema. + */ + @java.lang.Override + public boolean getUseTopicSchema() { + return useTopicSchema_; + } + + public static final int WRITE_METADATA_FIELD_NUMBER = 3; + private boolean writeMetadata_ = false; + + /** + * + * + *
+   * Optional. When true, write the subscription name, message_id, publish_time,
+   * attributes, and ordering_key to additional columns in the table. The
+   * subscription name, message_id, and publish_time fields are put in their own
+   * columns while all other message properties (other than data) are written to
+   * a JSON object in the attributes column.
+   * 
+ * + * bool write_metadata = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The writeMetadata. + */ + @java.lang.Override + public boolean getWriteMetadata() { + return writeMetadata_; + } + + public static final int DROP_UNKNOWN_FIELDS_FIELD_NUMBER = 4; + private boolean dropUnknownFields_ = false; + + /** + * + * + *
+   * Optional. When true and use_topic_schema is true, any fields that are a
+   * part of the topic schema that are not part of the BigQuery table schema are
+   * dropped when writing to BigQuery. Otherwise, the schemas must be kept in
+   * sync and any messages with extra fields are not written and remain in the
+   * subscription's backlog.
+   * 
+ * + * bool drop_unknown_fields = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The dropUnknownFields. + */ + @java.lang.Override + public boolean getDropUnknownFields() { + return dropUnknownFields_; + } + + public static final int STATE_FIELD_NUMBER = 5; + private int state_ = 0; + + /** + * + * + *
+   * Output only. An output-only field that indicates whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.BigQueryConfig.State state = 5 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+   * Output only. An output-only field that indicates whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.BigQueryConfig.State state = 5 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.BigQueryConfig.State getState() { + com.google.pubsub.v1.BigQueryConfig.State result = + com.google.pubsub.v1.BigQueryConfig.State.forNumber(state_); + return result == null ? com.google.pubsub.v1.BigQueryConfig.State.UNRECOGNIZED : result; + } + + public static final int USE_TABLE_SCHEMA_FIELD_NUMBER = 6; + private boolean useTableSchema_ = false; + + /** + * + * + *
+   * Optional. When true, use the BigQuery table's schema as the columns to
+   * write to in BigQuery. `use_table_schema` and `use_topic_schema` cannot be
+   * enabled at the same time.
+   * 
+ * + * bool use_table_schema = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The useTableSchema. + */ + @java.lang.Override + public boolean getUseTableSchema() { + return useTableSchema_; + } + + public static final int SERVICE_ACCOUNT_EMAIL_FIELD_NUMBER = 7; + + @SuppressWarnings("serial") + private volatile java.lang.Object serviceAccountEmail_ = ""; + + /** + * + * + *
+   * Optional. The service account to use to write to BigQuery. The subscription
+   * creator or updater that specifies this field must have
+   * `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub [service
+   * agent](https://cloud.google.com/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + @java.lang.Override + public java.lang.String getServiceAccountEmail() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceAccountEmail_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The service account to use to write to BigQuery. The subscription
+   * creator or updater that specifies this field must have
+   * `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub [service
+   * agent](https://cloud.google.com/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + @java.lang.Override + public com.google.protobuf.ByteString getServiceAccountEmailBytes() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serviceAccountEmail_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, table_); + } + if (useTopicSchema_ != false) { + output.writeBool(2, useTopicSchema_); + } + if (writeMetadata_ != false) { + output.writeBool(3, writeMetadata_); + } + if (dropUnknownFields_ != false) { + output.writeBool(4, dropUnknownFields_); + } + if (state_ != com.google.pubsub.v1.BigQueryConfig.State.STATE_UNSPECIFIED.getNumber()) { + output.writeEnum(5, state_); + } + if (useTableSchema_ != false) { + output.writeBool(6, useTableSchema_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serviceAccountEmail_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 7, serviceAccountEmail_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, table_); + } + if (useTopicSchema_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(2, useTopicSchema_); + } + if (writeMetadata_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(3, writeMetadata_); + } + if (dropUnknownFields_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(4, dropUnknownFields_); + } + if (state_ != com.google.pubsub.v1.BigQueryConfig.State.STATE_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(5, state_); + } + if (useTableSchema_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(6, useTableSchema_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serviceAccountEmail_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(7, serviceAccountEmail_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.BigQueryConfig)) { + return super.equals(obj); + } + com.google.pubsub.v1.BigQueryConfig other = (com.google.pubsub.v1.BigQueryConfig) obj; + + if (!getTable().equals(other.getTable())) return false; + if (getUseTopicSchema() != other.getUseTopicSchema()) return false; + if (getWriteMetadata() != other.getWriteMetadata()) return false; + if (getDropUnknownFields() != other.getDropUnknownFields()) return false; + if (state_ != other.state_) return false; + if (getUseTableSchema() != other.getUseTableSchema()) return false; + if (!getServiceAccountEmail().equals(other.getServiceAccountEmail())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TABLE_FIELD_NUMBER; + hash = (53 * hash) + getTable().hashCode(); + hash = (37 * hash) + USE_TOPIC_SCHEMA_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getUseTopicSchema()); + hash = (37 * hash) + WRITE_METADATA_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getWriteMetadata()); + hash = (37 * hash) + DROP_UNKNOWN_FIELDS_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getDropUnknownFields()); + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + state_; + hash = (37 * hash) + USE_TABLE_SCHEMA_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getUseTableSchema()); + hash = (37 * hash) + SERVICE_ACCOUNT_EMAIL_FIELD_NUMBER; + hash = (53 * hash) + getServiceAccountEmail().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.BigQueryConfig parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.BigQueryConfig parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.BigQueryConfig parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.BigQueryConfig parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.BigQueryConfig parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.BigQueryConfig parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.BigQueryConfig parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.BigQueryConfig parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.BigQueryConfig parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.BigQueryConfig parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.BigQueryConfig parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.BigQueryConfig parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.BigQueryConfig prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Configuration for a BigQuery subscription.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.BigQueryConfig} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.BigQueryConfig) + com.google.pubsub.v1.BigQueryConfigOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_BigQueryConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_BigQueryConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.BigQueryConfig.class, + com.google.pubsub.v1.BigQueryConfig.Builder.class); + } + + // Construct using com.google.pubsub.v1.BigQueryConfig.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + table_ = ""; + useTopicSchema_ = false; + writeMetadata_ = false; + dropUnknownFields_ = false; + state_ = 0; + useTableSchema_ = false; + serviceAccountEmail_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_BigQueryConfig_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.BigQueryConfig getDefaultInstanceForType() { + return com.google.pubsub.v1.BigQueryConfig.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.BigQueryConfig build() { + com.google.pubsub.v1.BigQueryConfig result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.BigQueryConfig buildPartial() { + com.google.pubsub.v1.BigQueryConfig result = new com.google.pubsub.v1.BigQueryConfig(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.BigQueryConfig result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.table_ = table_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.useTopicSchema_ = useTopicSchema_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.writeMetadata_ = writeMetadata_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.dropUnknownFields_ = dropUnknownFields_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.state_ = state_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.useTableSchema_ = useTableSchema_; + } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.serviceAccountEmail_ = serviceAccountEmail_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.BigQueryConfig) { + return mergeFrom((com.google.pubsub.v1.BigQueryConfig) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.BigQueryConfig other) { + if (other == com.google.pubsub.v1.BigQueryConfig.getDefaultInstance()) return this; + if (!other.getTable().isEmpty()) { + table_ = other.table_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.getUseTopicSchema() != false) { + setUseTopicSchema(other.getUseTopicSchema()); + } + if (other.getWriteMetadata() != false) { + setWriteMetadata(other.getWriteMetadata()); + } + if (other.getDropUnknownFields() != false) { + setDropUnknownFields(other.getDropUnknownFields()); + } + if (other.state_ != 0) { + setStateValue(other.getStateValue()); + } + if (other.getUseTableSchema() != false) { + setUseTableSchema(other.getUseTableSchema()); + } + if (!other.getServiceAccountEmail().isEmpty()) { + serviceAccountEmail_ = other.serviceAccountEmail_; + bitField0_ |= 0x00000040; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + table_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + useTopicSchema_ = input.readBool(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: + { + writeMetadata_ = input.readBool(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 32: + { + dropUnknownFields_ = input.readBool(); + bitField0_ |= 0x00000008; + break; + } // case 32 + case 40: + { + state_ = input.readEnum(); + bitField0_ |= 0x00000010; + break; + } // case 40 + case 48: + { + useTableSchema_ = input.readBool(); + bitField0_ |= 0x00000020; + break; + } // case 48 + case 58: + { + serviceAccountEmail_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000040; + break; + } // case 58 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object table_ = ""; + + /** + * + * + *
+     * Optional. The name of the table to which to write data, of the form
+     * {projectId}.{datasetId}.{tableId}
+     * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The table. + */ + public java.lang.String getTable() { + java.lang.Object ref = table_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + table_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The name of the table to which to write data, of the form
+     * {projectId}.{datasetId}.{tableId}
+     * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for table. + */ + public com.google.protobuf.ByteString getTableBytes() { + java.lang.Object ref = table_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + table_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The name of the table to which to write data, of the form
+     * {projectId}.{datasetId}.{tableId}
+     * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The table to set. + * @return This builder for chaining. + */ + public Builder setTable(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + table_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The name of the table to which to write data, of the form
+     * {projectId}.{datasetId}.{tableId}
+     * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearTable() { + table_ = getDefaultInstance().getTable(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The name of the table to which to write data, of the form
+     * {projectId}.{datasetId}.{tableId}
+     * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for table to set. + * @return This builder for chaining. + */ + public Builder setTableBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + table_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private boolean useTopicSchema_; + + /** + * + * + *
+     * Optional. When true, use the topic's schema as the columns to write to in
+     * BigQuery, if it exists. `use_topic_schema` and `use_table_schema` cannot be
+     * enabled at the same time.
+     * 
+ * + * bool use_topic_schema = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The useTopicSchema. + */ + @java.lang.Override + public boolean getUseTopicSchema() { + return useTopicSchema_; + } + + /** + * + * + *
+     * Optional. When true, use the topic's schema as the columns to write to in
+     * BigQuery, if it exists. `use_topic_schema` and `use_table_schema` cannot be
+     * enabled at the same time.
+     * 
+ * + * bool use_topic_schema = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The useTopicSchema to set. + * @return This builder for chaining. + */ + public Builder setUseTopicSchema(boolean value) { + + useTopicSchema_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. When true, use the topic's schema as the columns to write to in
+     * BigQuery, if it exists. `use_topic_schema` and `use_table_schema` cannot be
+     * enabled at the same time.
+     * 
+ * + * bool use_topic_schema = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearUseTopicSchema() { + bitField0_ = (bitField0_ & ~0x00000002); + useTopicSchema_ = false; + onChanged(); + return this; + } + + private boolean writeMetadata_; + + /** + * + * + *
+     * Optional. When true, write the subscription name, message_id, publish_time,
+     * attributes, and ordering_key to additional columns in the table. The
+     * subscription name, message_id, and publish_time fields are put in their own
+     * columns while all other message properties (other than data) are written to
+     * a JSON object in the attributes column.
+     * 
+ * + * bool write_metadata = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The writeMetadata. + */ + @java.lang.Override + public boolean getWriteMetadata() { + return writeMetadata_; + } + + /** + * + * + *
+     * Optional. When true, write the subscription name, message_id, publish_time,
+     * attributes, and ordering_key to additional columns in the table. The
+     * subscription name, message_id, and publish_time fields are put in their own
+     * columns while all other message properties (other than data) are written to
+     * a JSON object in the attributes column.
+     * 
+ * + * bool write_metadata = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The writeMetadata to set. + * @return This builder for chaining. + */ + public Builder setWriteMetadata(boolean value) { + + writeMetadata_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. When true, write the subscription name, message_id, publish_time,
+     * attributes, and ordering_key to additional columns in the table. The
+     * subscription name, message_id, and publish_time fields are put in their own
+     * columns while all other message properties (other than data) are written to
+     * a JSON object in the attributes column.
+     * 
+ * + * bool write_metadata = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearWriteMetadata() { + bitField0_ = (bitField0_ & ~0x00000004); + writeMetadata_ = false; + onChanged(); + return this; + } + + private boolean dropUnknownFields_; + + /** + * + * + *
+     * Optional. When true and use_topic_schema is true, any fields that are a
+     * part of the topic schema that are not part of the BigQuery table schema are
+     * dropped when writing to BigQuery. Otherwise, the schemas must be kept in
+     * sync and any messages with extra fields are not written and remain in the
+     * subscription's backlog.
+     * 
+ * + * bool drop_unknown_fields = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The dropUnknownFields. + */ + @java.lang.Override + public boolean getDropUnknownFields() { + return dropUnknownFields_; + } + + /** + * + * + *
+     * Optional. When true and use_topic_schema is true, any fields that are a
+     * part of the topic schema that are not part of the BigQuery table schema are
+     * dropped when writing to BigQuery. Otherwise, the schemas must be kept in
+     * sync and any messages with extra fields are not written and remain in the
+     * subscription's backlog.
+     * 
+ * + * bool drop_unknown_fields = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The dropUnknownFields to set. + * @return This builder for chaining. + */ + public Builder setDropUnknownFields(boolean value) { + + dropUnknownFields_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. When true and use_topic_schema is true, any fields that are a
+     * part of the topic schema that are not part of the BigQuery table schema are
+     * dropped when writing to BigQuery. Otherwise, the schemas must be kept in
+     * sync and any messages with extra fields are not written and remain in the
+     * subscription's backlog.
+     * 
+ * + * bool drop_unknown_fields = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearDropUnknownFields() { + bitField0_ = (bitField0_ & ~0x00000008); + dropUnknownFields_ = false; + onChanged(); + return this; + } + + private int state_ = 0; + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig.State state = 5 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig.State state = 5 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The enum numeric value on the wire for state to set. + * @return This builder for chaining. + */ + public Builder setStateValue(int value) { + state_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig.State state = 5 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.BigQueryConfig.State getState() { + com.google.pubsub.v1.BigQueryConfig.State result = + com.google.pubsub.v1.BigQueryConfig.State.forNumber(state_); + return result == null ? com.google.pubsub.v1.BigQueryConfig.State.UNRECOGNIZED : result; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig.State state = 5 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The state to set. + * @return This builder for chaining. + */ + public Builder setState(com.google.pubsub.v1.BigQueryConfig.State value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + state_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig.State state = 5 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearState() { + bitField0_ = (bitField0_ & ~0x00000010); + state_ = 0; + onChanged(); + return this; + } + + private boolean useTableSchema_; + + /** + * + * + *
+     * Optional. When true, use the BigQuery table's schema as the columns to
+     * write to in BigQuery. `use_table_schema` and `use_topic_schema` cannot be
+     * enabled at the same time.
+     * 
+ * + * bool use_table_schema = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The useTableSchema. + */ + @java.lang.Override + public boolean getUseTableSchema() { + return useTableSchema_; + } + + /** + * + * + *
+     * Optional. When true, use the BigQuery table's schema as the columns to
+     * write to in BigQuery. `use_table_schema` and `use_topic_schema` cannot be
+     * enabled at the same time.
+     * 
+ * + * bool use_table_schema = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The useTableSchema to set. + * @return This builder for chaining. + */ + public Builder setUseTableSchema(boolean value) { + + useTableSchema_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. When true, use the BigQuery table's schema as the columns to
+     * write to in BigQuery. `use_table_schema` and `use_topic_schema` cannot be
+     * enabled at the same time.
+     * 
+ * + * bool use_table_schema = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearUseTableSchema() { + bitField0_ = (bitField0_ & ~0x00000020); + useTableSchema_ = false; + onChanged(); + return this; + } + + private java.lang.Object serviceAccountEmail_ = ""; + + /** + * + * + *
+     * Optional. The service account to use to write to BigQuery. The subscription
+     * creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + public java.lang.String getServiceAccountEmail() { + java.lang.Object ref = serviceAccountEmail_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceAccountEmail_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The service account to use to write to BigQuery. The subscription
+     * creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + public com.google.protobuf.ByteString getServiceAccountEmailBytes() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serviceAccountEmail_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The service account to use to write to BigQuery. The subscription
+     * creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The serviceAccountEmail to set. + * @return This builder for chaining. + */ + public Builder setServiceAccountEmail(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + serviceAccountEmail_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The service account to use to write to BigQuery. The subscription
+     * creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearServiceAccountEmail() { + serviceAccountEmail_ = getDefaultInstance().getServiceAccountEmail(); + bitField0_ = (bitField0_ & ~0x00000040); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The service account to use to write to BigQuery. The subscription
+     * creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for serviceAccountEmail to set. + * @return This builder for chaining. + */ + public Builder setServiceAccountEmailBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + serviceAccountEmail_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.BigQueryConfig) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.BigQueryConfig) + private static final com.google.pubsub.v1.BigQueryConfig DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.BigQueryConfig(); + } + + public static com.google.pubsub.v1.BigQueryConfig getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public BigQueryConfig parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.BigQueryConfig getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/BigQueryConfigOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/BigQueryConfigOrBuilder.java new file mode 100644 index 000000000000..250b87a57a10 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/BigQueryConfigOrBuilder.java @@ -0,0 +1,188 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface BigQueryConfigOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.BigQueryConfig) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The name of the table to which to write data, of the form
+   * {projectId}.{datasetId}.{tableId}
+   * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The table. + */ + java.lang.String getTable(); + + /** + * + * + *
+   * Optional. The name of the table to which to write data, of the form
+   * {projectId}.{datasetId}.{tableId}
+   * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for table. + */ + com.google.protobuf.ByteString getTableBytes(); + + /** + * + * + *
+   * Optional. When true, use the topic's schema as the columns to write to in
+   * BigQuery, if it exists. `use_topic_schema` and `use_table_schema` cannot be
+   * enabled at the same time.
+   * 
+ * + * bool use_topic_schema = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The useTopicSchema. + */ + boolean getUseTopicSchema(); + + /** + * + * + *
+   * Optional. When true, write the subscription name, message_id, publish_time,
+   * attributes, and ordering_key to additional columns in the table. The
+   * subscription name, message_id, and publish_time fields are put in their own
+   * columns while all other message properties (other than data) are written to
+   * a JSON object in the attributes column.
+   * 
+ * + * bool write_metadata = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The writeMetadata. + */ + boolean getWriteMetadata(); + + /** + * + * + *
+   * Optional. When true and use_topic_schema is true, any fields that are a
+   * part of the topic schema that are not part of the BigQuery table schema are
+   * dropped when writing to BigQuery. Otherwise, the schemas must be kept in
+   * sync and any messages with extra fields are not written and remain in the
+   * subscription's backlog.
+   * 
+ * + * bool drop_unknown_fields = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The dropUnknownFields. + */ + boolean getDropUnknownFields(); + + /** + * + * + *
+   * Output only. An output-only field that indicates whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.BigQueryConfig.State state = 5 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + int getStateValue(); + + /** + * + * + *
+   * Output only. An output-only field that indicates whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.BigQueryConfig.State state = 5 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + com.google.pubsub.v1.BigQueryConfig.State getState(); + + /** + * + * + *
+   * Optional. When true, use the BigQuery table's schema as the columns to
+   * write to in BigQuery. `use_table_schema` and `use_topic_schema` cannot be
+   * enabled at the same time.
+   * 
+ * + * bool use_table_schema = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The useTableSchema. + */ + boolean getUseTableSchema(); + + /** + * + * + *
+   * Optional. The service account to use to write to BigQuery. The subscription
+   * creator or updater that specifies this field must have
+   * `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub [service
+   * agent](https://cloud.google.com/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + java.lang.String getServiceAccountEmail(); + + /** + * + * + *
+   * Optional. The service account to use to write to BigQuery. The subscription
+   * creator or updater that specifies this field must have
+   * `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub [service
+   * agent](https://cloud.google.com/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + com.google.protobuf.ByteString getServiceAccountEmailBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/BigtableConfig.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/BigtableConfig.java new file mode 100644 index 000000000000..38cafb2e080b --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/BigtableConfig.java @@ -0,0 +1,1650 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Configuration for a Bigtable subscription. The Pub/Sub message will be
+ * written to a Bigtable row as follows:
+ * - row key: subscription name and message ID delimited by #.
+ * - columns: message bytes written to a single column family "data" with an
+ * empty-string column qualifier.
+ * - cell timestamp: the message publish timestamp.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.BigtableConfig} + */ +@com.google.protobuf.Generated +public final class BigtableConfig extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.BigtableConfig) + BigtableConfigOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "BigtableConfig"); + } + + // Use BigtableConfig.newBuilder() to construct. + private BigtableConfig(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private BigtableConfig() { + table_ = ""; + appProfileId_ = ""; + serviceAccountEmail_ = ""; + state_ = 0; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_BigtableConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_BigtableConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.BigtableConfig.class, + com.google.pubsub.v1.BigtableConfig.Builder.class); + } + + /** + * + * + *
+   * Possible states for a Bigtable subscription.
+   * Note: more states could be added in the future. Please code accordingly.
+   * 
+ * + * Protobuf enum {@code google.pubsub.v1.BigtableConfig.State} + */ + public enum State implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+     * Default value. This value is unused.
+     * 
+ * + * STATE_UNSPECIFIED = 0; + */ + STATE_UNSPECIFIED(0), + /** + * + * + *
+     * The subscription can actively send messages to Bigtable.
+     * 
+ * + * ACTIVE = 1; + */ + ACTIVE(1), + /** + * + * + *
+     * Cannot write to Bigtable because the instance, table, or app profile
+     * does not exist.
+     * 
+ * + * NOT_FOUND = 2; + */ + NOT_FOUND(2), + /** + * + * + *
+     * Cannot write to Bigtable because the app profile is not configured for
+     * single-cluster routing.
+     * 
+ * + * APP_PROFILE_MISCONFIGURED = 3; + */ + APP_PROFILE_MISCONFIGURED(3), + /** + * + * + *
+     * Cannot write to Bigtable because of permission denied errors.
+     * This can happen if:
+     * - The Pub/Sub service agent has not been granted the
+     * [appropriate Bigtable IAM permission
+     * bigtable.tables.mutateRows]({$universe.dns_names.final_documentation_domain}/bigtable/docs/access-control#permissions)
+     * - The bigtable.googleapis.com API is not enabled for the project
+     * ([instructions]({$universe.dns_names.final_documentation_domain}/service-usage/docs/enable-disable))
+     * 
+ * + * PERMISSION_DENIED = 4; + */ + PERMISSION_DENIED(4), + /** + * + * + *
+     * Cannot write to Bigtable because of a missing column family ("data") or
+     * if there is no structured row key for the subscription name + message ID.
+     * 
+ * + * SCHEMA_MISMATCH = 5; + */ + SCHEMA_MISMATCH(5), + /** + * + * + *
+     * Cannot write to the destination because enforce_in_transit is set to true
+     * and the destination locations are not in the allowed regions.
+     * 
+ * + * IN_TRANSIT_LOCATION_RESTRICTION = 6; + */ + IN_TRANSIT_LOCATION_RESTRICTION(6), + /** + * + * + *
+     * Cannot write to Bigtable because the table is not in the same location as
+     * where Vertex AI models used in `message_transform`s are deployed.
+     * 
+ * + * VERTEX_AI_LOCATION_RESTRICTION = 7; + */ + VERTEX_AI_LOCATION_RESTRICTION(7), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + + /** + * + * + *
+     * Default value. This value is unused.
+     * 
+ * + * STATE_UNSPECIFIED = 0; + */ + public static final int STATE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+     * The subscription can actively send messages to Bigtable.
+     * 
+ * + * ACTIVE = 1; + */ + public static final int ACTIVE_VALUE = 1; + + /** + * + * + *
+     * Cannot write to Bigtable because the instance, table, or app profile
+     * does not exist.
+     * 
+ * + * NOT_FOUND = 2; + */ + public static final int NOT_FOUND_VALUE = 2; + + /** + * + * + *
+     * Cannot write to Bigtable because the app profile is not configured for
+     * single-cluster routing.
+     * 
+ * + * APP_PROFILE_MISCONFIGURED = 3; + */ + public static final int APP_PROFILE_MISCONFIGURED_VALUE = 3; + + /** + * + * + *
+     * Cannot write to Bigtable because of permission denied errors.
+     * This can happen if:
+     * - The Pub/Sub service agent has not been granted the
+     * [appropriate Bigtable IAM permission
+     * bigtable.tables.mutateRows]({$universe.dns_names.final_documentation_domain}/bigtable/docs/access-control#permissions)
+     * - The bigtable.googleapis.com API is not enabled for the project
+     * ([instructions]({$universe.dns_names.final_documentation_domain}/service-usage/docs/enable-disable))
+     * 
+ * + * PERMISSION_DENIED = 4; + */ + public static final int PERMISSION_DENIED_VALUE = 4; + + /** + * + * + *
+     * Cannot write to Bigtable because of a missing column family ("data") or
+     * if there is no structured row key for the subscription name + message ID.
+     * 
+ * + * SCHEMA_MISMATCH = 5; + */ + public static final int SCHEMA_MISMATCH_VALUE = 5; + + /** + * + * + *
+     * Cannot write to the destination because enforce_in_transit is set to true
+     * and the destination locations are not in the allowed regions.
+     * 
+ * + * IN_TRANSIT_LOCATION_RESTRICTION = 6; + */ + public static final int IN_TRANSIT_LOCATION_RESTRICTION_VALUE = 6; + + /** + * + * + *
+     * Cannot write to Bigtable because the table is not in the same location as
+     * where Vertex AI models used in `message_transform`s are deployed.
+     * 
+ * + * VERTEX_AI_LOCATION_RESTRICTION = 7; + */ + public static final int VERTEX_AI_LOCATION_RESTRICTION_VALUE = 7; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static State valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static State forNumber(int value) { + switch (value) { + case 0: + return STATE_UNSPECIFIED; + case 1: + return ACTIVE; + case 2: + return NOT_FOUND; + case 3: + return APP_PROFILE_MISCONFIGURED; + case 4: + return PERMISSION_DENIED; + case 5: + return SCHEMA_MISMATCH; + case 6: + return IN_TRANSIT_LOCATION_RESTRICTION; + case 7: + return VERTEX_AI_LOCATION_RESTRICTION; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public State findValueByNumber(int number) { + return State.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.BigtableConfig.getDescriptor().getEnumTypes().get(0); + } + + private static final State[] VALUES = values(); + + public static State valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private State(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.BigtableConfig.State) + } + + public static final int TABLE_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object table_ = ""; + + /** + * + * + *
+   * Optional. The unique name of the table to write messages to.
+   *
+   * Values are of the form
+   * `projects/<project>/instances/<instance>/tables/<table>`.
+   * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The table. + */ + @java.lang.Override + public java.lang.String getTable() { + java.lang.Object ref = table_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + table_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The unique name of the table to write messages to.
+   *
+   * Values are of the form
+   * `projects/<project>/instances/<instance>/tables/<table>`.
+   * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for table. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTableBytes() { + java.lang.Object ref = table_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + table_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int APP_PROFILE_ID_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object appProfileId_ = ""; + + /** + * + * + *
+   * Optional. The app profile to use for the Bigtable writes. If not specified,
+   * the "default" application profile will be used. The app profile must use
+   * single-cluster routing.
+   * 
+ * + * string app_profile_id = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The appProfileId. + */ + @java.lang.Override + public java.lang.String getAppProfileId() { + java.lang.Object ref = appProfileId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + appProfileId_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The app profile to use for the Bigtable writes. If not specified,
+   * the "default" application profile will be used. The app profile must use
+   * single-cluster routing.
+   * 
+ * + * string app_profile_id = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for appProfileId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getAppProfileIdBytes() { + java.lang.Object ref = appProfileId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + appProfileId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SERVICE_ACCOUNT_EMAIL_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object serviceAccountEmail_ = ""; + + /** + * + * + *
+   * Optional. The service account to use to write to Bigtable. The subscription
+   * creator or updater that specifies this field must have
+   * `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub [service
+   * agent](https://cloud.google.com/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + @java.lang.Override + public java.lang.String getServiceAccountEmail() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceAccountEmail_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The service account to use to write to Bigtable. The subscription
+   * creator or updater that specifies this field must have
+   * `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub [service
+   * agent](https://cloud.google.com/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + @java.lang.Override + public com.google.protobuf.ByteString getServiceAccountEmailBytes() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serviceAccountEmail_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int WRITE_METADATA_FIELD_NUMBER = 5; + private boolean writeMetadata_ = false; + + /** + * + * + *
+   * Optional. When true, write the subscription name, message_id, publish_time,
+   * attributes, and ordering_key to additional columns in the table under the
+   * pubsub_metadata column family. The subscription name, message_id, and
+   * publish_time fields are put in their own columns while all other message
+   * properties (other than data) are written to a JSON object in the attributes
+   * column.
+   * 
+ * + * bool write_metadata = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The writeMetadata. + */ + @java.lang.Override + public boolean getWriteMetadata() { + return writeMetadata_; + } + + public static final int STATE_FIELD_NUMBER = 4; + private int state_ = 0; + + /** + * + * + *
+   * Output only. An output-only field that indicates whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.BigtableConfig.State state = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+   * Output only. An output-only field that indicates whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.BigtableConfig.State state = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.BigtableConfig.State getState() { + com.google.pubsub.v1.BigtableConfig.State result = + com.google.pubsub.v1.BigtableConfig.State.forNumber(state_); + return result == null ? com.google.pubsub.v1.BigtableConfig.State.UNRECOGNIZED : result; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, table_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(appProfileId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, appProfileId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serviceAccountEmail_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, serviceAccountEmail_); + } + if (state_ != com.google.pubsub.v1.BigtableConfig.State.STATE_UNSPECIFIED.getNumber()) { + output.writeEnum(4, state_); + } + if (writeMetadata_ != false) { + output.writeBool(5, writeMetadata_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(table_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, table_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(appProfileId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, appProfileId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serviceAccountEmail_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, serviceAccountEmail_); + } + if (state_ != com.google.pubsub.v1.BigtableConfig.State.STATE_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(4, state_); + } + if (writeMetadata_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(5, writeMetadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.BigtableConfig)) { + return super.equals(obj); + } + com.google.pubsub.v1.BigtableConfig other = (com.google.pubsub.v1.BigtableConfig) obj; + + if (!getTable().equals(other.getTable())) return false; + if (!getAppProfileId().equals(other.getAppProfileId())) return false; + if (!getServiceAccountEmail().equals(other.getServiceAccountEmail())) return false; + if (getWriteMetadata() != other.getWriteMetadata()) return false; + if (state_ != other.state_) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TABLE_FIELD_NUMBER; + hash = (53 * hash) + getTable().hashCode(); + hash = (37 * hash) + APP_PROFILE_ID_FIELD_NUMBER; + hash = (53 * hash) + getAppProfileId().hashCode(); + hash = (37 * hash) + SERVICE_ACCOUNT_EMAIL_FIELD_NUMBER; + hash = (53 * hash) + getServiceAccountEmail().hashCode(); + hash = (37 * hash) + WRITE_METADATA_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getWriteMetadata()); + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + state_; + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.BigtableConfig parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.BigtableConfig parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.BigtableConfig parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.BigtableConfig parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.BigtableConfig parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.BigtableConfig parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.BigtableConfig parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.BigtableConfig parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.BigtableConfig parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.BigtableConfig parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.BigtableConfig parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.BigtableConfig parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.BigtableConfig prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Configuration for a Bigtable subscription. The Pub/Sub message will be
+   * written to a Bigtable row as follows:
+   * - row key: subscription name and message ID delimited by #.
+   * - columns: message bytes written to a single column family "data" with an
+   * empty-string column qualifier.
+   * - cell timestamp: the message publish timestamp.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.BigtableConfig} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.BigtableConfig) + com.google.pubsub.v1.BigtableConfigOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_BigtableConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_BigtableConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.BigtableConfig.class, + com.google.pubsub.v1.BigtableConfig.Builder.class); + } + + // Construct using com.google.pubsub.v1.BigtableConfig.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + table_ = ""; + appProfileId_ = ""; + serviceAccountEmail_ = ""; + writeMetadata_ = false; + state_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_BigtableConfig_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.BigtableConfig getDefaultInstanceForType() { + return com.google.pubsub.v1.BigtableConfig.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.BigtableConfig build() { + com.google.pubsub.v1.BigtableConfig result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.BigtableConfig buildPartial() { + com.google.pubsub.v1.BigtableConfig result = new com.google.pubsub.v1.BigtableConfig(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.BigtableConfig result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.table_ = table_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.appProfileId_ = appProfileId_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.serviceAccountEmail_ = serviceAccountEmail_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.writeMetadata_ = writeMetadata_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.state_ = state_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.BigtableConfig) { + return mergeFrom((com.google.pubsub.v1.BigtableConfig) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.BigtableConfig other) { + if (other == com.google.pubsub.v1.BigtableConfig.getDefaultInstance()) return this; + if (!other.getTable().isEmpty()) { + table_ = other.table_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getAppProfileId().isEmpty()) { + appProfileId_ = other.appProfileId_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getServiceAccountEmail().isEmpty()) { + serviceAccountEmail_ = other.serviceAccountEmail_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (other.getWriteMetadata() != false) { + setWriteMetadata(other.getWriteMetadata()); + } + if (other.state_ != 0) { + setStateValue(other.getStateValue()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + table_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + appProfileId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + serviceAccountEmail_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 32: + { + state_ = input.readEnum(); + bitField0_ |= 0x00000010; + break; + } // case 32 + case 40: + { + writeMetadata_ = input.readBool(); + bitField0_ |= 0x00000008; + break; + } // case 40 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object table_ = ""; + + /** + * + * + *
+     * Optional. The unique name of the table to write messages to.
+     *
+     * Values are of the form
+     * `projects/<project>/instances/<instance>/tables/<table>`.
+     * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The table. + */ + public java.lang.String getTable() { + java.lang.Object ref = table_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + table_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The unique name of the table to write messages to.
+     *
+     * Values are of the form
+     * `projects/<project>/instances/<instance>/tables/<table>`.
+     * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for table. + */ + public com.google.protobuf.ByteString getTableBytes() { + java.lang.Object ref = table_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + table_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The unique name of the table to write messages to.
+     *
+     * Values are of the form
+     * `projects/<project>/instances/<instance>/tables/<table>`.
+     * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The table to set. + * @return This builder for chaining. + */ + public Builder setTable(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + table_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The unique name of the table to write messages to.
+     *
+     * Values are of the form
+     * `projects/<project>/instances/<instance>/tables/<table>`.
+     * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearTable() { + table_ = getDefaultInstance().getTable(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The unique name of the table to write messages to.
+     *
+     * Values are of the form
+     * `projects/<project>/instances/<instance>/tables/<table>`.
+     * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for table to set. + * @return This builder for chaining. + */ + public Builder setTableBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + table_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object appProfileId_ = ""; + + /** + * + * + *
+     * Optional. The app profile to use for the Bigtable writes. If not specified,
+     * the "default" application profile will be used. The app profile must use
+     * single-cluster routing.
+     * 
+ * + * string app_profile_id = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The appProfileId. + */ + public java.lang.String getAppProfileId() { + java.lang.Object ref = appProfileId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + appProfileId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The app profile to use for the Bigtable writes. If not specified,
+     * the "default" application profile will be used. The app profile must use
+     * single-cluster routing.
+     * 
+ * + * string app_profile_id = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for appProfileId. + */ + public com.google.protobuf.ByteString getAppProfileIdBytes() { + java.lang.Object ref = appProfileId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + appProfileId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The app profile to use for the Bigtable writes. If not specified,
+     * the "default" application profile will be used. The app profile must use
+     * single-cluster routing.
+     * 
+ * + * string app_profile_id = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The appProfileId to set. + * @return This builder for chaining. + */ + public Builder setAppProfileId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + appProfileId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The app profile to use for the Bigtable writes. If not specified,
+     * the "default" application profile will be used. The app profile must use
+     * single-cluster routing.
+     * 
+ * + * string app_profile_id = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearAppProfileId() { + appProfileId_ = getDefaultInstance().getAppProfileId(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The app profile to use for the Bigtable writes. If not specified,
+     * the "default" application profile will be used. The app profile must use
+     * single-cluster routing.
+     * 
+ * + * string app_profile_id = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for appProfileId to set. + * @return This builder for chaining. + */ + public Builder setAppProfileIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + appProfileId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object serviceAccountEmail_ = ""; + + /** + * + * + *
+     * Optional. The service account to use to write to Bigtable. The subscription
+     * creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + public java.lang.String getServiceAccountEmail() { + java.lang.Object ref = serviceAccountEmail_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceAccountEmail_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The service account to use to write to Bigtable. The subscription
+     * creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + public com.google.protobuf.ByteString getServiceAccountEmailBytes() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serviceAccountEmail_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The service account to use to write to Bigtable. The subscription
+     * creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The serviceAccountEmail to set. + * @return This builder for chaining. + */ + public Builder setServiceAccountEmail(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + serviceAccountEmail_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The service account to use to write to Bigtable. The subscription
+     * creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearServiceAccountEmail() { + serviceAccountEmail_ = getDefaultInstance().getServiceAccountEmail(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The service account to use to write to Bigtable. The subscription
+     * creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub [service
+     * agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for serviceAccountEmail to set. + * @return This builder for chaining. + */ + public Builder setServiceAccountEmailBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + serviceAccountEmail_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private boolean writeMetadata_; + + /** + * + * + *
+     * Optional. When true, write the subscription name, message_id, publish_time,
+     * attributes, and ordering_key to additional columns in the table under the
+     * pubsub_metadata column family. The subscription name, message_id, and
+     * publish_time fields are put in their own columns while all other message
+     * properties (other than data) are written to a JSON object in the attributes
+     * column.
+     * 
+ * + * bool write_metadata = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The writeMetadata. + */ + @java.lang.Override + public boolean getWriteMetadata() { + return writeMetadata_; + } + + /** + * + * + *
+     * Optional. When true, write the subscription name, message_id, publish_time,
+     * attributes, and ordering_key to additional columns in the table under the
+     * pubsub_metadata column family. The subscription name, message_id, and
+     * publish_time fields are put in their own columns while all other message
+     * properties (other than data) are written to a JSON object in the attributes
+     * column.
+     * 
+ * + * bool write_metadata = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The writeMetadata to set. + * @return This builder for chaining. + */ + public Builder setWriteMetadata(boolean value) { + + writeMetadata_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. When true, write the subscription name, message_id, publish_time,
+     * attributes, and ordering_key to additional columns in the table under the
+     * pubsub_metadata column family. The subscription name, message_id, and
+     * publish_time fields are put in their own columns while all other message
+     * properties (other than data) are written to a JSON object in the attributes
+     * column.
+     * 
+ * + * bool write_metadata = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearWriteMetadata() { + bitField0_ = (bitField0_ & ~0x00000008); + writeMetadata_ = false; + onChanged(); + return this; + } + + private int state_ = 0; + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig.State state = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig.State state = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The enum numeric value on the wire for state to set. + * @return This builder for chaining. + */ + public Builder setStateValue(int value) { + state_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig.State state = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.BigtableConfig.State getState() { + com.google.pubsub.v1.BigtableConfig.State result = + com.google.pubsub.v1.BigtableConfig.State.forNumber(state_); + return result == null ? com.google.pubsub.v1.BigtableConfig.State.UNRECOGNIZED : result; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig.State state = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The state to set. + * @return This builder for chaining. + */ + public Builder setState(com.google.pubsub.v1.BigtableConfig.State value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + state_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig.State state = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearState() { + bitField0_ = (bitField0_ & ~0x00000010); + state_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.BigtableConfig) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.BigtableConfig) + private static final com.google.pubsub.v1.BigtableConfig DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.BigtableConfig(); + } + + public static com.google.pubsub.v1.BigtableConfig getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public BigtableConfig parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.BigtableConfig getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/BigtableConfigOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/BigtableConfigOrBuilder.java new file mode 100644 index 000000000000..ef22565e23b7 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/BigtableConfigOrBuilder.java @@ -0,0 +1,176 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface BigtableConfigOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.BigtableConfig) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The unique name of the table to write messages to.
+   *
+   * Values are of the form
+   * `projects/<project>/instances/<instance>/tables/<table>`.
+   * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The table. + */ + java.lang.String getTable(); + + /** + * + * + *
+   * Optional. The unique name of the table to write messages to.
+   *
+   * Values are of the form
+   * `projects/<project>/instances/<instance>/tables/<table>`.
+   * 
+ * + * string table = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for table. + */ + com.google.protobuf.ByteString getTableBytes(); + + /** + * + * + *
+   * Optional. The app profile to use for the Bigtable writes. If not specified,
+   * the "default" application profile will be used. The app profile must use
+   * single-cluster routing.
+   * 
+ * + * string app_profile_id = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The appProfileId. + */ + java.lang.String getAppProfileId(); + + /** + * + * + *
+   * Optional. The app profile to use for the Bigtable writes. If not specified,
+   * the "default" application profile will be used. The app profile must use
+   * single-cluster routing.
+   * 
+ * + * string app_profile_id = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for appProfileId. + */ + com.google.protobuf.ByteString getAppProfileIdBytes(); + + /** + * + * + *
+   * Optional. The service account to use to write to Bigtable. The subscription
+   * creator or updater that specifies this field must have
+   * `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub [service
+   * agent](https://cloud.google.com/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + java.lang.String getServiceAccountEmail(); + + /** + * + * + *
+   * Optional. The service account to use to write to Bigtable. The subscription
+   * creator or updater that specifies this field must have
+   * `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub [service
+   * agent](https://cloud.google.com/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + com.google.protobuf.ByteString getServiceAccountEmailBytes(); + + /** + * + * + *
+   * Optional. When true, write the subscription name, message_id, publish_time,
+   * attributes, and ordering_key to additional columns in the table under the
+   * pubsub_metadata column family. The subscription name, message_id, and
+   * publish_time fields are put in their own columns while all other message
+   * properties (other than data) are written to a JSON object in the attributes
+   * column.
+   * 
+ * + * bool write_metadata = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The writeMetadata. + */ + boolean getWriteMetadata(); + + /** + * + * + *
+   * Output only. An output-only field that indicates whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.BigtableConfig.State state = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + int getStateValue(); + + /** + * + * + *
+   * Output only. An output-only field that indicates whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.BigtableConfig.State state = 4 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + com.google.pubsub.v1.BigtableConfig.State getState(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CloudStorageConfig.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CloudStorageConfig.java new file mode 100644 index 000000000000..b30b5926712b --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CloudStorageConfig.java @@ -0,0 +1,4217 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Configuration for a Cloud Storage subscription.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.CloudStorageConfig} + */ +@com.google.protobuf.Generated +public final class CloudStorageConfig extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.CloudStorageConfig) + CloudStorageConfigOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CloudStorageConfig"); + } + + // Use CloudStorageConfig.newBuilder() to construct. + private CloudStorageConfig(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private CloudStorageConfig() { + bucket_ = ""; + filenamePrefix_ = ""; + filenameSuffix_ = ""; + filenameDatetimeFormat_ = ""; + state_ = 0; + serviceAccountEmail_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.CloudStorageConfig.class, + com.google.pubsub.v1.CloudStorageConfig.Builder.class); + } + + /** + * + * + *
+   * Possible states for a Cloud Storage subscription.
+   * 
+ * + * Protobuf enum {@code google.pubsub.v1.CloudStorageConfig.State} + */ + public enum State implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+     * Default value. This value is unused.
+     * 
+ * + * STATE_UNSPECIFIED = 0; + */ + STATE_UNSPECIFIED(0), + /** + * + * + *
+     * The subscription can actively send messages to Cloud Storage.
+     * 
+ * + * ACTIVE = 1; + */ + ACTIVE(1), + /** + * + * + *
+     * Cannot write to the Cloud Storage bucket because of permission denied
+     * errors.
+     * 
+ * + * PERMISSION_DENIED = 2; + */ + PERMISSION_DENIED(2), + /** + * + * + *
+     * Cannot write to the Cloud Storage bucket because it does not exist.
+     * 
+ * + * NOT_FOUND = 3; + */ + NOT_FOUND(3), + /** + * + * + *
+     * Cannot write to the destination because enforce_in_transit is set to true
+     * and the destination locations are not in the allowed regions.
+     * 
+ * + * IN_TRANSIT_LOCATION_RESTRICTION = 4; + */ + IN_TRANSIT_LOCATION_RESTRICTION(4), + /** + * + * + *
+     * Cannot write to the Cloud Storage bucket due to an incompatibility
+     * between the topic schema and subscription settings.
+     * 
+ * + * SCHEMA_MISMATCH = 5; + */ + SCHEMA_MISMATCH(5), + /** + * + * + *
+     * Cannot write to the Cloud Storage bucket because the bucket is not in the
+     * same location as where Vertex AI models used in `message_transform`s are
+     * deployed.
+     * 
+ * + * VERTEX_AI_LOCATION_RESTRICTION = 6; + */ + VERTEX_AI_LOCATION_RESTRICTION(6), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + + /** + * + * + *
+     * Default value. This value is unused.
+     * 
+ * + * STATE_UNSPECIFIED = 0; + */ + public static final int STATE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+     * The subscription can actively send messages to Cloud Storage.
+     * 
+ * + * ACTIVE = 1; + */ + public static final int ACTIVE_VALUE = 1; + + /** + * + * + *
+     * Cannot write to the Cloud Storage bucket because of permission denied
+     * errors.
+     * 
+ * + * PERMISSION_DENIED = 2; + */ + public static final int PERMISSION_DENIED_VALUE = 2; + + /** + * + * + *
+     * Cannot write to the Cloud Storage bucket because it does not exist.
+     * 
+ * + * NOT_FOUND = 3; + */ + public static final int NOT_FOUND_VALUE = 3; + + /** + * + * + *
+     * Cannot write to the destination because enforce_in_transit is set to true
+     * and the destination locations are not in the allowed regions.
+     * 
+ * + * IN_TRANSIT_LOCATION_RESTRICTION = 4; + */ + public static final int IN_TRANSIT_LOCATION_RESTRICTION_VALUE = 4; + + /** + * + * + *
+     * Cannot write to the Cloud Storage bucket due to an incompatibility
+     * between the topic schema and subscription settings.
+     * 
+ * + * SCHEMA_MISMATCH = 5; + */ + public static final int SCHEMA_MISMATCH_VALUE = 5; + + /** + * + * + *
+     * Cannot write to the Cloud Storage bucket because the bucket is not in the
+     * same location as where Vertex AI models used in `message_transform`s are
+     * deployed.
+     * 
+ * + * VERTEX_AI_LOCATION_RESTRICTION = 6; + */ + public static final int VERTEX_AI_LOCATION_RESTRICTION_VALUE = 6; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static State valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static State forNumber(int value) { + switch (value) { + case 0: + return STATE_UNSPECIFIED; + case 1: + return ACTIVE; + case 2: + return PERMISSION_DENIED; + case 3: + return NOT_FOUND; + case 4: + return IN_TRANSIT_LOCATION_RESTRICTION; + case 5: + return SCHEMA_MISMATCH; + case 6: + return VERTEX_AI_LOCATION_RESTRICTION; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public State findValueByNumber(int number) { + return State.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.CloudStorageConfig.getDescriptor().getEnumTypes().get(0); + } + + private static final State[] VALUES = values(); + + public static State valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private State(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.CloudStorageConfig.State) + } + + public interface TextConfigOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.CloudStorageConfig.TextConfig) + com.google.protobuf.MessageOrBuilder {} + + /** + * + * + *
+   * Configuration for writing message data in text format.
+   * Message payloads will be written to files as raw text, separated by a
+   * newline.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.CloudStorageConfig.TextConfig} + */ + public static final class TextConfig extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.CloudStorageConfig.TextConfig) + TextConfigOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "TextConfig"); + } + + // Use TextConfig.newBuilder() to construct. + private TextConfig(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private TextConfig() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_TextConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_TextConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.CloudStorageConfig.TextConfig.class, + com.google.pubsub.v1.CloudStorageConfig.TextConfig.Builder.class); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.CloudStorageConfig.TextConfig)) { + return super.equals(obj); + } + com.google.pubsub.v1.CloudStorageConfig.TextConfig other = + (com.google.pubsub.v1.CloudStorageConfig.TextConfig) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.CloudStorageConfig.TextConfig parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CloudStorageConfig.TextConfig parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig.TextConfig parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CloudStorageConfig.TextConfig parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig.TextConfig parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CloudStorageConfig.TextConfig parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig.TextConfig parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CloudStorageConfig.TextConfig parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig.TextConfig parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CloudStorageConfig.TextConfig parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig.TextConfig parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CloudStorageConfig.TextConfig parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.CloudStorageConfig.TextConfig prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Configuration for writing message data in text format.
+     * Message payloads will be written to files as raw text, separated by a
+     * newline.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.CloudStorageConfig.TextConfig} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.CloudStorageConfig.TextConfig) + com.google.pubsub.v1.CloudStorageConfig.TextConfigOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_TextConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_TextConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.CloudStorageConfig.TextConfig.class, + com.google.pubsub.v1.CloudStorageConfig.TextConfig.Builder.class); + } + + // Construct using com.google.pubsub.v1.CloudStorageConfig.TextConfig.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_TextConfig_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.TextConfig getDefaultInstanceForType() { + return com.google.pubsub.v1.CloudStorageConfig.TextConfig.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.TextConfig build() { + com.google.pubsub.v1.CloudStorageConfig.TextConfig result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.TextConfig buildPartial() { + com.google.pubsub.v1.CloudStorageConfig.TextConfig result = + new com.google.pubsub.v1.CloudStorageConfig.TextConfig(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.CloudStorageConfig.TextConfig) { + return mergeFrom((com.google.pubsub.v1.CloudStorageConfig.TextConfig) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.CloudStorageConfig.TextConfig other) { + if (other == com.google.pubsub.v1.CloudStorageConfig.TextConfig.getDefaultInstance()) + return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.CloudStorageConfig.TextConfig) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.CloudStorageConfig.TextConfig) + private static final com.google.pubsub.v1.CloudStorageConfig.TextConfig DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.CloudStorageConfig.TextConfig(); + } + + public static com.google.pubsub.v1.CloudStorageConfig.TextConfig getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public TextConfig parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.TextConfig getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface AvroConfigOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.CloudStorageConfig.AvroConfig) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Optional. When true, write the subscription name, message_id,
+     * publish_time, attributes, and ordering_key as additional fields in the
+     * output. The subscription name, message_id, and publish_time fields are
+     * put in their own fields while all other message properties other than
+     * data (for example, an ordering_key, if present) are added as entries in
+     * the attributes map.
+     * 
+ * + * bool write_metadata = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The writeMetadata. + */ + boolean getWriteMetadata(); + + /** + * + * + *
+     * Optional. When true, the output Cloud Storage file will be serialized
+     * using the topic schema, if it exists.
+     * 
+ * + * bool use_topic_schema = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The useTopicSchema. + */ + boolean getUseTopicSchema(); + } + + /** + * + * + *
+   * Configuration for writing message data in Avro format.
+   * Message payloads and metadata will be written to files as an Avro binary.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.CloudStorageConfig.AvroConfig} + */ + public static final class AvroConfig extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.CloudStorageConfig.AvroConfig) + AvroConfigOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AvroConfig"); + } + + // Use AvroConfig.newBuilder() to construct. + private AvroConfig(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AvroConfig() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_AvroConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_AvroConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.CloudStorageConfig.AvroConfig.class, + com.google.pubsub.v1.CloudStorageConfig.AvroConfig.Builder.class); + } + + public static final int WRITE_METADATA_FIELD_NUMBER = 1; + private boolean writeMetadata_ = false; + + /** + * + * + *
+     * Optional. When true, write the subscription name, message_id,
+     * publish_time, attributes, and ordering_key as additional fields in the
+     * output. The subscription name, message_id, and publish_time fields are
+     * put in their own fields while all other message properties other than
+     * data (for example, an ordering_key, if present) are added as entries in
+     * the attributes map.
+     * 
+ * + * bool write_metadata = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The writeMetadata. + */ + @java.lang.Override + public boolean getWriteMetadata() { + return writeMetadata_; + } + + public static final int USE_TOPIC_SCHEMA_FIELD_NUMBER = 2; + private boolean useTopicSchema_ = false; + + /** + * + * + *
+     * Optional. When true, the output Cloud Storage file will be serialized
+     * using the topic schema, if it exists.
+     * 
+ * + * bool use_topic_schema = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The useTopicSchema. + */ + @java.lang.Override + public boolean getUseTopicSchema() { + return useTopicSchema_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (writeMetadata_ != false) { + output.writeBool(1, writeMetadata_); + } + if (useTopicSchema_ != false) { + output.writeBool(2, useTopicSchema_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (writeMetadata_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(1, writeMetadata_); + } + if (useTopicSchema_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(2, useTopicSchema_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.CloudStorageConfig.AvroConfig)) { + return super.equals(obj); + } + com.google.pubsub.v1.CloudStorageConfig.AvroConfig other = + (com.google.pubsub.v1.CloudStorageConfig.AvroConfig) obj; + + if (getWriteMetadata() != other.getWriteMetadata()) return false; + if (getUseTopicSchema() != other.getUseTopicSchema()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + WRITE_METADATA_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getWriteMetadata()); + hash = (37 * hash) + USE_TOPIC_SCHEMA_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getUseTopicSchema()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.CloudStorageConfig.AvroConfig parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CloudStorageConfig.AvroConfig parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig.AvroConfig parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CloudStorageConfig.AvroConfig parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig.AvroConfig parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CloudStorageConfig.AvroConfig parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig.AvroConfig parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CloudStorageConfig.AvroConfig parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig.AvroConfig parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CloudStorageConfig.AvroConfig parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig.AvroConfig parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CloudStorageConfig.AvroConfig parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.CloudStorageConfig.AvroConfig prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Configuration for writing message data in Avro format.
+     * Message payloads and metadata will be written to files as an Avro binary.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.CloudStorageConfig.AvroConfig} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.CloudStorageConfig.AvroConfig) + com.google.pubsub.v1.CloudStorageConfig.AvroConfigOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_AvroConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_AvroConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.CloudStorageConfig.AvroConfig.class, + com.google.pubsub.v1.CloudStorageConfig.AvroConfig.Builder.class); + } + + // Construct using com.google.pubsub.v1.CloudStorageConfig.AvroConfig.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + writeMetadata_ = false; + useTopicSchema_ = false; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_AvroConfig_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.AvroConfig getDefaultInstanceForType() { + return com.google.pubsub.v1.CloudStorageConfig.AvroConfig.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.AvroConfig build() { + com.google.pubsub.v1.CloudStorageConfig.AvroConfig result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.AvroConfig buildPartial() { + com.google.pubsub.v1.CloudStorageConfig.AvroConfig result = + new com.google.pubsub.v1.CloudStorageConfig.AvroConfig(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.CloudStorageConfig.AvroConfig result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.writeMetadata_ = writeMetadata_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.useTopicSchema_ = useTopicSchema_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.CloudStorageConfig.AvroConfig) { + return mergeFrom((com.google.pubsub.v1.CloudStorageConfig.AvroConfig) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.CloudStorageConfig.AvroConfig other) { + if (other == com.google.pubsub.v1.CloudStorageConfig.AvroConfig.getDefaultInstance()) + return this; + if (other.getWriteMetadata() != false) { + setWriteMetadata(other.getWriteMetadata()); + } + if (other.getUseTopicSchema() != false) { + setUseTopicSchema(other.getUseTopicSchema()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + writeMetadata_ = input.readBool(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: + { + useTopicSchema_ = input.readBool(); + bitField0_ |= 0x00000002; + break; + } // case 16 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private boolean writeMetadata_; + + /** + * + * + *
+       * Optional. When true, write the subscription name, message_id,
+       * publish_time, attributes, and ordering_key as additional fields in the
+       * output. The subscription name, message_id, and publish_time fields are
+       * put in their own fields while all other message properties other than
+       * data (for example, an ordering_key, if present) are added as entries in
+       * the attributes map.
+       * 
+ * + * bool write_metadata = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The writeMetadata. + */ + @java.lang.Override + public boolean getWriteMetadata() { + return writeMetadata_; + } + + /** + * + * + *
+       * Optional. When true, write the subscription name, message_id,
+       * publish_time, attributes, and ordering_key as additional fields in the
+       * output. The subscription name, message_id, and publish_time fields are
+       * put in their own fields while all other message properties other than
+       * data (for example, an ordering_key, if present) are added as entries in
+       * the attributes map.
+       * 
+ * + * bool write_metadata = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The writeMetadata to set. + * @return This builder for chaining. + */ + public Builder setWriteMetadata(boolean value) { + + writeMetadata_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. When true, write the subscription name, message_id,
+       * publish_time, attributes, and ordering_key as additional fields in the
+       * output. The subscription name, message_id, and publish_time fields are
+       * put in their own fields while all other message properties other than
+       * data (for example, an ordering_key, if present) are added as entries in
+       * the attributes map.
+       * 
+ * + * bool write_metadata = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearWriteMetadata() { + bitField0_ = (bitField0_ & ~0x00000001); + writeMetadata_ = false; + onChanged(); + return this; + } + + private boolean useTopicSchema_; + + /** + * + * + *
+       * Optional. When true, the output Cloud Storage file will be serialized
+       * using the topic schema, if it exists.
+       * 
+ * + * bool use_topic_schema = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The useTopicSchema. + */ + @java.lang.Override + public boolean getUseTopicSchema() { + return useTopicSchema_; + } + + /** + * + * + *
+       * Optional. When true, the output Cloud Storage file will be serialized
+       * using the topic schema, if it exists.
+       * 
+ * + * bool use_topic_schema = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The useTopicSchema to set. + * @return This builder for chaining. + */ + public Builder setUseTopicSchema(boolean value) { + + useTopicSchema_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. When true, the output Cloud Storage file will be serialized
+       * using the topic schema, if it exists.
+       * 
+ * + * bool use_topic_schema = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearUseTopicSchema() { + bitField0_ = (bitField0_ & ~0x00000002); + useTopicSchema_ = false; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.CloudStorageConfig.AvroConfig) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.CloudStorageConfig.AvroConfig) + private static final com.google.pubsub.v1.CloudStorageConfig.AvroConfig DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.CloudStorageConfig.AvroConfig(); + } + + public static com.google.pubsub.v1.CloudStorageConfig.AvroConfig getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AvroConfig parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.AvroConfig getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int bitField0_; + private int outputFormatCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object outputFormat_; + + public enum OutputFormatCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + TEXT_CONFIG(4), + AVRO_CONFIG(5), + OUTPUTFORMAT_NOT_SET(0); + private final int value; + + private OutputFormatCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static OutputFormatCase valueOf(int value) { + return forNumber(value); + } + + public static OutputFormatCase forNumber(int value) { + switch (value) { + case 4: + return TEXT_CONFIG; + case 5: + return AVRO_CONFIG; + case 0: + return OUTPUTFORMAT_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public OutputFormatCase getOutputFormatCase() { + return OutputFormatCase.forNumber(outputFormatCase_); + } + + public static final int BUCKET_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object bucket_ = ""; + + /** + * + * + *
+   * Required. User-provided name for the Cloud Storage bucket.
+   * The bucket must be created by the user. The bucket name must be without
+   * any prefix like "gs://". See the [bucket naming
+   * requirements] (https://cloud.google.com/storage/docs/buckets#naming).
+   * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bucket. + */ + @java.lang.Override + public java.lang.String getBucket() { + java.lang.Object ref = bucket_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + bucket_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. User-provided name for the Cloud Storage bucket.
+   * The bucket must be created by the user. The bucket name must be without
+   * any prefix like "gs://". See the [bucket naming
+   * requirements] (https://cloud.google.com/storage/docs/buckets#naming).
+   * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for bucket. + */ + @java.lang.Override + public com.google.protobuf.ByteString getBucketBytes() { + java.lang.Object ref = bucket_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + bucket_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int FILENAME_PREFIX_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object filenamePrefix_ = ""; + + /** + * + * + *
+   * Optional. User-provided prefix for Cloud Storage filename. See the [object
+   * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+   * 
+ * + * string filename_prefix = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The filenamePrefix. + */ + @java.lang.Override + public java.lang.String getFilenamePrefix() { + java.lang.Object ref = filenamePrefix_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + filenamePrefix_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. User-provided prefix for Cloud Storage filename. See the [object
+   * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+   * 
+ * + * string filename_prefix = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for filenamePrefix. + */ + @java.lang.Override + public com.google.protobuf.ByteString getFilenamePrefixBytes() { + java.lang.Object ref = filenamePrefix_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + filenamePrefix_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int FILENAME_SUFFIX_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object filenameSuffix_ = ""; + + /** + * + * + *
+   * Optional. User-provided suffix for Cloud Storage filename. See the [object
+   * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+   * Must not end in "/".
+   * 
+ * + * string filename_suffix = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The filenameSuffix. + */ + @java.lang.Override + public java.lang.String getFilenameSuffix() { + java.lang.Object ref = filenameSuffix_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + filenameSuffix_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. User-provided suffix for Cloud Storage filename. See the [object
+   * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+   * Must not end in "/".
+   * 
+ * + * string filename_suffix = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for filenameSuffix. + */ + @java.lang.Override + public com.google.protobuf.ByteString getFilenameSuffixBytes() { + java.lang.Object ref = filenameSuffix_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + filenameSuffix_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int FILENAME_DATETIME_FORMAT_FIELD_NUMBER = 10; + + @SuppressWarnings("serial") + private volatile java.lang.Object filenameDatetimeFormat_ = ""; + + /** + * + * + *
+   * Optional. User-provided format string specifying how to represent datetimes
+   * in Cloud Storage filenames. See the [datetime format
+   * guidance](https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription#file_names).
+   * 
+ * + * string filename_datetime_format = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The filenameDatetimeFormat. + */ + @java.lang.Override + public java.lang.String getFilenameDatetimeFormat() { + java.lang.Object ref = filenameDatetimeFormat_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + filenameDatetimeFormat_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. User-provided format string specifying how to represent datetimes
+   * in Cloud Storage filenames. See the [datetime format
+   * guidance](https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription#file_names).
+   * 
+ * + * string filename_datetime_format = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for filenameDatetimeFormat. + */ + @java.lang.Override + public com.google.protobuf.ByteString getFilenameDatetimeFormatBytes() { + java.lang.Object ref = filenameDatetimeFormat_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + filenameDatetimeFormat_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TEXT_CONFIG_FIELD_NUMBER = 4; + + /** + * + * + *
+   * Optional. If set, message data will be written to Cloud Storage in text
+   * format.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the textConfig field is set. + */ + @java.lang.Override + public boolean hasTextConfig() { + return outputFormatCase_ == 4; + } + + /** + * + * + *
+   * Optional. If set, message data will be written to Cloud Storage in text
+   * format.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The textConfig. + */ + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.TextConfig getTextConfig() { + if (outputFormatCase_ == 4) { + return (com.google.pubsub.v1.CloudStorageConfig.TextConfig) outputFormat_; + } + return com.google.pubsub.v1.CloudStorageConfig.TextConfig.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. If set, message data will be written to Cloud Storage in text
+   * format.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.TextConfigOrBuilder getTextConfigOrBuilder() { + if (outputFormatCase_ == 4) { + return (com.google.pubsub.v1.CloudStorageConfig.TextConfig) outputFormat_; + } + return com.google.pubsub.v1.CloudStorageConfig.TextConfig.getDefaultInstance(); + } + + public static final int AVRO_CONFIG_FIELD_NUMBER = 5; + + /** + * + * + *
+   * Optional. If set, message data will be written to Cloud Storage in Avro
+   * format.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the avroConfig field is set. + */ + @java.lang.Override + public boolean hasAvroConfig() { + return outputFormatCase_ == 5; + } + + /** + * + * + *
+   * Optional. If set, message data will be written to Cloud Storage in Avro
+   * format.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The avroConfig. + */ + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.AvroConfig getAvroConfig() { + if (outputFormatCase_ == 5) { + return (com.google.pubsub.v1.CloudStorageConfig.AvroConfig) outputFormat_; + } + return com.google.pubsub.v1.CloudStorageConfig.AvroConfig.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. If set, message data will be written to Cloud Storage in Avro
+   * format.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.AvroConfigOrBuilder getAvroConfigOrBuilder() { + if (outputFormatCase_ == 5) { + return (com.google.pubsub.v1.CloudStorageConfig.AvroConfig) outputFormat_; + } + return com.google.pubsub.v1.CloudStorageConfig.AvroConfig.getDefaultInstance(); + } + + public static final int MAX_DURATION_FIELD_NUMBER = 6; + private com.google.protobuf.Duration maxDuration_; + + /** + * + * + *
+   * Optional. The maximum duration that can elapse before a new Cloud Storage
+   * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+   * exceed the subscription's acknowledgment deadline.
+   * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the maxDuration field is set. + */ + @java.lang.Override + public boolean hasMaxDuration() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Optional. The maximum duration that can elapse before a new Cloud Storage
+   * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+   * exceed the subscription's acknowledgment deadline.
+   * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The maxDuration. + */ + @java.lang.Override + public com.google.protobuf.Duration getMaxDuration() { + return maxDuration_ == null ? com.google.protobuf.Duration.getDefaultInstance() : maxDuration_; + } + + /** + * + * + *
+   * Optional. The maximum duration that can elapse before a new Cloud Storage
+   * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+   * exceed the subscription's acknowledgment deadline.
+   * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.protobuf.DurationOrBuilder getMaxDurationOrBuilder() { + return maxDuration_ == null ? com.google.protobuf.Duration.getDefaultInstance() : maxDuration_; + } + + public static final int MAX_BYTES_FIELD_NUMBER = 7; + private long maxBytes_ = 0L; + + /** + * + * + *
+   * Optional. The maximum bytes that can be written to a Cloud Storage file
+   * before a new file is created. Min 1 KB, max 10 GiB. The max_bytes limit may
+   * be exceeded in cases where messages are larger than the limit.
+   * 
+ * + * int64 max_bytes = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxBytes. + */ + @java.lang.Override + public long getMaxBytes() { + return maxBytes_; + } + + public static final int MAX_MESSAGES_FIELD_NUMBER = 8; + private long maxMessages_ = 0L; + + /** + * + * + *
+   * Optional. The maximum number of messages that can be written to a Cloud
+   * Storage file before a new file is created. Min 1000 messages.
+   * 
+ * + * int64 max_messages = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxMessages. + */ + @java.lang.Override + public long getMaxMessages() { + return maxMessages_; + } + + public static final int STATE_FIELD_NUMBER = 9; + private int state_ = 0; + + /** + * + * + *
+   * Output only. An output-only field that indicates whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+   * Output only. An output-only field that indicates whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.State getState() { + com.google.pubsub.v1.CloudStorageConfig.State result = + com.google.pubsub.v1.CloudStorageConfig.State.forNumber(state_); + return result == null ? com.google.pubsub.v1.CloudStorageConfig.State.UNRECOGNIZED : result; + } + + public static final int SERVICE_ACCOUNT_EMAIL_FIELD_NUMBER = 11; + + @SuppressWarnings("serial") + private volatile java.lang.Object serviceAccountEmail_ = ""; + + /** + * + * + *
+   * Optional. The service account to use to write to Cloud Storage. The
+   * subscription creator or updater that specifies this field must have
+   * `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub
+   * [service agent](https://cloud.google.com/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + @java.lang.Override + public java.lang.String getServiceAccountEmail() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceAccountEmail_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The service account to use to write to Cloud Storage. The
+   * subscription creator or updater that specifies this field must have
+   * `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub
+   * [service agent](https://cloud.google.com/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + @java.lang.Override + public com.google.protobuf.ByteString getServiceAccountEmailBytes() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serviceAccountEmail_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(bucket_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, bucket_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filenamePrefix_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, filenamePrefix_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filenameSuffix_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, filenameSuffix_); + } + if (outputFormatCase_ == 4) { + output.writeMessage(4, (com.google.pubsub.v1.CloudStorageConfig.TextConfig) outputFormat_); + } + if (outputFormatCase_ == 5) { + output.writeMessage(5, (com.google.pubsub.v1.CloudStorageConfig.AvroConfig) outputFormat_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(6, getMaxDuration()); + } + if (maxBytes_ != 0L) { + output.writeInt64(7, maxBytes_); + } + if (maxMessages_ != 0L) { + output.writeInt64(8, maxMessages_); + } + if (state_ != com.google.pubsub.v1.CloudStorageConfig.State.STATE_UNSPECIFIED.getNumber()) { + output.writeEnum(9, state_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filenameDatetimeFormat_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 10, filenameDatetimeFormat_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serviceAccountEmail_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 11, serviceAccountEmail_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(bucket_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, bucket_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filenamePrefix_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, filenamePrefix_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filenameSuffix_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, filenameSuffix_); + } + if (outputFormatCase_ == 4) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 4, (com.google.pubsub.v1.CloudStorageConfig.TextConfig) outputFormat_); + } + if (outputFormatCase_ == 5) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 5, (com.google.pubsub.v1.CloudStorageConfig.AvroConfig) outputFormat_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, getMaxDuration()); + } + if (maxBytes_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(7, maxBytes_); + } + if (maxMessages_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(8, maxMessages_); + } + if (state_ != com.google.pubsub.v1.CloudStorageConfig.State.STATE_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(9, state_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filenameDatetimeFormat_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(10, filenameDatetimeFormat_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serviceAccountEmail_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(11, serviceAccountEmail_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.CloudStorageConfig)) { + return super.equals(obj); + } + com.google.pubsub.v1.CloudStorageConfig other = (com.google.pubsub.v1.CloudStorageConfig) obj; + + if (!getBucket().equals(other.getBucket())) return false; + if (!getFilenamePrefix().equals(other.getFilenamePrefix())) return false; + if (!getFilenameSuffix().equals(other.getFilenameSuffix())) return false; + if (!getFilenameDatetimeFormat().equals(other.getFilenameDatetimeFormat())) return false; + if (hasMaxDuration() != other.hasMaxDuration()) return false; + if (hasMaxDuration()) { + if (!getMaxDuration().equals(other.getMaxDuration())) return false; + } + if (getMaxBytes() != other.getMaxBytes()) return false; + if (getMaxMessages() != other.getMaxMessages()) return false; + if (state_ != other.state_) return false; + if (!getServiceAccountEmail().equals(other.getServiceAccountEmail())) return false; + if (!getOutputFormatCase().equals(other.getOutputFormatCase())) return false; + switch (outputFormatCase_) { + case 4: + if (!getTextConfig().equals(other.getTextConfig())) return false; + break; + case 5: + if (!getAvroConfig().equals(other.getAvroConfig())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + BUCKET_FIELD_NUMBER; + hash = (53 * hash) + getBucket().hashCode(); + hash = (37 * hash) + FILENAME_PREFIX_FIELD_NUMBER; + hash = (53 * hash) + getFilenamePrefix().hashCode(); + hash = (37 * hash) + FILENAME_SUFFIX_FIELD_NUMBER; + hash = (53 * hash) + getFilenameSuffix().hashCode(); + hash = (37 * hash) + FILENAME_DATETIME_FORMAT_FIELD_NUMBER; + hash = (53 * hash) + getFilenameDatetimeFormat().hashCode(); + if (hasMaxDuration()) { + hash = (37 * hash) + MAX_DURATION_FIELD_NUMBER; + hash = (53 * hash) + getMaxDuration().hashCode(); + } + hash = (37 * hash) + MAX_BYTES_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getMaxBytes()); + hash = (37 * hash) + MAX_MESSAGES_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getMaxMessages()); + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + state_; + hash = (37 * hash) + SERVICE_ACCOUNT_EMAIL_FIELD_NUMBER; + hash = (53 * hash) + getServiceAccountEmail().hashCode(); + switch (outputFormatCase_) { + case 4: + hash = (37 * hash) + TEXT_CONFIG_FIELD_NUMBER; + hash = (53 * hash) + getTextConfig().hashCode(); + break; + case 5: + hash = (37 * hash) + AVRO_CONFIG_FIELD_NUMBER; + hash = (53 * hash) + getAvroConfig().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.CloudStorageConfig parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CloudStorageConfig parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CloudStorageConfig parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CloudStorageConfig parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CloudStorageConfig parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CloudStorageConfig parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.CloudStorageConfig parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CloudStorageConfig parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.CloudStorageConfig prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Configuration for a Cloud Storage subscription.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.CloudStorageConfig} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.CloudStorageConfig) + com.google.pubsub.v1.CloudStorageConfigOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.CloudStorageConfig.class, + com.google.pubsub.v1.CloudStorageConfig.Builder.class); + } + + // Construct using com.google.pubsub.v1.CloudStorageConfig.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetMaxDurationFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + bucket_ = ""; + filenamePrefix_ = ""; + filenameSuffix_ = ""; + filenameDatetimeFormat_ = ""; + if (textConfigBuilder_ != null) { + textConfigBuilder_.clear(); + } + if (avroConfigBuilder_ != null) { + avroConfigBuilder_.clear(); + } + maxDuration_ = null; + if (maxDurationBuilder_ != null) { + maxDurationBuilder_.dispose(); + maxDurationBuilder_ = null; + } + maxBytes_ = 0L; + maxMessages_ = 0L; + state_ = 0; + serviceAccountEmail_ = ""; + outputFormatCase_ = 0; + outputFormat_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CloudStorageConfig_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig getDefaultInstanceForType() { + return com.google.pubsub.v1.CloudStorageConfig.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig build() { + com.google.pubsub.v1.CloudStorageConfig result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig buildPartial() { + com.google.pubsub.v1.CloudStorageConfig result = + new com.google.pubsub.v1.CloudStorageConfig(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.CloudStorageConfig result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.bucket_ = bucket_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.filenamePrefix_ = filenamePrefix_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.filenameSuffix_ = filenameSuffix_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.filenameDatetimeFormat_ = filenameDatetimeFormat_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000040) != 0)) { + result.maxDuration_ = + maxDurationBuilder_ == null ? maxDuration_ : maxDurationBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.maxBytes_ = maxBytes_; + } + if (((from_bitField0_ & 0x00000100) != 0)) { + result.maxMessages_ = maxMessages_; + } + if (((from_bitField0_ & 0x00000200) != 0)) { + result.state_ = state_; + } + if (((from_bitField0_ & 0x00000400) != 0)) { + result.serviceAccountEmail_ = serviceAccountEmail_; + } + result.bitField0_ |= to_bitField0_; + } + + private void buildPartialOneofs(com.google.pubsub.v1.CloudStorageConfig result) { + result.outputFormatCase_ = outputFormatCase_; + result.outputFormat_ = this.outputFormat_; + if (outputFormatCase_ == 4 && textConfigBuilder_ != null) { + result.outputFormat_ = textConfigBuilder_.build(); + } + if (outputFormatCase_ == 5 && avroConfigBuilder_ != null) { + result.outputFormat_ = avroConfigBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.CloudStorageConfig) { + return mergeFrom((com.google.pubsub.v1.CloudStorageConfig) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.CloudStorageConfig other) { + if (other == com.google.pubsub.v1.CloudStorageConfig.getDefaultInstance()) return this; + if (!other.getBucket().isEmpty()) { + bucket_ = other.bucket_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getFilenamePrefix().isEmpty()) { + filenamePrefix_ = other.filenamePrefix_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getFilenameSuffix().isEmpty()) { + filenameSuffix_ = other.filenameSuffix_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (!other.getFilenameDatetimeFormat().isEmpty()) { + filenameDatetimeFormat_ = other.filenameDatetimeFormat_; + bitField0_ |= 0x00000008; + onChanged(); + } + if (other.hasMaxDuration()) { + mergeMaxDuration(other.getMaxDuration()); + } + if (other.getMaxBytes() != 0L) { + setMaxBytes(other.getMaxBytes()); + } + if (other.getMaxMessages() != 0L) { + setMaxMessages(other.getMaxMessages()); + } + if (other.state_ != 0) { + setStateValue(other.getStateValue()); + } + if (!other.getServiceAccountEmail().isEmpty()) { + serviceAccountEmail_ = other.serviceAccountEmail_; + bitField0_ |= 0x00000400; + onChanged(); + } + switch (other.getOutputFormatCase()) { + case TEXT_CONFIG: + { + mergeTextConfig(other.getTextConfig()); + break; + } + case AVRO_CONFIG: + { + mergeAvroConfig(other.getAvroConfig()); + break; + } + case OUTPUTFORMAT_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + bucket_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + filenamePrefix_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + filenameSuffix_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + input.readMessage( + internalGetTextConfigFieldBuilder().getBuilder(), extensionRegistry); + outputFormatCase_ = 4; + break; + } // case 34 + case 42: + { + input.readMessage( + internalGetAvroConfigFieldBuilder().getBuilder(), extensionRegistry); + outputFormatCase_ = 5; + break; + } // case 42 + case 50: + { + input.readMessage( + internalGetMaxDurationFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000040; + break; + } // case 50 + case 56: + { + maxBytes_ = input.readInt64(); + bitField0_ |= 0x00000080; + break; + } // case 56 + case 64: + { + maxMessages_ = input.readInt64(); + bitField0_ |= 0x00000100; + break; + } // case 64 + case 72: + { + state_ = input.readEnum(); + bitField0_ |= 0x00000200; + break; + } // case 72 + case 82: + { + filenameDatetimeFormat_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 82 + case 90: + { + serviceAccountEmail_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000400; + break; + } // case 90 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int outputFormatCase_ = 0; + private java.lang.Object outputFormat_; + + public OutputFormatCase getOutputFormatCase() { + return OutputFormatCase.forNumber(outputFormatCase_); + } + + public Builder clearOutputFormat() { + outputFormatCase_ = 0; + outputFormat_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private java.lang.Object bucket_ = ""; + + /** + * + * + *
+     * Required. User-provided name for the Cloud Storage bucket.
+     * The bucket must be created by the user. The bucket name must be without
+     * any prefix like "gs://". See the [bucket naming
+     * requirements] (https://cloud.google.com/storage/docs/buckets#naming).
+     * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bucket. + */ + public java.lang.String getBucket() { + java.lang.Object ref = bucket_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + bucket_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. User-provided name for the Cloud Storage bucket.
+     * The bucket must be created by the user. The bucket name must be without
+     * any prefix like "gs://". See the [bucket naming
+     * requirements] (https://cloud.google.com/storage/docs/buckets#naming).
+     * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for bucket. + */ + public com.google.protobuf.ByteString getBucketBytes() { + java.lang.Object ref = bucket_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + bucket_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. User-provided name for the Cloud Storage bucket.
+     * The bucket must be created by the user. The bucket name must be without
+     * any prefix like "gs://". See the [bucket naming
+     * requirements] (https://cloud.google.com/storage/docs/buckets#naming).
+     * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bucket to set. + * @return This builder for chaining. + */ + public Builder setBucket(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bucket_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. User-provided name for the Cloud Storage bucket.
+     * The bucket must be created by the user. The bucket name must be without
+     * any prefix like "gs://". See the [bucket naming
+     * requirements] (https://cloud.google.com/storage/docs/buckets#naming).
+     * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearBucket() { + bucket_ = getDefaultInstance().getBucket(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. User-provided name for the Cloud Storage bucket.
+     * The bucket must be created by the user. The bucket name must be without
+     * any prefix like "gs://". See the [bucket naming
+     * requirements] (https://cloud.google.com/storage/docs/buckets#naming).
+     * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for bucket to set. + * @return This builder for chaining. + */ + public Builder setBucketBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + bucket_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object filenamePrefix_ = ""; + + /** + * + * + *
+     * Optional. User-provided prefix for Cloud Storage filename. See the [object
+     * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+     * 
+ * + * string filename_prefix = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The filenamePrefix. + */ + public java.lang.String getFilenamePrefix() { + java.lang.Object ref = filenamePrefix_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + filenamePrefix_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. User-provided prefix for Cloud Storage filename. See the [object
+     * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+     * 
+ * + * string filename_prefix = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for filenamePrefix. + */ + public com.google.protobuf.ByteString getFilenamePrefixBytes() { + java.lang.Object ref = filenamePrefix_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + filenamePrefix_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. User-provided prefix for Cloud Storage filename. See the [object
+     * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+     * 
+ * + * string filename_prefix = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The filenamePrefix to set. + * @return This builder for chaining. + */ + public Builder setFilenamePrefix(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + filenamePrefix_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. User-provided prefix for Cloud Storage filename. See the [object
+     * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+     * 
+ * + * string filename_prefix = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearFilenamePrefix() { + filenamePrefix_ = getDefaultInstance().getFilenamePrefix(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. User-provided prefix for Cloud Storage filename. See the [object
+     * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+     * 
+ * + * string filename_prefix = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for filenamePrefix to set. + * @return This builder for chaining. + */ + public Builder setFilenamePrefixBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + filenamePrefix_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object filenameSuffix_ = ""; + + /** + * + * + *
+     * Optional. User-provided suffix for Cloud Storage filename. See the [object
+     * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+     * Must not end in "/".
+     * 
+ * + * string filename_suffix = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The filenameSuffix. + */ + public java.lang.String getFilenameSuffix() { + java.lang.Object ref = filenameSuffix_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + filenameSuffix_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. User-provided suffix for Cloud Storage filename. See the [object
+     * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+     * Must not end in "/".
+     * 
+ * + * string filename_suffix = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for filenameSuffix. + */ + public com.google.protobuf.ByteString getFilenameSuffixBytes() { + java.lang.Object ref = filenameSuffix_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + filenameSuffix_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. User-provided suffix for Cloud Storage filename. See the [object
+     * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+     * Must not end in "/".
+     * 
+ * + * string filename_suffix = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The filenameSuffix to set. + * @return This builder for chaining. + */ + public Builder setFilenameSuffix(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + filenameSuffix_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. User-provided suffix for Cloud Storage filename. See the [object
+     * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+     * Must not end in "/".
+     * 
+ * + * string filename_suffix = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearFilenameSuffix() { + filenameSuffix_ = getDefaultInstance().getFilenameSuffix(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. User-provided suffix for Cloud Storage filename. See the [object
+     * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+     * Must not end in "/".
+     * 
+ * + * string filename_suffix = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for filenameSuffix to set. + * @return This builder for chaining. + */ + public Builder setFilenameSuffixBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + filenameSuffix_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private java.lang.Object filenameDatetimeFormat_ = ""; + + /** + * + * + *
+     * Optional. User-provided format string specifying how to represent datetimes
+     * in Cloud Storage filenames. See the [datetime format
+     * guidance](https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription#file_names).
+     * 
+ * + * string filename_datetime_format = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The filenameDatetimeFormat. + */ + public java.lang.String getFilenameDatetimeFormat() { + java.lang.Object ref = filenameDatetimeFormat_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + filenameDatetimeFormat_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. User-provided format string specifying how to represent datetimes
+     * in Cloud Storage filenames. See the [datetime format
+     * guidance](https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription#file_names).
+     * 
+ * + * string filename_datetime_format = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for filenameDatetimeFormat. + */ + public com.google.protobuf.ByteString getFilenameDatetimeFormatBytes() { + java.lang.Object ref = filenameDatetimeFormat_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + filenameDatetimeFormat_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. User-provided format string specifying how to represent datetimes
+     * in Cloud Storage filenames. See the [datetime format
+     * guidance](https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription#file_names).
+     * 
+ * + * string filename_datetime_format = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The filenameDatetimeFormat to set. + * @return This builder for chaining. + */ + public Builder setFilenameDatetimeFormat(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + filenameDatetimeFormat_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. User-provided format string specifying how to represent datetimes
+     * in Cloud Storage filenames. See the [datetime format
+     * guidance](https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription#file_names).
+     * 
+ * + * string filename_datetime_format = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearFilenameDatetimeFormat() { + filenameDatetimeFormat_ = getDefaultInstance().getFilenameDatetimeFormat(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. User-provided format string specifying how to represent datetimes
+     * in Cloud Storage filenames. See the [datetime format
+     * guidance](https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription#file_names).
+     * 
+ * + * string filename_datetime_format = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for filenameDatetimeFormat to set. + * @return This builder for chaining. + */ + public Builder setFilenameDatetimeFormatBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + filenameDatetimeFormat_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.CloudStorageConfig.TextConfig, + com.google.pubsub.v1.CloudStorageConfig.TextConfig.Builder, + com.google.pubsub.v1.CloudStorageConfig.TextConfigOrBuilder> + textConfigBuilder_; + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in text
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the textConfig field is set. + */ + @java.lang.Override + public boolean hasTextConfig() { + return outputFormatCase_ == 4; + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in text
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The textConfig. + */ + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.TextConfig getTextConfig() { + if (textConfigBuilder_ == null) { + if (outputFormatCase_ == 4) { + return (com.google.pubsub.v1.CloudStorageConfig.TextConfig) outputFormat_; + } + return com.google.pubsub.v1.CloudStorageConfig.TextConfig.getDefaultInstance(); + } else { + if (outputFormatCase_ == 4) { + return textConfigBuilder_.getMessage(); + } + return com.google.pubsub.v1.CloudStorageConfig.TextConfig.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in text
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setTextConfig(com.google.pubsub.v1.CloudStorageConfig.TextConfig value) { + if (textConfigBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + outputFormat_ = value; + onChanged(); + } else { + textConfigBuilder_.setMessage(value); + } + outputFormatCase_ = 4; + return this; + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in text
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setTextConfig( + com.google.pubsub.v1.CloudStorageConfig.TextConfig.Builder builderForValue) { + if (textConfigBuilder_ == null) { + outputFormat_ = builderForValue.build(); + onChanged(); + } else { + textConfigBuilder_.setMessage(builderForValue.build()); + } + outputFormatCase_ = 4; + return this; + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in text
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeTextConfig(com.google.pubsub.v1.CloudStorageConfig.TextConfig value) { + if (textConfigBuilder_ == null) { + if (outputFormatCase_ == 4 + && outputFormat_ + != com.google.pubsub.v1.CloudStorageConfig.TextConfig.getDefaultInstance()) { + outputFormat_ = + com.google.pubsub.v1.CloudStorageConfig.TextConfig.newBuilder( + (com.google.pubsub.v1.CloudStorageConfig.TextConfig) outputFormat_) + .mergeFrom(value) + .buildPartial(); + } else { + outputFormat_ = value; + } + onChanged(); + } else { + if (outputFormatCase_ == 4) { + textConfigBuilder_.mergeFrom(value); + } else { + textConfigBuilder_.setMessage(value); + } + } + outputFormatCase_ = 4; + return this; + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in text
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearTextConfig() { + if (textConfigBuilder_ == null) { + if (outputFormatCase_ == 4) { + outputFormatCase_ = 0; + outputFormat_ = null; + onChanged(); + } + } else { + if (outputFormatCase_ == 4) { + outputFormatCase_ = 0; + outputFormat_ = null; + } + textConfigBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in text
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.CloudStorageConfig.TextConfig.Builder getTextConfigBuilder() { + return internalGetTextConfigFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in text
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.TextConfigOrBuilder getTextConfigOrBuilder() { + if ((outputFormatCase_ == 4) && (textConfigBuilder_ != null)) { + return textConfigBuilder_.getMessageOrBuilder(); + } else { + if (outputFormatCase_ == 4) { + return (com.google.pubsub.v1.CloudStorageConfig.TextConfig) outputFormat_; + } + return com.google.pubsub.v1.CloudStorageConfig.TextConfig.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in text
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.CloudStorageConfig.TextConfig, + com.google.pubsub.v1.CloudStorageConfig.TextConfig.Builder, + com.google.pubsub.v1.CloudStorageConfig.TextConfigOrBuilder> + internalGetTextConfigFieldBuilder() { + if (textConfigBuilder_ == null) { + if (!(outputFormatCase_ == 4)) { + outputFormat_ = com.google.pubsub.v1.CloudStorageConfig.TextConfig.getDefaultInstance(); + } + textConfigBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.CloudStorageConfig.TextConfig, + com.google.pubsub.v1.CloudStorageConfig.TextConfig.Builder, + com.google.pubsub.v1.CloudStorageConfig.TextConfigOrBuilder>( + (com.google.pubsub.v1.CloudStorageConfig.TextConfig) outputFormat_, + getParentForChildren(), + isClean()); + outputFormat_ = null; + } + outputFormatCase_ = 4; + onChanged(); + return textConfigBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.CloudStorageConfig.AvroConfig, + com.google.pubsub.v1.CloudStorageConfig.AvroConfig.Builder, + com.google.pubsub.v1.CloudStorageConfig.AvroConfigOrBuilder> + avroConfigBuilder_; + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in Avro
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the avroConfig field is set. + */ + @java.lang.Override + public boolean hasAvroConfig() { + return outputFormatCase_ == 5; + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in Avro
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The avroConfig. + */ + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.AvroConfig getAvroConfig() { + if (avroConfigBuilder_ == null) { + if (outputFormatCase_ == 5) { + return (com.google.pubsub.v1.CloudStorageConfig.AvroConfig) outputFormat_; + } + return com.google.pubsub.v1.CloudStorageConfig.AvroConfig.getDefaultInstance(); + } else { + if (outputFormatCase_ == 5) { + return avroConfigBuilder_.getMessage(); + } + return com.google.pubsub.v1.CloudStorageConfig.AvroConfig.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in Avro
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAvroConfig(com.google.pubsub.v1.CloudStorageConfig.AvroConfig value) { + if (avroConfigBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + outputFormat_ = value; + onChanged(); + } else { + avroConfigBuilder_.setMessage(value); + } + outputFormatCase_ = 5; + return this; + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in Avro
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAvroConfig( + com.google.pubsub.v1.CloudStorageConfig.AvroConfig.Builder builderForValue) { + if (avroConfigBuilder_ == null) { + outputFormat_ = builderForValue.build(); + onChanged(); + } else { + avroConfigBuilder_.setMessage(builderForValue.build()); + } + outputFormatCase_ = 5; + return this; + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in Avro
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeAvroConfig(com.google.pubsub.v1.CloudStorageConfig.AvroConfig value) { + if (avroConfigBuilder_ == null) { + if (outputFormatCase_ == 5 + && outputFormat_ + != com.google.pubsub.v1.CloudStorageConfig.AvroConfig.getDefaultInstance()) { + outputFormat_ = + com.google.pubsub.v1.CloudStorageConfig.AvroConfig.newBuilder( + (com.google.pubsub.v1.CloudStorageConfig.AvroConfig) outputFormat_) + .mergeFrom(value) + .buildPartial(); + } else { + outputFormat_ = value; + } + onChanged(); + } else { + if (outputFormatCase_ == 5) { + avroConfigBuilder_.mergeFrom(value); + } else { + avroConfigBuilder_.setMessage(value); + } + } + outputFormatCase_ = 5; + return this; + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in Avro
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearAvroConfig() { + if (avroConfigBuilder_ == null) { + if (outputFormatCase_ == 5) { + outputFormatCase_ = 0; + outputFormat_ = null; + onChanged(); + } + } else { + if (outputFormatCase_ == 5) { + outputFormatCase_ = 0; + outputFormat_ = null; + } + avroConfigBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in Avro
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.CloudStorageConfig.AvroConfig.Builder getAvroConfigBuilder() { + return internalGetAvroConfigFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in Avro
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.AvroConfigOrBuilder getAvroConfigOrBuilder() { + if ((outputFormatCase_ == 5) && (avroConfigBuilder_ != null)) { + return avroConfigBuilder_.getMessageOrBuilder(); + } else { + if (outputFormatCase_ == 5) { + return (com.google.pubsub.v1.CloudStorageConfig.AvroConfig) outputFormat_; + } + return com.google.pubsub.v1.CloudStorageConfig.AvroConfig.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. If set, message data will be written to Cloud Storage in Avro
+     * format.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.CloudStorageConfig.AvroConfig, + com.google.pubsub.v1.CloudStorageConfig.AvroConfig.Builder, + com.google.pubsub.v1.CloudStorageConfig.AvroConfigOrBuilder> + internalGetAvroConfigFieldBuilder() { + if (avroConfigBuilder_ == null) { + if (!(outputFormatCase_ == 5)) { + outputFormat_ = com.google.pubsub.v1.CloudStorageConfig.AvroConfig.getDefaultInstance(); + } + avroConfigBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.CloudStorageConfig.AvroConfig, + com.google.pubsub.v1.CloudStorageConfig.AvroConfig.Builder, + com.google.pubsub.v1.CloudStorageConfig.AvroConfigOrBuilder>( + (com.google.pubsub.v1.CloudStorageConfig.AvroConfig) outputFormat_, + getParentForChildren(), + isClean()); + outputFormat_ = null; + } + outputFormatCase_ = 5; + onChanged(); + return avroConfigBuilder_; + } + + private com.google.protobuf.Duration maxDuration_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + maxDurationBuilder_; + + /** + * + * + *
+     * Optional. The maximum duration that can elapse before a new Cloud Storage
+     * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+     * exceed the subscription's acknowledgment deadline.
+     * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the maxDuration field is set. + */ + public boolean hasMaxDuration() { + return ((bitField0_ & 0x00000040) != 0); + } + + /** + * + * + *
+     * Optional. The maximum duration that can elapse before a new Cloud Storage
+     * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+     * exceed the subscription's acknowledgment deadline.
+     * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The maxDuration. + */ + public com.google.protobuf.Duration getMaxDuration() { + if (maxDurationBuilder_ == null) { + return maxDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : maxDuration_; + } else { + return maxDurationBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. The maximum duration that can elapse before a new Cloud Storage
+     * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+     * exceed the subscription's acknowledgment deadline.
+     * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMaxDuration(com.google.protobuf.Duration value) { + if (maxDurationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + maxDuration_ = value; + } else { + maxDurationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The maximum duration that can elapse before a new Cloud Storage
+     * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+     * exceed the subscription's acknowledgment deadline.
+     * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMaxDuration(com.google.protobuf.Duration.Builder builderForValue) { + if (maxDurationBuilder_ == null) { + maxDuration_ = builderForValue.build(); + } else { + maxDurationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The maximum duration that can elapse before a new Cloud Storage
+     * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+     * exceed the subscription's acknowledgment deadline.
+     * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeMaxDuration(com.google.protobuf.Duration value) { + if (maxDurationBuilder_ == null) { + if (((bitField0_ & 0x00000040) != 0) + && maxDuration_ != null + && maxDuration_ != com.google.protobuf.Duration.getDefaultInstance()) { + getMaxDurationBuilder().mergeFrom(value); + } else { + maxDuration_ = value; + } + } else { + maxDurationBuilder_.mergeFrom(value); + } + if (maxDuration_ != null) { + bitField0_ |= 0x00000040; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. The maximum duration that can elapse before a new Cloud Storage
+     * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+     * exceed the subscription's acknowledgment deadline.
+     * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMaxDuration() { + bitField0_ = (bitField0_ & ~0x00000040); + maxDuration_ = null; + if (maxDurationBuilder_ != null) { + maxDurationBuilder_.dispose(); + maxDurationBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The maximum duration that can elapse before a new Cloud Storage
+     * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+     * exceed the subscription's acknowledgment deadline.
+     * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.Duration.Builder getMaxDurationBuilder() { + bitField0_ |= 0x00000040; + onChanged(); + return internalGetMaxDurationFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. The maximum duration that can elapse before a new Cloud Storage
+     * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+     * exceed the subscription's acknowledgment deadline.
+     * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.DurationOrBuilder getMaxDurationOrBuilder() { + if (maxDurationBuilder_ != null) { + return maxDurationBuilder_.getMessageOrBuilder(); + } else { + return maxDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : maxDuration_; + } + } + + /** + * + * + *
+     * Optional. The maximum duration that can elapse before a new Cloud Storage
+     * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+     * exceed the subscription's acknowledgment deadline.
+     * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + internalGetMaxDurationFieldBuilder() { + if (maxDurationBuilder_ == null) { + maxDurationBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder>( + getMaxDuration(), getParentForChildren(), isClean()); + maxDuration_ = null; + } + return maxDurationBuilder_; + } + + private long maxBytes_; + + /** + * + * + *
+     * Optional. The maximum bytes that can be written to a Cloud Storage file
+     * before a new file is created. Min 1 KB, max 10 GiB. The max_bytes limit may
+     * be exceeded in cases where messages are larger than the limit.
+     * 
+ * + * int64 max_bytes = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxBytes. + */ + @java.lang.Override + public long getMaxBytes() { + return maxBytes_; + } + + /** + * + * + *
+     * Optional. The maximum bytes that can be written to a Cloud Storage file
+     * before a new file is created. Min 1 KB, max 10 GiB. The max_bytes limit may
+     * be exceeded in cases where messages are larger than the limit.
+     * 
+ * + * int64 max_bytes = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The maxBytes to set. + * @return This builder for chaining. + */ + public Builder setMaxBytes(long value) { + + maxBytes_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The maximum bytes that can be written to a Cloud Storage file
+     * before a new file is created. Min 1 KB, max 10 GiB. The max_bytes limit may
+     * be exceeded in cases where messages are larger than the limit.
+     * 
+ * + * int64 max_bytes = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearMaxBytes() { + bitField0_ = (bitField0_ & ~0x00000080); + maxBytes_ = 0L; + onChanged(); + return this; + } + + private long maxMessages_; + + /** + * + * + *
+     * Optional. The maximum number of messages that can be written to a Cloud
+     * Storage file before a new file is created. Min 1000 messages.
+     * 
+ * + * int64 max_messages = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxMessages. + */ + @java.lang.Override + public long getMaxMessages() { + return maxMessages_; + } + + /** + * + * + *
+     * Optional. The maximum number of messages that can be written to a Cloud
+     * Storage file before a new file is created. Min 1000 messages.
+     * 
+ * + * int64 max_messages = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The maxMessages to set. + * @return This builder for chaining. + */ + public Builder setMaxMessages(long value) { + + maxMessages_ = value; + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The maximum number of messages that can be written to a Cloud
+     * Storage file before a new file is created. Min 1000 messages.
+     * 
+ * + * int64 max_messages = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearMaxMessages() { + bitField0_ = (bitField0_ & ~0x00000100); + maxMessages_ = 0L; + onChanged(); + return this; + } + + private int state_ = 0; + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The enum numeric value on the wire for state to set. + * @return This builder for chaining. + */ + public Builder setStateValue(int value) { + state_ = value; + bitField0_ |= 0x00000200; + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig.State getState() { + com.google.pubsub.v1.CloudStorageConfig.State result = + com.google.pubsub.v1.CloudStorageConfig.State.forNumber(state_); + return result == null ? com.google.pubsub.v1.CloudStorageConfig.State.UNRECOGNIZED : result; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The state to set. + * @return This builder for chaining. + */ + public Builder setState(com.google.pubsub.v1.CloudStorageConfig.State value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000200; + state_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearState() { + bitField0_ = (bitField0_ & ~0x00000200); + state_ = 0; + onChanged(); + return this; + } + + private java.lang.Object serviceAccountEmail_ = ""; + + /** + * + * + *
+     * Optional. The service account to use to write to Cloud Storage. The
+     * subscription creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub
+     * [service agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + public java.lang.String getServiceAccountEmail() { + java.lang.Object ref = serviceAccountEmail_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceAccountEmail_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The service account to use to write to Cloud Storage. The
+     * subscription creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub
+     * [service agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + public com.google.protobuf.ByteString getServiceAccountEmailBytes() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serviceAccountEmail_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The service account to use to write to Cloud Storage. The
+     * subscription creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub
+     * [service agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The serviceAccountEmail to set. + * @return This builder for chaining. + */ + public Builder setServiceAccountEmail(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + serviceAccountEmail_ = value; + bitField0_ |= 0x00000400; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The service account to use to write to Cloud Storage. The
+     * subscription creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub
+     * [service agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearServiceAccountEmail() { + serviceAccountEmail_ = getDefaultInstance().getServiceAccountEmail(); + bitField0_ = (bitField0_ & ~0x00000400); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The service account to use to write to Cloud Storage. The
+     * subscription creator or updater that specifies this field must have
+     * `iam.serviceAccounts.actAs` permission on the service account. If not
+     * specified, the Pub/Sub
+     * [service agent](https://cloud.google.com/iam/docs/service-agents),
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+     * 
+ * + * string service_account_email = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for serviceAccountEmail to set. + * @return This builder for chaining. + */ + public Builder setServiceAccountEmailBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + serviceAccountEmail_ = value; + bitField0_ |= 0x00000400; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.CloudStorageConfig) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.CloudStorageConfig) + private static final com.google.pubsub.v1.CloudStorageConfig DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.CloudStorageConfig(); + } + + public static com.google.pubsub.v1.CloudStorageConfig getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public CloudStorageConfig parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CloudStorageConfigOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CloudStorageConfigOrBuilder.java new file mode 100644 index 000000000000..2c2bc260b2e0 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CloudStorageConfigOrBuilder.java @@ -0,0 +1,385 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface CloudStorageConfigOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.CloudStorageConfig) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. User-provided name for the Cloud Storage bucket.
+   * The bucket must be created by the user. The bucket name must be without
+   * any prefix like "gs://". See the [bucket naming
+   * requirements] (https://cloud.google.com/storage/docs/buckets#naming).
+   * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bucket. + */ + java.lang.String getBucket(); + + /** + * + * + *
+   * Required. User-provided name for the Cloud Storage bucket.
+   * The bucket must be created by the user. The bucket name must be without
+   * any prefix like "gs://". See the [bucket naming
+   * requirements] (https://cloud.google.com/storage/docs/buckets#naming).
+   * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for bucket. + */ + com.google.protobuf.ByteString getBucketBytes(); + + /** + * + * + *
+   * Optional. User-provided prefix for Cloud Storage filename. See the [object
+   * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+   * 
+ * + * string filename_prefix = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The filenamePrefix. + */ + java.lang.String getFilenamePrefix(); + + /** + * + * + *
+   * Optional. User-provided prefix for Cloud Storage filename. See the [object
+   * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+   * 
+ * + * string filename_prefix = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for filenamePrefix. + */ + com.google.protobuf.ByteString getFilenamePrefixBytes(); + + /** + * + * + *
+   * Optional. User-provided suffix for Cloud Storage filename. See the [object
+   * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+   * Must not end in "/".
+   * 
+ * + * string filename_suffix = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The filenameSuffix. + */ + java.lang.String getFilenameSuffix(); + + /** + * + * + *
+   * Optional. User-provided suffix for Cloud Storage filename. See the [object
+   * naming requirements](https://cloud.google.com/storage/docs/objects#naming).
+   * Must not end in "/".
+   * 
+ * + * string filename_suffix = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for filenameSuffix. + */ + com.google.protobuf.ByteString getFilenameSuffixBytes(); + + /** + * + * + *
+   * Optional. User-provided format string specifying how to represent datetimes
+   * in Cloud Storage filenames. See the [datetime format
+   * guidance](https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription#file_names).
+   * 
+ * + * string filename_datetime_format = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The filenameDatetimeFormat. + */ + java.lang.String getFilenameDatetimeFormat(); + + /** + * + * + *
+   * Optional. User-provided format string specifying how to represent datetimes
+   * in Cloud Storage filenames. See the [datetime format
+   * guidance](https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription#file_names).
+   * 
+ * + * string filename_datetime_format = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for filenameDatetimeFormat. + */ + com.google.protobuf.ByteString getFilenameDatetimeFormatBytes(); + + /** + * + * + *
+   * Optional. If set, message data will be written to Cloud Storage in text
+   * format.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the textConfig field is set. + */ + boolean hasTextConfig(); + + /** + * + * + *
+   * Optional. If set, message data will be written to Cloud Storage in text
+   * format.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The textConfig. + */ + com.google.pubsub.v1.CloudStorageConfig.TextConfig getTextConfig(); + + /** + * + * + *
+   * Optional. If set, message data will be written to Cloud Storage in text
+   * format.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.TextConfig text_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.CloudStorageConfig.TextConfigOrBuilder getTextConfigOrBuilder(); + + /** + * + * + *
+   * Optional. If set, message data will be written to Cloud Storage in Avro
+   * format.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the avroConfig field is set. + */ + boolean hasAvroConfig(); + + /** + * + * + *
+   * Optional. If set, message data will be written to Cloud Storage in Avro
+   * format.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The avroConfig. + */ + com.google.pubsub.v1.CloudStorageConfig.AvroConfig getAvroConfig(); + + /** + * + * + *
+   * Optional. If set, message data will be written to Cloud Storage in Avro
+   * format.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.AvroConfig avro_config = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.CloudStorageConfig.AvroConfigOrBuilder getAvroConfigOrBuilder(); + + /** + * + * + *
+   * Optional. The maximum duration that can elapse before a new Cloud Storage
+   * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+   * exceed the subscription's acknowledgment deadline.
+   * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the maxDuration field is set. + */ + boolean hasMaxDuration(); + + /** + * + * + *
+   * Optional. The maximum duration that can elapse before a new Cloud Storage
+   * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+   * exceed the subscription's acknowledgment deadline.
+   * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The maxDuration. + */ + com.google.protobuf.Duration getMaxDuration(); + + /** + * + * + *
+   * Optional. The maximum duration that can elapse before a new Cloud Storage
+   * file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not
+   * exceed the subscription's acknowledgment deadline.
+   * 
+ * + * .google.protobuf.Duration max_duration = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.protobuf.DurationOrBuilder getMaxDurationOrBuilder(); + + /** + * + * + *
+   * Optional. The maximum bytes that can be written to a Cloud Storage file
+   * before a new file is created. Min 1 KB, max 10 GiB. The max_bytes limit may
+   * be exceeded in cases where messages are larger than the limit.
+   * 
+ * + * int64 max_bytes = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxBytes. + */ + long getMaxBytes(); + + /** + * + * + *
+   * Optional. The maximum number of messages that can be written to a Cloud
+   * Storage file before a new file is created. Min 1000 messages.
+   * 
+ * + * int64 max_messages = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxMessages. + */ + long getMaxMessages(); + + /** + * + * + *
+   * Output only. An output-only field that indicates whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + int getStateValue(); + + /** + * + * + *
+   * Output only. An output-only field that indicates whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + com.google.pubsub.v1.CloudStorageConfig.State getState(); + + /** + * + * + *
+   * Optional. The service account to use to write to Cloud Storage. The
+   * subscription creator or updater that specifies this field must have
+   * `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub
+   * [service agent](https://cloud.google.com/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + java.lang.String getServiceAccountEmail(); + + /** + * + * + *
+   * Optional. The service account to use to write to Cloud Storage. The
+   * subscription creator or updater that specifies this field must have
+   * `iam.serviceAccounts.actAs` permission on the service account. If not
+   * specified, the Pub/Sub
+   * [service agent](https://cloud.google.com/iam/docs/service-agents),
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used.
+   * 
+ * + * string service_account_email = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + com.google.protobuf.ByteString getServiceAccountEmailBytes(); + + com.google.pubsub.v1.CloudStorageConfig.OutputFormatCase getOutputFormatCase(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CommitSchemaRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CommitSchemaRequest.java new file mode 100644 index 000000000000..1f8cc26bcbe4 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CommitSchemaRequest.java @@ -0,0 +1,898 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for CommitSchema method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.CommitSchemaRequest} + */ +@com.google.protobuf.Generated +public final class CommitSchemaRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.CommitSchemaRequest) + CommitSchemaRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CommitSchemaRequest"); + } + + // Use CommitSchemaRequest.newBuilder() to construct. + private CommitSchemaRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private CommitSchemaRequest() { + name_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_CommitSchemaRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_CommitSchemaRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.CommitSchemaRequest.class, + com.google.pubsub.v1.CommitSchemaRequest.Builder.class); + } + + private int bitField0_; + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
+   * Required. The name of the schema we are revising.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the schema we are revising.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SCHEMA_FIELD_NUMBER = 2; + private com.google.pubsub.v1.Schema schema_; + + /** + * + * + *
+   * Required. The schema revision to commit.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the schema field is set. + */ + @java.lang.Override + public boolean hasSchema() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Required. The schema revision to commit.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The schema. + */ + @java.lang.Override + public com.google.pubsub.v1.Schema getSchema() { + return schema_ == null ? com.google.pubsub.v1.Schema.getDefaultInstance() : schema_; + } + + /** + * + * + *
+   * Required. The schema revision to commit.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaOrBuilder getSchemaOrBuilder() { + return schema_ == null ? com.google.pubsub.v1.Schema.getDefaultInstance() : schema_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(2, getSchema()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getSchema()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.CommitSchemaRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.CommitSchemaRequest other = (com.google.pubsub.v1.CommitSchemaRequest) obj; + + if (!getName().equals(other.getName())) return false; + if (hasSchema() != other.hasSchema()) return false; + if (hasSchema()) { + if (!getSchema().equals(other.getSchema())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + if (hasSchema()) { + hash = (37 * hash) + SCHEMA_FIELD_NUMBER; + hash = (53 * hash) + getSchema().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.CommitSchemaRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CommitSchemaRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CommitSchemaRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CommitSchemaRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CommitSchemaRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CommitSchemaRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CommitSchemaRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CommitSchemaRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.CommitSchemaRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CommitSchemaRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.CommitSchemaRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CommitSchemaRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.CommitSchemaRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for CommitSchema method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.CommitSchemaRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.CommitSchemaRequest) + com.google.pubsub.v1.CommitSchemaRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_CommitSchemaRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_CommitSchemaRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.CommitSchemaRequest.class, + com.google.pubsub.v1.CommitSchemaRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.CommitSchemaRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetSchemaFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + schema_ = null; + if (schemaBuilder_ != null) { + schemaBuilder_.dispose(); + schemaBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_CommitSchemaRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.CommitSchemaRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.CommitSchemaRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.CommitSchemaRequest build() { + com.google.pubsub.v1.CommitSchemaRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.CommitSchemaRequest buildPartial() { + com.google.pubsub.v1.CommitSchemaRequest result = + new com.google.pubsub.v1.CommitSchemaRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.CommitSchemaRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.schema_ = schemaBuilder_ == null ? schema_ : schemaBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.CommitSchemaRequest) { + return mergeFrom((com.google.pubsub.v1.CommitSchemaRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.CommitSchemaRequest other) { + if (other == com.google.pubsub.v1.CommitSchemaRequest.getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.hasSchema()) { + mergeSchema(other.getSchema()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage(internalGetSchemaFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object name_ = ""; + + /** + * + * + *
+     * Required. The name of the schema we are revising.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the schema we are revising.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the schema we are revising.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the schema we are revising.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the schema we are revising.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.pubsub.v1.Schema schema_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder> + schemaBuilder_; + + /** + * + * + *
+     * Required. The schema revision to commit.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the schema field is set. + */ + public boolean hasSchema() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+     * Required. The schema revision to commit.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The schema. + */ + public com.google.pubsub.v1.Schema getSchema() { + if (schemaBuilder_ == null) { + return schema_ == null ? com.google.pubsub.v1.Schema.getDefaultInstance() : schema_; + } else { + return schemaBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. The schema revision to commit.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setSchema(com.google.pubsub.v1.Schema value) { + if (schemaBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + schema_ = value; + } else { + schemaBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The schema revision to commit.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setSchema(com.google.pubsub.v1.Schema.Builder builderForValue) { + if (schemaBuilder_ == null) { + schema_ = builderForValue.build(); + } else { + schemaBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The schema revision to commit.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder mergeSchema(com.google.pubsub.v1.Schema value) { + if (schemaBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && schema_ != null + && schema_ != com.google.pubsub.v1.Schema.getDefaultInstance()) { + getSchemaBuilder().mergeFrom(value); + } else { + schema_ = value; + } + } else { + schemaBuilder_.mergeFrom(value); + } + if (schema_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. The schema revision to commit.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder clearSchema() { + bitField0_ = (bitField0_ & ~0x00000002); + schema_ = null; + if (schemaBuilder_ != null) { + schemaBuilder_.dispose(); + schemaBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The schema revision to commit.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.pubsub.v1.Schema.Builder getSchemaBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetSchemaFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. The schema revision to commit.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.pubsub.v1.SchemaOrBuilder getSchemaOrBuilder() { + if (schemaBuilder_ != null) { + return schemaBuilder_.getMessageOrBuilder(); + } else { + return schema_ == null ? com.google.pubsub.v1.Schema.getDefaultInstance() : schema_; + } + } + + /** + * + * + *
+     * Required. The schema revision to commit.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder> + internalGetSchemaFieldBuilder() { + if (schemaBuilder_ == null) { + schemaBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder>( + getSchema(), getParentForChildren(), isClean()); + schema_ = null; + } + return schemaBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.CommitSchemaRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.CommitSchemaRequest) + private static final com.google.pubsub.v1.CommitSchemaRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.CommitSchemaRequest(); + } + + public static com.google.pubsub.v1.CommitSchemaRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public CommitSchemaRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.CommitSchemaRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CommitSchemaRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CommitSchemaRequestOrBuilder.java new file mode 100644 index 000000000000..b904f9d0e046 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CommitSchemaRequestOrBuilder.java @@ -0,0 +1,97 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface CommitSchemaRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.CommitSchemaRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the schema we are revising.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Required. The name of the schema we are revising.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * + * + *
+   * Required. The schema revision to commit.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the schema field is set. + */ + boolean hasSchema(); + + /** + * + * + *
+   * Required. The schema revision to commit.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The schema. + */ + com.google.pubsub.v1.Schema getSchema(); + + /** + * + * + *
+   * Required. The schema revision to commit.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + com.google.pubsub.v1.SchemaOrBuilder getSchemaOrBuilder(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CreateSchemaRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CreateSchemaRequest.java new file mode 100644 index 000000000000..4db632921eb3 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CreateSchemaRequest.java @@ -0,0 +1,1163 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the CreateSchema method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.CreateSchemaRequest} + */ +@com.google.protobuf.Generated +public final class CreateSchemaRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.CreateSchemaRequest) + CreateSchemaRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateSchemaRequest"); + } + + // Use CreateSchemaRequest.newBuilder() to construct. + private CreateSchemaRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private CreateSchemaRequest() { + parent_ = ""; + schemaId_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_CreateSchemaRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_CreateSchemaRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.CreateSchemaRequest.class, + com.google.pubsub.v1.CreateSchemaRequest.Builder.class); + } + + private int bitField0_; + public static final int PARENT_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object parent_ = ""; + + /** + * + * + *
+   * Required. The name of the project in which to create the schema.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + @java.lang.Override + public java.lang.String getParent() { + java.lang.Object ref = parent_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parent_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the project in which to create the schema.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + @java.lang.Override + public com.google.protobuf.ByteString getParentBytes() { + java.lang.Object ref = parent_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + parent_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SCHEMA_FIELD_NUMBER = 2; + private com.google.pubsub.v1.Schema schema_; + + /** + * + * + *
+   * Required. The schema object to create.
+   *
+   * This schema's `name` parameter is ignored. The schema object returned
+   * by CreateSchema will have a `name` made using the given `parent` and
+   * `schema_id`.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the schema field is set. + */ + @java.lang.Override + public boolean hasSchema() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Required. The schema object to create.
+   *
+   * This schema's `name` parameter is ignored. The schema object returned
+   * by CreateSchema will have a `name` made using the given `parent` and
+   * `schema_id`.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The schema. + */ + @java.lang.Override + public com.google.pubsub.v1.Schema getSchema() { + return schema_ == null ? com.google.pubsub.v1.Schema.getDefaultInstance() : schema_; + } + + /** + * + * + *
+   * Required. The schema object to create.
+   *
+   * This schema's `name` parameter is ignored. The schema object returned
+   * by CreateSchema will have a `name` made using the given `parent` and
+   * `schema_id`.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaOrBuilder getSchemaOrBuilder() { + return schema_ == null ? com.google.pubsub.v1.Schema.getDefaultInstance() : schema_; + } + + public static final int SCHEMA_ID_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object schemaId_ = ""; + + /** + * + * + *
+   * The ID to use for the schema, which will become the final component of
+   * the schema's resource name.
+   *
+   * See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for
+   * resource name constraints.
+   * 
+ * + * string schema_id = 3; + * + * @return The schemaId. + */ + @java.lang.Override + public java.lang.String getSchemaId() { + java.lang.Object ref = schemaId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + schemaId_ = s; + return s; + } + } + + /** + * + * + *
+   * The ID to use for the schema, which will become the final component of
+   * the schema's resource name.
+   *
+   * See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for
+   * resource name constraints.
+   * 
+ * + * string schema_id = 3; + * + * @return The bytes for schemaId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSchemaIdBytes() { + java.lang.Object ref = schemaId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + schemaId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(2, getSchema()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(schemaId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, schemaId_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getSchema()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(schemaId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, schemaId_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.CreateSchemaRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.CreateSchemaRequest other = (com.google.pubsub.v1.CreateSchemaRequest) obj; + + if (!getParent().equals(other.getParent())) return false; + if (hasSchema() != other.hasSchema()) return false; + if (hasSchema()) { + if (!getSchema().equals(other.getSchema())) return false; + } + if (!getSchemaId().equals(other.getSchemaId())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PARENT_FIELD_NUMBER; + hash = (53 * hash) + getParent().hashCode(); + if (hasSchema()) { + hash = (37 * hash) + SCHEMA_FIELD_NUMBER; + hash = (53 * hash) + getSchema().hashCode(); + } + hash = (37 * hash) + SCHEMA_ID_FIELD_NUMBER; + hash = (53 * hash) + getSchemaId().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.CreateSchemaRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CreateSchemaRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CreateSchemaRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CreateSchemaRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CreateSchemaRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CreateSchemaRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CreateSchemaRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CreateSchemaRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.CreateSchemaRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CreateSchemaRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.CreateSchemaRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CreateSchemaRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.CreateSchemaRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the CreateSchema method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.CreateSchemaRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.CreateSchemaRequest) + com.google.pubsub.v1.CreateSchemaRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_CreateSchemaRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_CreateSchemaRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.CreateSchemaRequest.class, + com.google.pubsub.v1.CreateSchemaRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.CreateSchemaRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetSchemaFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + parent_ = ""; + schema_ = null; + if (schemaBuilder_ != null) { + schemaBuilder_.dispose(); + schemaBuilder_ = null; + } + schemaId_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_CreateSchemaRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.CreateSchemaRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.CreateSchemaRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.CreateSchemaRequest build() { + com.google.pubsub.v1.CreateSchemaRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.CreateSchemaRequest buildPartial() { + com.google.pubsub.v1.CreateSchemaRequest result = + new com.google.pubsub.v1.CreateSchemaRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.CreateSchemaRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.parent_ = parent_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.schema_ = schemaBuilder_ == null ? schema_ : schemaBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.schemaId_ = schemaId_; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.CreateSchemaRequest) { + return mergeFrom((com.google.pubsub.v1.CreateSchemaRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.CreateSchemaRequest other) { + if (other == com.google.pubsub.v1.CreateSchemaRequest.getDefaultInstance()) return this; + if (!other.getParent().isEmpty()) { + parent_ = other.parent_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.hasSchema()) { + mergeSchema(other.getSchema()); + } + if (!other.getSchemaId().isEmpty()) { + schemaId_ = other.schemaId_; + bitField0_ |= 0x00000004; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + parent_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage(internalGetSchemaFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + schemaId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object parent_ = ""; + + /** + * + * + *
+     * Required. The name of the project in which to create the schema.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + public java.lang.String getParent() { + java.lang.Object ref = parent_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parent_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to create the schema.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + public com.google.protobuf.ByteString getParentBytes() { + java.lang.Object ref = parent_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + parent_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to create the schema.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The parent to set. + * @return This builder for chaining. + */ + public Builder setParent(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + parent_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to create the schema.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearParent() { + parent_ = getDefaultInstance().getParent(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to create the schema.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for parent to set. + * @return This builder for chaining. + */ + public Builder setParentBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + parent_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.pubsub.v1.Schema schema_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder> + schemaBuilder_; + + /** + * + * + *
+     * Required. The schema object to create.
+     *
+     * This schema's `name` parameter is ignored. The schema object returned
+     * by CreateSchema will have a `name` made using the given `parent` and
+     * `schema_id`.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the schema field is set. + */ + public boolean hasSchema() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+     * Required. The schema object to create.
+     *
+     * This schema's `name` parameter is ignored. The schema object returned
+     * by CreateSchema will have a `name` made using the given `parent` and
+     * `schema_id`.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The schema. + */ + public com.google.pubsub.v1.Schema getSchema() { + if (schemaBuilder_ == null) { + return schema_ == null ? com.google.pubsub.v1.Schema.getDefaultInstance() : schema_; + } else { + return schemaBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. The schema object to create.
+     *
+     * This schema's `name` parameter is ignored. The schema object returned
+     * by CreateSchema will have a `name` made using the given `parent` and
+     * `schema_id`.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setSchema(com.google.pubsub.v1.Schema value) { + if (schemaBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + schema_ = value; + } else { + schemaBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The schema object to create.
+     *
+     * This schema's `name` parameter is ignored. The schema object returned
+     * by CreateSchema will have a `name` made using the given `parent` and
+     * `schema_id`.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setSchema(com.google.pubsub.v1.Schema.Builder builderForValue) { + if (schemaBuilder_ == null) { + schema_ = builderForValue.build(); + } else { + schemaBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The schema object to create.
+     *
+     * This schema's `name` parameter is ignored. The schema object returned
+     * by CreateSchema will have a `name` made using the given `parent` and
+     * `schema_id`.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder mergeSchema(com.google.pubsub.v1.Schema value) { + if (schemaBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && schema_ != null + && schema_ != com.google.pubsub.v1.Schema.getDefaultInstance()) { + getSchemaBuilder().mergeFrom(value); + } else { + schema_ = value; + } + } else { + schemaBuilder_.mergeFrom(value); + } + if (schema_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. The schema object to create.
+     *
+     * This schema's `name` parameter is ignored. The schema object returned
+     * by CreateSchema will have a `name` made using the given `parent` and
+     * `schema_id`.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder clearSchema() { + bitField0_ = (bitField0_ & ~0x00000002); + schema_ = null; + if (schemaBuilder_ != null) { + schemaBuilder_.dispose(); + schemaBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The schema object to create.
+     *
+     * This schema's `name` parameter is ignored. The schema object returned
+     * by CreateSchema will have a `name` made using the given `parent` and
+     * `schema_id`.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.pubsub.v1.Schema.Builder getSchemaBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetSchemaFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. The schema object to create.
+     *
+     * This schema's `name` parameter is ignored. The schema object returned
+     * by CreateSchema will have a `name` made using the given `parent` and
+     * `schema_id`.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.pubsub.v1.SchemaOrBuilder getSchemaOrBuilder() { + if (schemaBuilder_ != null) { + return schemaBuilder_.getMessageOrBuilder(); + } else { + return schema_ == null ? com.google.pubsub.v1.Schema.getDefaultInstance() : schema_; + } + } + + /** + * + * + *
+     * Required. The schema object to create.
+     *
+     * This schema's `name` parameter is ignored. The schema object returned
+     * by CreateSchema will have a `name` made using the given `parent` and
+     * `schema_id`.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder> + internalGetSchemaFieldBuilder() { + if (schemaBuilder_ == null) { + schemaBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder>( + getSchema(), getParentForChildren(), isClean()); + schema_ = null; + } + return schemaBuilder_; + } + + private java.lang.Object schemaId_ = ""; + + /** + * + * + *
+     * The ID to use for the schema, which will become the final component of
+     * the schema's resource name.
+     *
+     * See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for
+     * resource name constraints.
+     * 
+ * + * string schema_id = 3; + * + * @return The schemaId. + */ + public java.lang.String getSchemaId() { + java.lang.Object ref = schemaId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + schemaId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * The ID to use for the schema, which will become the final component of
+     * the schema's resource name.
+     *
+     * See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for
+     * resource name constraints.
+     * 
+ * + * string schema_id = 3; + * + * @return The bytes for schemaId. + */ + public com.google.protobuf.ByteString getSchemaIdBytes() { + java.lang.Object ref = schemaId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + schemaId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * The ID to use for the schema, which will become the final component of
+     * the schema's resource name.
+     *
+     * See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for
+     * resource name constraints.
+     * 
+ * + * string schema_id = 3; + * + * @param value The schemaId to set. + * @return This builder for chaining. + */ + public Builder setSchemaId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + schemaId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * The ID to use for the schema, which will become the final component of
+     * the schema's resource name.
+     *
+     * See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for
+     * resource name constraints.
+     * 
+ * + * string schema_id = 3; + * + * @return This builder for chaining. + */ + public Builder clearSchemaId() { + schemaId_ = getDefaultInstance().getSchemaId(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+     * The ID to use for the schema, which will become the final component of
+     * the schema's resource name.
+     *
+     * See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for
+     * resource name constraints.
+     * 
+ * + * string schema_id = 3; + * + * @param value The bytes for schemaId to set. + * @return This builder for chaining. + */ + public Builder setSchemaIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + schemaId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.CreateSchemaRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.CreateSchemaRequest) + private static final com.google.pubsub.v1.CreateSchemaRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.CreateSchemaRequest(); + } + + public static com.google.pubsub.v1.CreateSchemaRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public CreateSchemaRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.CreateSchemaRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CreateSchemaRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CreateSchemaRequestOrBuilder.java new file mode 100644 index 000000000000..4fa65546b8fa --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CreateSchemaRequestOrBuilder.java @@ -0,0 +1,143 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface CreateSchemaRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.CreateSchemaRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the project in which to create the schema.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + java.lang.String getParent(); + + /** + * + * + *
+   * Required. The name of the project in which to create the schema.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + com.google.protobuf.ByteString getParentBytes(); + + /** + * + * + *
+   * Required. The schema object to create.
+   *
+   * This schema's `name` parameter is ignored. The schema object returned
+   * by CreateSchema will have a `name` made using the given `parent` and
+   * `schema_id`.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the schema field is set. + */ + boolean hasSchema(); + + /** + * + * + *
+   * Required. The schema object to create.
+   *
+   * This schema's `name` parameter is ignored. The schema object returned
+   * by CreateSchema will have a `name` made using the given `parent` and
+   * `schema_id`.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The schema. + */ + com.google.pubsub.v1.Schema getSchema(); + + /** + * + * + *
+   * Required. The schema object to create.
+   *
+   * This schema's `name` parameter is ignored. The schema object returned
+   * by CreateSchema will have a `name` made using the given `parent` and
+   * `schema_id`.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + com.google.pubsub.v1.SchemaOrBuilder getSchemaOrBuilder(); + + /** + * + * + *
+   * The ID to use for the schema, which will become the final component of
+   * the schema's resource name.
+   *
+   * See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for
+   * resource name constraints.
+   * 
+ * + * string schema_id = 3; + * + * @return The schemaId. + */ + java.lang.String getSchemaId(); + + /** + * + * + *
+   * The ID to use for the schema, which will become the final component of
+   * the schema's resource name.
+   *
+   * See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for
+   * resource name constraints.
+   * 
+ * + * string schema_id = 3; + * + * @return The bytes for schemaId. + */ + com.google.protobuf.ByteString getSchemaIdBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CreateSnapshotRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CreateSnapshotRequest.java new file mode 100644 index 000000000000..d911473d593b --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CreateSnapshotRequest.java @@ -0,0 +1,1658 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `CreateSnapshot` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.CreateSnapshotRequest} + */ +@com.google.protobuf.Generated +public final class CreateSnapshotRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.CreateSnapshotRequest) + CreateSnapshotRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CreateSnapshotRequest"); + } + + // Use CreateSnapshotRequest.newBuilder() to construct. + private CreateSnapshotRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private CreateSnapshotRequest() { + name_ = ""; + subscription_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CreateSnapshotRequest_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 3: + return internalGetLabels(); + case 4: + return internalGetTags(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CreateSnapshotRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.CreateSnapshotRequest.class, + com.google.pubsub.v1.CreateSnapshotRequest.Builder.class); + } + + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
+   * Required. User-provided name for this snapshot. If the name is not provided
+   * in the request, the server will assign a random name for this snapshot on
+   * the same project as the subscription. Note that for REST API requests, you
+   * must specify a name.  See the [resource name
+   * rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+   * Format is `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. User-provided name for this snapshot. If the name is not provided
+   * in the request, the server will assign a random name for this snapshot on
+   * the same project as the subscription. Note that for REST API requests, you
+   * must specify a name.  See the [resource name
+   * rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+   * Format is `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SUBSCRIPTION_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object subscription_ = ""; + + /** + * + * + *
+   * Required. The subscription whose backlog the snapshot retains.
+   * Specifically, the created snapshot is guaranteed to retain:
+   * (a) The existing backlog on the subscription. More precisely, this is
+   * defined as the messages in the subscription's backlog that are
+   * unacknowledged upon the successful completion of the
+   * `CreateSnapshot` request; as well as:
+   * (b) Any messages published to the subscription's topic following the
+   * successful completion of the CreateSnapshot request.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + @java.lang.Override + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The subscription whose backlog the snapshot retains.
+   * Specifically, the created snapshot is guaranteed to retain:
+   * (a) The existing backlog on the subscription. More precisely, this is
+   * defined as the messages in the subscription's backlog that are
+   * unacknowledged upon the successful completion of the
+   * `CreateSnapshot` request; as well as:
+   * (b) Any messages published to the subscription's topic following the
+   * successful completion of the CreateSnapshot request.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int LABELS_FIELD_NUMBER = 3; + + private static final class LabelsDefaultEntryHolder { + static final com.google.protobuf.MapEntry defaultEntry = + com.google.protobuf.MapEntry.newDefaultInstance( + com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CreateSnapshotRequest_LabelsEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + + @SuppressWarnings("serial") + private com.google.protobuf.MapField labels_; + + private com.google.protobuf.MapField internalGetLabels() { + if (labels_ == null) { + return com.google.protobuf.MapField.emptyMapField(LabelsDefaultEntryHolder.defaultEntry); + } + return labels_; + } + + public int getLabelsCount() { + return internalGetLabels().getMap().size(); + } + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public boolean containsLabels(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetLabels().getMap().containsKey(key); + } + + /** Use {@link #getLabelsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getLabels() { + return getLabelsMap(); + } + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.util.Map getLabelsMap() { + return internalGetLabels().getMap(); + } + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public /* nullable */ java.lang.String getLabelsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.lang.String getLabelsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public static final int TAGS_FIELD_NUMBER = 4; + + private static final class TagsDefaultEntryHolder { + static final com.google.protobuf.MapEntry defaultEntry = + com.google.protobuf.MapEntry.newDefaultInstance( + com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CreateSnapshotRequest_TagsEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + + @SuppressWarnings("serial") + private com.google.protobuf.MapField tags_; + + private com.google.protobuf.MapField internalGetTags() { + if (tags_ == null) { + return com.google.protobuf.MapField.emptyMapField(TagsDefaultEntryHolder.defaultEntry); + } + return tags_; + } + + public int getTagsCount() { + return internalGetTags().getMap().size(); + } + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsTags(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetTags().getMap().containsKey(key); + } + + /** Use {@link #getTagsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getTags() { + return getTagsMap(); + } + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getTagsMap() { + return internalGetTags().getMap(); + } + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getTagsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetTags().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getTagsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetTags().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, subscription_); + } + com.google.protobuf.GeneratedMessage.serializeStringMapTo( + output, internalGetLabels(), LabelsDefaultEntryHolder.defaultEntry, 3); + com.google.protobuf.GeneratedMessage.serializeStringMapTo( + output, internalGetTags(), TagsDefaultEntryHolder.defaultEntry, 4); + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, subscription_); + } + for (java.util.Map.Entry entry : + internalGetLabels().getMap().entrySet()) { + com.google.protobuf.MapEntry labels__ = + LabelsDefaultEntryHolder.defaultEntry + .newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, labels__); + } + for (java.util.Map.Entry entry : + internalGetTags().getMap().entrySet()) { + com.google.protobuf.MapEntry tags__ = + TagsDefaultEntryHolder.defaultEntry + .newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, tags__); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.CreateSnapshotRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.CreateSnapshotRequest other = + (com.google.pubsub.v1.CreateSnapshotRequest) obj; + + if (!getName().equals(other.getName())) return false; + if (!getSubscription().equals(other.getSubscription())) return false; + if (!internalGetLabels().equals(other.internalGetLabels())) return false; + if (!internalGetTags().equals(other.internalGetTags())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + SUBSCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getSubscription().hashCode(); + if (!internalGetLabels().getMap().isEmpty()) { + hash = (37 * hash) + LABELS_FIELD_NUMBER; + hash = (53 * hash) + internalGetLabels().hashCode(); + } + if (!internalGetTags().getMap().isEmpty()) { + hash = (37 * hash) + TAGS_FIELD_NUMBER; + hash = (53 * hash) + internalGetTags().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.CreateSnapshotRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CreateSnapshotRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CreateSnapshotRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CreateSnapshotRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CreateSnapshotRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.CreateSnapshotRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.CreateSnapshotRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CreateSnapshotRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.CreateSnapshotRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CreateSnapshotRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.CreateSnapshotRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.CreateSnapshotRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.CreateSnapshotRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `CreateSnapshot` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.CreateSnapshotRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.CreateSnapshotRequest) + com.google.pubsub.v1.CreateSnapshotRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CreateSnapshotRequest_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 3: + return internalGetLabels(); + case 4: + return internalGetTags(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 3: + return internalGetMutableLabels(); + case 4: + return internalGetMutableTags(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CreateSnapshotRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.CreateSnapshotRequest.class, + com.google.pubsub.v1.CreateSnapshotRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.CreateSnapshotRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + subscription_ = ""; + internalGetMutableLabels().clear(); + internalGetMutableTags().clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_CreateSnapshotRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.CreateSnapshotRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.CreateSnapshotRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.CreateSnapshotRequest build() { + com.google.pubsub.v1.CreateSnapshotRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.CreateSnapshotRequest buildPartial() { + com.google.pubsub.v1.CreateSnapshotRequest result = + new com.google.pubsub.v1.CreateSnapshotRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.CreateSnapshotRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.subscription_ = subscription_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.labels_ = internalGetLabels(); + result.labels_.makeImmutable(); + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.tags_ = internalGetTags(); + result.tags_.makeImmutable(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.CreateSnapshotRequest) { + return mergeFrom((com.google.pubsub.v1.CreateSnapshotRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.CreateSnapshotRequest other) { + if (other == com.google.pubsub.v1.CreateSnapshotRequest.getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getSubscription().isEmpty()) { + subscription_ = other.subscription_; + bitField0_ |= 0x00000002; + onChanged(); + } + internalGetMutableLabels().mergeFrom(other.internalGetLabels()); + bitField0_ |= 0x00000004; + internalGetMutableTags().mergeFrom(other.internalGetTags()); + bitField0_ |= 0x00000008; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + subscription_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + com.google.protobuf.MapEntry labels__ = + input.readMessage( + LabelsDefaultEntryHolder.defaultEntry.getParserForType(), + extensionRegistry); + internalGetMutableLabels() + .getMutableMap() + .put(labels__.getKey(), labels__.getValue()); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + com.google.protobuf.MapEntry tags__ = + input.readMessage( + TagsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry); + internalGetMutableTags().getMutableMap().put(tags__.getKey(), tags__.getValue()); + bitField0_ |= 0x00000008; + break; + } // case 34 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object name_ = ""; + + /** + * + * + *
+     * Required. User-provided name for this snapshot. If the name is not provided
+     * in the request, the server will assign a random name for this snapshot on
+     * the same project as the subscription. Note that for REST API requests, you
+     * must specify a name.  See the [resource name
+     * rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. User-provided name for this snapshot. If the name is not provided
+     * in the request, the server will assign a random name for this snapshot on
+     * the same project as the subscription. Note that for REST API requests, you
+     * must specify a name.  See the [resource name
+     * rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. User-provided name for this snapshot. If the name is not provided
+     * in the request, the server will assign a random name for this snapshot on
+     * the same project as the subscription. Note that for REST API requests, you
+     * must specify a name.  See the [resource name
+     * rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. User-provided name for this snapshot. If the name is not provided
+     * in the request, the server will assign a random name for this snapshot on
+     * the same project as the subscription. Note that for REST API requests, you
+     * must specify a name.  See the [resource name
+     * rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. User-provided name for this snapshot. If the name is not provided
+     * in the request, the server will assign a random name for this snapshot on
+     * the same project as the subscription. Note that for REST API requests, you
+     * must specify a name.  See the [resource name
+     * rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object subscription_ = ""; + + /** + * + * + *
+     * Required. The subscription whose backlog the snapshot retains.
+     * Specifically, the created snapshot is guaranteed to retain:
+     * (a) The existing backlog on the subscription. More precisely, this is
+     * defined as the messages in the subscription's backlog that are
+     * unacknowledged upon the successful completion of the
+     * `CreateSnapshot` request; as well as:
+     * (b) Any messages published to the subscription's topic following the
+     * successful completion of the CreateSnapshot request.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The subscription whose backlog the snapshot retains.
+     * Specifically, the created snapshot is guaranteed to retain:
+     * (a) The existing backlog on the subscription. More precisely, this is
+     * defined as the messages in the subscription's backlog that are
+     * unacknowledged upon the successful completion of the
+     * `CreateSnapshot` request; as well as:
+     * (b) Any messages published to the subscription's topic following the
+     * successful completion of the CreateSnapshot request.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The subscription whose backlog the snapshot retains.
+     * Specifically, the created snapshot is guaranteed to retain:
+     * (a) The existing backlog on the subscription. More precisely, this is
+     * defined as the messages in the subscription's backlog that are
+     * unacknowledged upon the successful completion of the
+     * `CreateSnapshot` request; as well as:
+     * (b) Any messages published to the subscription's topic following the
+     * successful completion of the CreateSnapshot request.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscription(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + subscription_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription whose backlog the snapshot retains.
+     * Specifically, the created snapshot is guaranteed to retain:
+     * (a) The existing backlog on the subscription. More precisely, this is
+     * defined as the messages in the subscription's backlog that are
+     * unacknowledged upon the successful completion of the
+     * `CreateSnapshot` request; as well as:
+     * (b) Any messages published to the subscription's topic following the
+     * successful completion of the CreateSnapshot request.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSubscription() { + subscription_ = getDefaultInstance().getSubscription(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription whose backlog the snapshot retains.
+     * Specifically, the created snapshot is guaranteed to retain:
+     * (a) The existing backlog on the subscription. More precisely, this is
+     * defined as the messages in the subscription's backlog that are
+     * unacknowledged upon the successful completion of the
+     * `CreateSnapshot` request; as well as:
+     * (b) Any messages published to the subscription's topic following the
+     * successful completion of the CreateSnapshot request.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscriptionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + subscription_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private com.google.protobuf.MapField labels_; + + private com.google.protobuf.MapField internalGetLabels() { + if (labels_ == null) { + return com.google.protobuf.MapField.emptyMapField(LabelsDefaultEntryHolder.defaultEntry); + } + return labels_; + } + + private com.google.protobuf.MapField + internalGetMutableLabels() { + if (labels_ == null) { + labels_ = com.google.protobuf.MapField.newMapField(LabelsDefaultEntryHolder.defaultEntry); + } + if (!labels_.isMutable()) { + labels_ = labels_.copy(); + } + bitField0_ |= 0x00000004; + onChanged(); + return labels_; + } + + public int getLabelsCount() { + return internalGetLabels().getMap().size(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public boolean containsLabels(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetLabels().getMap().containsKey(key); + } + + /** Use {@link #getLabelsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getLabels() { + return getLabelsMap(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.util.Map getLabelsMap() { + return internalGetLabels().getMap(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public /* nullable */ java.lang.String getLabelsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.lang.String getLabelsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearLabels() { + bitField0_ = (bitField0_ & ~0x00000004); + internalGetMutableLabels().getMutableMap().clear(); + return this; + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder removeLabels(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + internalGetMutableLabels().getMutableMap().remove(key); + return this; + } + + /** Use alternate mutation accessors instead. */ + @java.lang.Deprecated + public java.util.Map getMutableLabels() { + bitField0_ |= 0x00000004; + return internalGetMutableLabels().getMutableMap(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder putLabels(java.lang.String key, java.lang.String value) { + if (key == null) { + throw new NullPointerException("map key"); + } + if (value == null) { + throw new NullPointerException("map value"); + } + internalGetMutableLabels().getMutableMap().put(key, value); + bitField0_ |= 0x00000004; + return this; + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder putAllLabels(java.util.Map values) { + internalGetMutableLabels().getMutableMap().putAll(values); + bitField0_ |= 0x00000004; + return this; + } + + private com.google.protobuf.MapField tags_; + + private com.google.protobuf.MapField internalGetTags() { + if (tags_ == null) { + return com.google.protobuf.MapField.emptyMapField(TagsDefaultEntryHolder.defaultEntry); + } + return tags_; + } + + private com.google.protobuf.MapField + internalGetMutableTags() { + if (tags_ == null) { + tags_ = com.google.protobuf.MapField.newMapField(TagsDefaultEntryHolder.defaultEntry); + } + if (!tags_.isMutable()) { + tags_ = tags_.copy(); + } + bitField0_ |= 0x00000008; + onChanged(); + return tags_; + } + + public int getTagsCount() { + return internalGetTags().getMap().size(); + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsTags(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetTags().getMap().containsKey(key); + } + + /** Use {@link #getTagsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getTags() { + return getTagsMap(); + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getTagsMap() { + return internalGetTags().getMap(); + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getTagsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetTags().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getTagsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetTags().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearTags() { + bitField0_ = (bitField0_ & ~0x00000008); + internalGetMutableTags().getMutableMap().clear(); + return this; + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeTags(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + internalGetMutableTags().getMutableMap().remove(key); + return this; + } + + /** Use alternate mutation accessors instead. */ + @java.lang.Deprecated + public java.util.Map getMutableTags() { + bitField0_ |= 0x00000008; + return internalGetMutableTags().getMutableMap(); + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putTags(java.lang.String key, java.lang.String value) { + if (key == null) { + throw new NullPointerException("map key"); + } + if (value == null) { + throw new NullPointerException("map value"); + } + internalGetMutableTags().getMutableMap().put(key, value); + bitField0_ |= 0x00000008; + return this; + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putAllTags(java.util.Map values) { + internalGetMutableTags().getMutableMap().putAll(values); + bitField0_ |= 0x00000008; + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.CreateSnapshotRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.CreateSnapshotRequest) + private static final com.google.pubsub.v1.CreateSnapshotRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.CreateSnapshotRequest(); + } + + public static com.google.pubsub.v1.CreateSnapshotRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public CreateSnapshotRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.CreateSnapshotRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CreateSnapshotRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CreateSnapshotRequestOrBuilder.java new file mode 100644 index 000000000000..2105ed01c27e --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CreateSnapshotRequestOrBuilder.java @@ -0,0 +1,280 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface CreateSnapshotRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.CreateSnapshotRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. User-provided name for this snapshot. If the name is not provided
+   * in the request, the server will assign a random name for this snapshot on
+   * the same project as the subscription. Note that for REST API requests, you
+   * must specify a name.  See the [resource name
+   * rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+   * Format is `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Required. User-provided name for this snapshot. If the name is not provided
+   * in the request, the server will assign a random name for this snapshot on
+   * the same project as the subscription. Note that for REST API requests, you
+   * must specify a name.  See the [resource name
+   * rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+   * Format is `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * + * + *
+   * Required. The subscription whose backlog the snapshot retains.
+   * Specifically, the created snapshot is guaranteed to retain:
+   * (a) The existing backlog on the subscription. More precisely, this is
+   * defined as the messages in the subscription's backlog that are
+   * unacknowledged upon the successful completion of the
+   * `CreateSnapshot` request; as well as:
+   * (b) Any messages published to the subscription's topic following the
+   * successful completion of the CreateSnapshot request.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + java.lang.String getSubscription(); + + /** + * + * + *
+   * Required. The subscription whose backlog the snapshot retains.
+   * Specifically, the created snapshot is guaranteed to retain:
+   * (a) The existing backlog on the subscription. More precisely, this is
+   * defined as the messages in the subscription's backlog that are
+   * unacknowledged upon the successful completion of the
+   * `CreateSnapshot` request; as well as:
+   * (b) Any messages published to the subscription's topic following the
+   * successful completion of the CreateSnapshot request.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + com.google.protobuf.ByteString getSubscriptionBytes(); + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + int getLabelsCount(); + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + boolean containsLabels(java.lang.String key); + + /** Use {@link #getLabelsMap()} instead. */ + @java.lang.Deprecated + java.util.Map getLabels(); + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + java.util.Map getLabelsMap(); + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + /* nullable */ + java.lang.String getLabelsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue); + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 3 [(.google.api.field_behavior) = OPTIONAL]; + */ + java.lang.String getLabelsOrThrow(java.lang.String key); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + int getTagsCount(); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + boolean containsTags(java.lang.String key); + + /** Use {@link #getTagsMap()} instead. */ + @java.lang.Deprecated + java.util.Map getTags(); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.Map getTagsMap(); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + /* nullable */ + java.lang.String getTagsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 4 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + java.lang.String getTagsOrThrow(java.lang.String key); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CryptoKeyName.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CryptoKeyName.java new file mode 100644 index 000000000000..c2b1411cbd9f --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/CryptoKeyName.java @@ -0,0 +1,261 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.pubsub.v1; + +import com.google.api.pathtemplate.PathTemplate; +import com.google.api.resourcenames.ResourceName; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +@Generated("by gapic-generator-java") +public class CryptoKeyName implements ResourceName { + private static final PathTemplate PROJECT_LOCATION_KEY_RING_CRYPTO_KEY = + PathTemplate.createWithoutUrlEncoding( + "projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}"); + private volatile Map fieldValuesMap; + private final String project; + private final String location; + private final String keyRing; + private final String cryptoKey; + + @Deprecated + protected CryptoKeyName() { + project = null; + location = null; + keyRing = null; + cryptoKey = null; + } + + private CryptoKeyName(Builder builder) { + project = Preconditions.checkNotNull(builder.getProject()); + location = Preconditions.checkNotNull(builder.getLocation()); + keyRing = Preconditions.checkNotNull(builder.getKeyRing()); + cryptoKey = Preconditions.checkNotNull(builder.getCryptoKey()); + } + + public String getProject() { + return project; + } + + public String getLocation() { + return location; + } + + public String getKeyRing() { + return keyRing; + } + + public String getCryptoKey() { + return cryptoKey; + } + + public static Builder newBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + public static CryptoKeyName of( + String project, String location, String keyRing, String cryptoKey) { + return newBuilder() + .setProject(project) + .setLocation(location) + .setKeyRing(keyRing) + .setCryptoKey(cryptoKey) + .build(); + } + + public static String format(String project, String location, String keyRing, String cryptoKey) { + return newBuilder() + .setProject(project) + .setLocation(location) + .setKeyRing(keyRing) + .setCryptoKey(cryptoKey) + .build() + .toString(); + } + + public static CryptoKeyName parse(String formattedString) { + if (formattedString.isEmpty()) { + return null; + } + Map matchMap = + PROJECT_LOCATION_KEY_RING_CRYPTO_KEY.validatedMatch( + formattedString, "CryptoKeyName.parse: formattedString not in valid format"); + return of( + matchMap.get("project"), + matchMap.get("location"), + matchMap.get("key_ring"), + matchMap.get("crypto_key")); + } + + public static List parseList(List formattedStrings) { + List list = new ArrayList<>(formattedStrings.size()); + for (String formattedString : formattedStrings) { + list.add(parse(formattedString)); + } + return list; + } + + public static List toStringList(List values) { + List list = new ArrayList<>(values.size()); + for (CryptoKeyName value : values) { + if (value == null) { + list.add(""); + } else { + list.add(value.toString()); + } + } + return list; + } + + public static boolean isParsableFrom(String formattedString) { + return PROJECT_LOCATION_KEY_RING_CRYPTO_KEY.matches(formattedString); + } + + @Override + public Map getFieldValuesMap() { + if (fieldValuesMap == null) { + synchronized (this) { + if (fieldValuesMap == null) { + ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder(); + if (project != null) { + fieldMapBuilder.put("project", project); + } + if (location != null) { + fieldMapBuilder.put("location", location); + } + if (keyRing != null) { + fieldMapBuilder.put("key_ring", keyRing); + } + if (cryptoKey != null) { + fieldMapBuilder.put("crypto_key", cryptoKey); + } + fieldValuesMap = fieldMapBuilder.build(); + } + } + } + return fieldValuesMap; + } + + public String getFieldValue(String fieldName) { + return getFieldValuesMap().get(fieldName); + } + + @Override + public String toString() { + return PROJECT_LOCATION_KEY_RING_CRYPTO_KEY.instantiate( + "project", project, "location", location, "key_ring", keyRing, "crypto_key", cryptoKey); + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o != null && getClass() == o.getClass()) { + CryptoKeyName that = ((CryptoKeyName) o); + return Objects.equals(this.project, that.project) + && Objects.equals(this.location, that.location) + && Objects.equals(this.keyRing, that.keyRing) + && Objects.equals(this.cryptoKey, that.cryptoKey); + } + return false; + } + + @Override + public int hashCode() { + int h = 1; + h *= 1000003; + h ^= Objects.hashCode(project); + h *= 1000003; + h ^= Objects.hashCode(location); + h *= 1000003; + h ^= Objects.hashCode(keyRing); + h *= 1000003; + h ^= Objects.hashCode(cryptoKey); + return h; + } + + /** + * Builder for + * projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}. + */ + public static class Builder { + private String project; + private String location; + private String keyRing; + private String cryptoKey; + + protected Builder() {} + + public String getProject() { + return project; + } + + public String getLocation() { + return location; + } + + public String getKeyRing() { + return keyRing; + } + + public String getCryptoKey() { + return cryptoKey; + } + + public Builder setProject(String project) { + this.project = project; + return this; + } + + public Builder setLocation(String location) { + this.location = location; + return this; + } + + public Builder setKeyRing(String keyRing) { + this.keyRing = keyRing; + return this; + } + + public Builder setCryptoKey(String cryptoKey) { + this.cryptoKey = cryptoKey; + return this; + } + + private Builder(CryptoKeyName cryptoKeyName) { + this.project = cryptoKeyName.project; + this.location = cryptoKeyName.location; + this.keyRing = cryptoKeyName.keyRing; + this.cryptoKey = cryptoKeyName.cryptoKey; + } + + public CryptoKeyName build() { + return new CryptoKeyName(this); + } + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeadLetterPolicy.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeadLetterPolicy.java new file mode 100644 index 000000000000..f6ba7bb82c4d --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeadLetterPolicy.java @@ -0,0 +1,816 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Dead lettering is done on a best effort basis. The same message might be
+ * dead lettered multiple times.
+ *
+ * If validation on any of the fields fails at subscription creation/updation,
+ * the create/update subscription request will fail.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.DeadLetterPolicy} + */ +@com.google.protobuf.Generated +public final class DeadLetterPolicy extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.DeadLetterPolicy) + DeadLetterPolicyOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeadLetterPolicy"); + } + + // Use DeadLetterPolicy.newBuilder() to construct. + private DeadLetterPolicy(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private DeadLetterPolicy() { + deadLetterTopic_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeadLetterPolicy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeadLetterPolicy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DeadLetterPolicy.class, + com.google.pubsub.v1.DeadLetterPolicy.Builder.class); + } + + public static final int DEAD_LETTER_TOPIC_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object deadLetterTopic_ = ""; + + /** + * + * + *
+   * Optional. The name of the topic to which dead letter messages should be
+   * published. Format is `projects/{project}/topics/{topic}`.The Pub/Sub
+   * service account associated with the enclosing subscription's parent project
+   * (i.e., service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must
+   * have permission to Publish() to this topic.
+   *
+   * The operation will fail if the topic does not exist.
+   * Users should ensure that there is a subscription attached to this topic
+   * since messages published to a topic with no subscriptions are lost.
+   * 
+ * + * + * string dead_letter_topic = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The deadLetterTopic. + */ + @java.lang.Override + public java.lang.String getDeadLetterTopic() { + java.lang.Object ref = deadLetterTopic_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + deadLetterTopic_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The name of the topic to which dead letter messages should be
+   * published. Format is `projects/{project}/topics/{topic}`.The Pub/Sub
+   * service account associated with the enclosing subscription's parent project
+   * (i.e., service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must
+   * have permission to Publish() to this topic.
+   *
+   * The operation will fail if the topic does not exist.
+   * Users should ensure that there is a subscription attached to this topic
+   * since messages published to a topic with no subscriptions are lost.
+   * 
+ * + * + * string dead_letter_topic = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for deadLetterTopic. + */ + @java.lang.Override + public com.google.protobuf.ByteString getDeadLetterTopicBytes() { + java.lang.Object ref = deadLetterTopic_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + deadLetterTopic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int MAX_DELIVERY_ATTEMPTS_FIELD_NUMBER = 2; + private int maxDeliveryAttempts_ = 0; + + /** + * + * + *
+   * Optional. The maximum number of delivery attempts for any message. The
+   * value must be between 5 and 100.
+   *
+   * The number of delivery attempts is defined as 1 + (the sum of number of
+   * NACKs and number of times the acknowledgment deadline has been exceeded
+   * for the message).
+   *
+   * A NACK is any call to ModifyAckDeadline with a 0 deadline. Note that
+   * client libraries may automatically extend ack_deadlines.
+   *
+   * This field will be honored on a best effort basis.
+   *
+   * If this parameter is 0, a default value of 5 is used.
+   * 
+ * + * int32 max_delivery_attempts = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxDeliveryAttempts. + */ + @java.lang.Override + public int getMaxDeliveryAttempts() { + return maxDeliveryAttempts_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(deadLetterTopic_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, deadLetterTopic_); + } + if (maxDeliveryAttempts_ != 0) { + output.writeInt32(2, maxDeliveryAttempts_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(deadLetterTopic_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, deadLetterTopic_); + } + if (maxDeliveryAttempts_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, maxDeliveryAttempts_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.DeadLetterPolicy)) { + return super.equals(obj); + } + com.google.pubsub.v1.DeadLetterPolicy other = (com.google.pubsub.v1.DeadLetterPolicy) obj; + + if (!getDeadLetterTopic().equals(other.getDeadLetterTopic())) return false; + if (getMaxDeliveryAttempts() != other.getMaxDeliveryAttempts()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + DEAD_LETTER_TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getDeadLetterTopic().hashCode(); + hash = (37 * hash) + MAX_DELIVERY_ATTEMPTS_FIELD_NUMBER; + hash = (53 * hash) + getMaxDeliveryAttempts(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.DeadLetterPolicy parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeadLetterPolicy parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeadLetterPolicy parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeadLetterPolicy parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeadLetterPolicy parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeadLetterPolicy parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeadLetterPolicy parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeadLetterPolicy parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DeadLetterPolicy parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeadLetterPolicy parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DeadLetterPolicy parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeadLetterPolicy parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.DeadLetterPolicy prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Dead lettering is done on a best effort basis. The same message might be
+   * dead lettered multiple times.
+   *
+   * If validation on any of the fields fails at subscription creation/updation,
+   * the create/update subscription request will fail.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.DeadLetterPolicy} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.DeadLetterPolicy) + com.google.pubsub.v1.DeadLetterPolicyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeadLetterPolicy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeadLetterPolicy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DeadLetterPolicy.class, + com.google.pubsub.v1.DeadLetterPolicy.Builder.class); + } + + // Construct using com.google.pubsub.v1.DeadLetterPolicy.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + deadLetterTopic_ = ""; + maxDeliveryAttempts_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeadLetterPolicy_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.DeadLetterPolicy getDefaultInstanceForType() { + return com.google.pubsub.v1.DeadLetterPolicy.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.DeadLetterPolicy build() { + com.google.pubsub.v1.DeadLetterPolicy result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.DeadLetterPolicy buildPartial() { + com.google.pubsub.v1.DeadLetterPolicy result = + new com.google.pubsub.v1.DeadLetterPolicy(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.DeadLetterPolicy result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.deadLetterTopic_ = deadLetterTopic_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.maxDeliveryAttempts_ = maxDeliveryAttempts_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.DeadLetterPolicy) { + return mergeFrom((com.google.pubsub.v1.DeadLetterPolicy) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.DeadLetterPolicy other) { + if (other == com.google.pubsub.v1.DeadLetterPolicy.getDefaultInstance()) return this; + if (!other.getDeadLetterTopic().isEmpty()) { + deadLetterTopic_ = other.deadLetterTopic_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.getMaxDeliveryAttempts() != 0) { + setMaxDeliveryAttempts(other.getMaxDeliveryAttempts()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + deadLetterTopic_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + maxDeliveryAttempts_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object deadLetterTopic_ = ""; + + /** + * + * + *
+     * Optional. The name of the topic to which dead letter messages should be
+     * published. Format is `projects/{project}/topics/{topic}`.The Pub/Sub
+     * service account associated with the enclosing subscription's parent project
+     * (i.e., service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must
+     * have permission to Publish() to this topic.
+     *
+     * The operation will fail if the topic does not exist.
+     * Users should ensure that there is a subscription attached to this topic
+     * since messages published to a topic with no subscriptions are lost.
+     * 
+ * + * + * string dead_letter_topic = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The deadLetterTopic. + */ + public java.lang.String getDeadLetterTopic() { + java.lang.Object ref = deadLetterTopic_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + deadLetterTopic_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The name of the topic to which dead letter messages should be
+     * published. Format is `projects/{project}/topics/{topic}`.The Pub/Sub
+     * service account associated with the enclosing subscription's parent project
+     * (i.e., service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must
+     * have permission to Publish() to this topic.
+     *
+     * The operation will fail if the topic does not exist.
+     * Users should ensure that there is a subscription attached to this topic
+     * since messages published to a topic with no subscriptions are lost.
+     * 
+ * + * + * string dead_letter_topic = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for deadLetterTopic. + */ + public com.google.protobuf.ByteString getDeadLetterTopicBytes() { + java.lang.Object ref = deadLetterTopic_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + deadLetterTopic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The name of the topic to which dead letter messages should be
+     * published. Format is `projects/{project}/topics/{topic}`.The Pub/Sub
+     * service account associated with the enclosing subscription's parent project
+     * (i.e., service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must
+     * have permission to Publish() to this topic.
+     *
+     * The operation will fail if the topic does not exist.
+     * Users should ensure that there is a subscription attached to this topic
+     * since messages published to a topic with no subscriptions are lost.
+     * 
+ * + * + * string dead_letter_topic = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The deadLetterTopic to set. + * @return This builder for chaining. + */ + public Builder setDeadLetterTopic(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + deadLetterTopic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The name of the topic to which dead letter messages should be
+     * published. Format is `projects/{project}/topics/{topic}`.The Pub/Sub
+     * service account associated with the enclosing subscription's parent project
+     * (i.e., service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must
+     * have permission to Publish() to this topic.
+     *
+     * The operation will fail if the topic does not exist.
+     * Users should ensure that there is a subscription attached to this topic
+     * since messages published to a topic with no subscriptions are lost.
+     * 
+ * + * + * string dead_letter_topic = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearDeadLetterTopic() { + deadLetterTopic_ = getDefaultInstance().getDeadLetterTopic(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The name of the topic to which dead letter messages should be
+     * published. Format is `projects/{project}/topics/{topic}`.The Pub/Sub
+     * service account associated with the enclosing subscription's parent project
+     * (i.e., service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must
+     * have permission to Publish() to this topic.
+     *
+     * The operation will fail if the topic does not exist.
+     * Users should ensure that there is a subscription attached to this topic
+     * since messages published to a topic with no subscriptions are lost.
+     * 
+ * + * + * string dead_letter_topic = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for deadLetterTopic to set. + * @return This builder for chaining. + */ + public Builder setDeadLetterTopicBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + deadLetterTopic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private int maxDeliveryAttempts_; + + /** + * + * + *
+     * Optional. The maximum number of delivery attempts for any message. The
+     * value must be between 5 and 100.
+     *
+     * The number of delivery attempts is defined as 1 + (the sum of number of
+     * NACKs and number of times the acknowledgment deadline has been exceeded
+     * for the message).
+     *
+     * A NACK is any call to ModifyAckDeadline with a 0 deadline. Note that
+     * client libraries may automatically extend ack_deadlines.
+     *
+     * This field will be honored on a best effort basis.
+     *
+     * If this parameter is 0, a default value of 5 is used.
+     * 
+ * + * int32 max_delivery_attempts = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxDeliveryAttempts. + */ + @java.lang.Override + public int getMaxDeliveryAttempts() { + return maxDeliveryAttempts_; + } + + /** + * + * + *
+     * Optional. The maximum number of delivery attempts for any message. The
+     * value must be between 5 and 100.
+     *
+     * The number of delivery attempts is defined as 1 + (the sum of number of
+     * NACKs and number of times the acknowledgment deadline has been exceeded
+     * for the message).
+     *
+     * A NACK is any call to ModifyAckDeadline with a 0 deadline. Note that
+     * client libraries may automatically extend ack_deadlines.
+     *
+     * This field will be honored on a best effort basis.
+     *
+     * If this parameter is 0, a default value of 5 is used.
+     * 
+ * + * int32 max_delivery_attempts = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The maxDeliveryAttempts to set. + * @return This builder for chaining. + */ + public Builder setMaxDeliveryAttempts(int value) { + + maxDeliveryAttempts_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The maximum number of delivery attempts for any message. The
+     * value must be between 5 and 100.
+     *
+     * The number of delivery attempts is defined as 1 + (the sum of number of
+     * NACKs and number of times the acknowledgment deadline has been exceeded
+     * for the message).
+     *
+     * A NACK is any call to ModifyAckDeadline with a 0 deadline. Note that
+     * client libraries may automatically extend ack_deadlines.
+     *
+     * This field will be honored on a best effort basis.
+     *
+     * If this parameter is 0, a default value of 5 is used.
+     * 
+ * + * int32 max_delivery_attempts = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearMaxDeliveryAttempts() { + bitField0_ = (bitField0_ & ~0x00000002); + maxDeliveryAttempts_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.DeadLetterPolicy) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.DeadLetterPolicy) + private static final com.google.pubsub.v1.DeadLetterPolicy DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.DeadLetterPolicy(); + } + + public static com.google.pubsub.v1.DeadLetterPolicy getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DeadLetterPolicy parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.DeadLetterPolicy getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeadLetterPolicyOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeadLetterPolicyOrBuilder.java new file mode 100644 index 000000000000..9d8c2922373f --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeadLetterPolicyOrBuilder.java @@ -0,0 +1,99 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface DeadLetterPolicyOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.DeadLetterPolicy) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The name of the topic to which dead letter messages should be
+   * published. Format is `projects/{project}/topics/{topic}`.The Pub/Sub
+   * service account associated with the enclosing subscription's parent project
+   * (i.e., service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must
+   * have permission to Publish() to this topic.
+   *
+   * The operation will fail if the topic does not exist.
+   * Users should ensure that there is a subscription attached to this topic
+   * since messages published to a topic with no subscriptions are lost.
+   * 
+ * + * + * string dead_letter_topic = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The deadLetterTopic. + */ + java.lang.String getDeadLetterTopic(); + + /** + * + * + *
+   * Optional. The name of the topic to which dead letter messages should be
+   * published. Format is `projects/{project}/topics/{topic}`.The Pub/Sub
+   * service account associated with the enclosing subscription's parent project
+   * (i.e., service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must
+   * have permission to Publish() to this topic.
+   *
+   * The operation will fail if the topic does not exist.
+   * Users should ensure that there is a subscription attached to this topic
+   * since messages published to a topic with no subscriptions are lost.
+   * 
+ * + * + * string dead_letter_topic = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for deadLetterTopic. + */ + com.google.protobuf.ByteString getDeadLetterTopicBytes(); + + /** + * + * + *
+   * Optional. The maximum number of delivery attempts for any message. The
+   * value must be between 5 and 100.
+   *
+   * The number of delivery attempts is defined as 1 + (the sum of number of
+   * NACKs and number of times the acknowledgment deadline has been exceeded
+   * for the message).
+   *
+   * A NACK is any call to ModifyAckDeadline with a 0 deadline. Note that
+   * client libraries may automatically extend ack_deadlines.
+   *
+   * This field will be honored on a best effort basis.
+   *
+   * If this parameter is 0, a default value of 5 is used.
+   * 
+ * + * int32 max_delivery_attempts = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxDeliveryAttempts. + */ + int getMaxDeliveryAttempts(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSchemaRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSchemaRequest.java new file mode 100644 index 000000000000..12f52ffd1b96 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSchemaRequest.java @@ -0,0 +1,615 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `DeleteSchema` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.DeleteSchemaRequest} + */ +@com.google.protobuf.Generated +public final class DeleteSchemaRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.DeleteSchemaRequest) + DeleteSchemaRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteSchemaRequest"); + } + + // Use DeleteSchemaRequest.newBuilder() to construct. + private DeleteSchemaRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private DeleteSchemaRequest() { + name_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_DeleteSchemaRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_DeleteSchemaRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DeleteSchemaRequest.class, + com.google.pubsub.v1.DeleteSchemaRequest.Builder.class); + } + + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
+   * Required. Name of the schema to delete.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. Name of the schema to delete.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.DeleteSchemaRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.DeleteSchemaRequest other = (com.google.pubsub.v1.DeleteSchemaRequest) obj; + + if (!getName().equals(other.getName())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.DeleteSchemaRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteSchemaRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSchemaRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteSchemaRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSchemaRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteSchemaRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSchemaRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteSchemaRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSchemaRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteSchemaRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSchemaRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteSchemaRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.DeleteSchemaRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `DeleteSchema` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.DeleteSchemaRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.DeleteSchemaRequest) + com.google.pubsub.v1.DeleteSchemaRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_DeleteSchemaRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_DeleteSchemaRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DeleteSchemaRequest.class, + com.google.pubsub.v1.DeleteSchemaRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.DeleteSchemaRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_DeleteSchemaRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSchemaRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.DeleteSchemaRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSchemaRequest build() { + com.google.pubsub.v1.DeleteSchemaRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSchemaRequest buildPartial() { + com.google.pubsub.v1.DeleteSchemaRequest result = + new com.google.pubsub.v1.DeleteSchemaRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.DeleteSchemaRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.DeleteSchemaRequest) { + return mergeFrom((com.google.pubsub.v1.DeleteSchemaRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.DeleteSchemaRequest other) { + if (other == com.google.pubsub.v1.DeleteSchemaRequest.getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object name_ = ""; + + /** + * + * + *
+     * Required. Name of the schema to delete.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. Name of the schema to delete.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. Name of the schema to delete.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Name of the schema to delete.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Name of the schema to delete.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.DeleteSchemaRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.DeleteSchemaRequest) + private static final com.google.pubsub.v1.DeleteSchemaRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.DeleteSchemaRequest(); + } + + public static com.google.pubsub.v1.DeleteSchemaRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DeleteSchemaRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSchemaRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSchemaRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSchemaRequestOrBuilder.java new file mode 100644 index 000000000000..0d665ae9d442 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSchemaRequestOrBuilder.java @@ -0,0 +1,60 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface DeleteSchemaRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.DeleteSchemaRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. Name of the schema to delete.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Required. Name of the schema to delete.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSchemaRevisionRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSchemaRevisionRequest.java new file mode 100644 index 000000000000..5065b30b9355 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSchemaRevisionRequest.java @@ -0,0 +1,862 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `DeleteSchemaRevision` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.DeleteSchemaRevisionRequest} + */ +@com.google.protobuf.Generated +public final class DeleteSchemaRevisionRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.DeleteSchemaRevisionRequest) + DeleteSchemaRevisionRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteSchemaRevisionRequest"); + } + + // Use DeleteSchemaRevisionRequest.newBuilder() to construct. + private DeleteSchemaRevisionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private DeleteSchemaRevisionRequest() { + name_ = ""; + revisionId_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_DeleteSchemaRevisionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_DeleteSchemaRevisionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DeleteSchemaRevisionRequest.class, + com.google.pubsub.v1.DeleteSchemaRevisionRequest.Builder.class); + } + + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
+   * Required. The name of the schema revision to be deleted, with a revision ID
+   * explicitly included.
+   *
+   * Example: `projects/123/schemas/my-schema@c7cfa2a8`
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the schema revision to be deleted, with a revision ID
+   * explicitly included.
+   *
+   * Example: `projects/123/schemas/my-schema@c7cfa2a8`
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int REVISION_ID_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object revisionId_ = ""; + + /** + * + * + *
+   * Optional. This field is deprecated and should not be used for specifying
+   * the revision ID. The revision ID should be specified via the `name`
+   * parameter.
+   * 
+ * + * string revision_id = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.DeleteSchemaRevisionRequest.revision_id is deprecated. See + * google/pubsub/v1/schema.proto;l=330 + * @return The revisionId. + */ + @java.lang.Override + @java.lang.Deprecated + public java.lang.String getRevisionId() { + java.lang.Object ref = revisionId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + revisionId_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. This field is deprecated and should not be used for specifying
+   * the revision ID. The revision ID should be specified via the `name`
+   * parameter.
+   * 
+ * + * string revision_id = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.DeleteSchemaRevisionRequest.revision_id is deprecated. See + * google/pubsub/v1/schema.proto;l=330 + * @return The bytes for revisionId. + */ + @java.lang.Override + @java.lang.Deprecated + public com.google.protobuf.ByteString getRevisionIdBytes() { + java.lang.Object ref = revisionId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + revisionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(revisionId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, revisionId_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(revisionId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, revisionId_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.DeleteSchemaRevisionRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.DeleteSchemaRevisionRequest other = + (com.google.pubsub.v1.DeleteSchemaRevisionRequest) obj; + + if (!getName().equals(other.getName())) return false; + if (!getRevisionId().equals(other.getRevisionId())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + REVISION_ID_FIELD_NUMBER; + hash = (53 * hash) + getRevisionId().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.DeleteSchemaRevisionRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteSchemaRevisionRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSchemaRevisionRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteSchemaRevisionRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSchemaRevisionRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteSchemaRevisionRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSchemaRevisionRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteSchemaRevisionRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSchemaRevisionRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteSchemaRevisionRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSchemaRevisionRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteSchemaRevisionRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.DeleteSchemaRevisionRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `DeleteSchemaRevision` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.DeleteSchemaRevisionRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.DeleteSchemaRevisionRequest) + com.google.pubsub.v1.DeleteSchemaRevisionRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_DeleteSchemaRevisionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_DeleteSchemaRevisionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DeleteSchemaRevisionRequest.class, + com.google.pubsub.v1.DeleteSchemaRevisionRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.DeleteSchemaRevisionRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + revisionId_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_DeleteSchemaRevisionRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSchemaRevisionRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.DeleteSchemaRevisionRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSchemaRevisionRequest build() { + com.google.pubsub.v1.DeleteSchemaRevisionRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSchemaRevisionRequest buildPartial() { + com.google.pubsub.v1.DeleteSchemaRevisionRequest result = + new com.google.pubsub.v1.DeleteSchemaRevisionRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.DeleteSchemaRevisionRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.revisionId_ = revisionId_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.DeleteSchemaRevisionRequest) { + return mergeFrom((com.google.pubsub.v1.DeleteSchemaRevisionRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.DeleteSchemaRevisionRequest other) { + if (other == com.google.pubsub.v1.DeleteSchemaRevisionRequest.getDefaultInstance()) + return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getRevisionId().isEmpty()) { + revisionId_ = other.revisionId_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + revisionId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object name_ = ""; + + /** + * + * + *
+     * Required. The name of the schema revision to be deleted, with a revision ID
+     * explicitly included.
+     *
+     * Example: `projects/123/schemas/my-schema@c7cfa2a8`
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the schema revision to be deleted, with a revision ID
+     * explicitly included.
+     *
+     * Example: `projects/123/schemas/my-schema@c7cfa2a8`
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the schema revision to be deleted, with a revision ID
+     * explicitly included.
+     *
+     * Example: `projects/123/schemas/my-schema@c7cfa2a8`
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the schema revision to be deleted, with a revision ID
+     * explicitly included.
+     *
+     * Example: `projects/123/schemas/my-schema@c7cfa2a8`
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the schema revision to be deleted, with a revision ID
+     * explicitly included.
+     *
+     * Example: `projects/123/schemas/my-schema@c7cfa2a8`
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object revisionId_ = ""; + + /** + * + * + *
+     * Optional. This field is deprecated and should not be used for specifying
+     * the revision ID. The revision ID should be specified via the `name`
+     * parameter.
+     * 
+ * + * string revision_id = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.DeleteSchemaRevisionRequest.revision_id is deprecated. See + * google/pubsub/v1/schema.proto;l=330 + * @return The revisionId. + */ + @java.lang.Deprecated + public java.lang.String getRevisionId() { + java.lang.Object ref = revisionId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + revisionId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. This field is deprecated and should not be used for specifying
+     * the revision ID. The revision ID should be specified via the `name`
+     * parameter.
+     * 
+ * + * string revision_id = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.DeleteSchemaRevisionRequest.revision_id is deprecated. See + * google/pubsub/v1/schema.proto;l=330 + * @return The bytes for revisionId. + */ + @java.lang.Deprecated + public com.google.protobuf.ByteString getRevisionIdBytes() { + java.lang.Object ref = revisionId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + revisionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. This field is deprecated and should not be used for specifying
+     * the revision ID. The revision ID should be specified via the `name`
+     * parameter.
+     * 
+ * + * string revision_id = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.DeleteSchemaRevisionRequest.revision_id is deprecated. See + * google/pubsub/v1/schema.proto;l=330 + * @param value The revisionId to set. + * @return This builder for chaining. + */ + @java.lang.Deprecated + public Builder setRevisionId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + revisionId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. This field is deprecated and should not be used for specifying
+     * the revision ID. The revision ID should be specified via the `name`
+     * parameter.
+     * 
+ * + * string revision_id = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.DeleteSchemaRevisionRequest.revision_id is deprecated. See + * google/pubsub/v1/schema.proto;l=330 + * @return This builder for chaining. + */ + @java.lang.Deprecated + public Builder clearRevisionId() { + revisionId_ = getDefaultInstance().getRevisionId(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. This field is deprecated and should not be used for specifying
+     * the revision ID. The revision ID should be specified via the `name`
+     * parameter.
+     * 
+ * + * string revision_id = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.DeleteSchemaRevisionRequest.revision_id is deprecated. See + * google/pubsub/v1/schema.proto;l=330 + * @param value The bytes for revisionId to set. + * @return This builder for chaining. + */ + @java.lang.Deprecated + public Builder setRevisionIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + revisionId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.DeleteSchemaRevisionRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.DeleteSchemaRevisionRequest) + private static final com.google.pubsub.v1.DeleteSchemaRevisionRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.DeleteSchemaRevisionRequest(); + } + + public static com.google.pubsub.v1.DeleteSchemaRevisionRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DeleteSchemaRevisionRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSchemaRevisionRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSchemaRevisionRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSchemaRevisionRequestOrBuilder.java new file mode 100644 index 000000000000..a116ea05eb69 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSchemaRevisionRequestOrBuilder.java @@ -0,0 +1,102 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface DeleteSchemaRevisionRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.DeleteSchemaRevisionRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the schema revision to be deleted, with a revision ID
+   * explicitly included.
+   *
+   * Example: `projects/123/schemas/my-schema@c7cfa2a8`
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Required. The name of the schema revision to be deleted, with a revision ID
+   * explicitly included.
+   *
+   * Example: `projects/123/schemas/my-schema@c7cfa2a8`
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * + * + *
+   * Optional. This field is deprecated and should not be used for specifying
+   * the revision ID. The revision ID should be specified via the `name`
+   * parameter.
+   * 
+ * + * string revision_id = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.DeleteSchemaRevisionRequest.revision_id is deprecated. See + * google/pubsub/v1/schema.proto;l=330 + * @return The revisionId. + */ + @java.lang.Deprecated + java.lang.String getRevisionId(); + + /** + * + * + *
+   * Optional. This field is deprecated and should not be used for specifying
+   * the revision ID. The revision ID should be specified via the `name`
+   * parameter.
+   * 
+ * + * string revision_id = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.DeleteSchemaRevisionRequest.revision_id is deprecated. See + * google/pubsub/v1/schema.proto;l=330 + * @return The bytes for revisionId. + */ + @java.lang.Deprecated + com.google.protobuf.ByteString getRevisionIdBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSnapshotRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSnapshotRequest.java new file mode 100644 index 000000000000..4fd1295402e7 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSnapshotRequest.java @@ -0,0 +1,616 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `DeleteSnapshot` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.DeleteSnapshotRequest} + */ +@com.google.protobuf.Generated +public final class DeleteSnapshotRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.DeleteSnapshotRequest) + DeleteSnapshotRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteSnapshotRequest"); + } + + // Use DeleteSnapshotRequest.newBuilder() to construct. + private DeleteSnapshotRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private DeleteSnapshotRequest() { + snapshot_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteSnapshotRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteSnapshotRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DeleteSnapshotRequest.class, + com.google.pubsub.v1.DeleteSnapshotRequest.Builder.class); + } + + public static final int SNAPSHOT_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object snapshot_ = ""; + + /** + * + * + *
+   * Required. The name of the snapshot to delete.
+   * Format is `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The snapshot. + */ + @java.lang.Override + public java.lang.String getSnapshot() { + java.lang.Object ref = snapshot_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + snapshot_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the snapshot to delete.
+   * Format is `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for snapshot. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSnapshotBytes() { + java.lang.Object ref = snapshot_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + snapshot_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(snapshot_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, snapshot_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(snapshot_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, snapshot_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.DeleteSnapshotRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.DeleteSnapshotRequest other = + (com.google.pubsub.v1.DeleteSnapshotRequest) obj; + + if (!getSnapshot().equals(other.getSnapshot())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SNAPSHOT_FIELD_NUMBER; + hash = (53 * hash) + getSnapshot().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.DeleteSnapshotRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteSnapshotRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSnapshotRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteSnapshotRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSnapshotRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteSnapshotRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSnapshotRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteSnapshotRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSnapshotRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteSnapshotRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSnapshotRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteSnapshotRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.DeleteSnapshotRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `DeleteSnapshot` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.DeleteSnapshotRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.DeleteSnapshotRequest) + com.google.pubsub.v1.DeleteSnapshotRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteSnapshotRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteSnapshotRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DeleteSnapshotRequest.class, + com.google.pubsub.v1.DeleteSnapshotRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.DeleteSnapshotRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + snapshot_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteSnapshotRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSnapshotRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.DeleteSnapshotRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSnapshotRequest build() { + com.google.pubsub.v1.DeleteSnapshotRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSnapshotRequest buildPartial() { + com.google.pubsub.v1.DeleteSnapshotRequest result = + new com.google.pubsub.v1.DeleteSnapshotRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.DeleteSnapshotRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.snapshot_ = snapshot_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.DeleteSnapshotRequest) { + return mergeFrom((com.google.pubsub.v1.DeleteSnapshotRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.DeleteSnapshotRequest other) { + if (other == com.google.pubsub.v1.DeleteSnapshotRequest.getDefaultInstance()) return this; + if (!other.getSnapshot().isEmpty()) { + snapshot_ = other.snapshot_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + snapshot_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object snapshot_ = ""; + + /** + * + * + *
+     * Required. The name of the snapshot to delete.
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The snapshot. + */ + public java.lang.String getSnapshot() { + java.lang.Object ref = snapshot_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + snapshot_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the snapshot to delete.
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for snapshot. + */ + public com.google.protobuf.ByteString getSnapshotBytes() { + java.lang.Object ref = snapshot_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + snapshot_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the snapshot to delete.
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The snapshot to set. + * @return This builder for chaining. + */ + public Builder setSnapshot(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + snapshot_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the snapshot to delete.
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSnapshot() { + snapshot_ = getDefaultInstance().getSnapshot(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the snapshot to delete.
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for snapshot to set. + * @return This builder for chaining. + */ + public Builder setSnapshotBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + snapshot_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.DeleteSnapshotRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.DeleteSnapshotRequest) + private static final com.google.pubsub.v1.DeleteSnapshotRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.DeleteSnapshotRequest(); + } + + public static com.google.pubsub.v1.DeleteSnapshotRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DeleteSnapshotRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSnapshotRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSnapshotRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSnapshotRequestOrBuilder.java new file mode 100644 index 000000000000..aa0db9d68a98 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSnapshotRequestOrBuilder.java @@ -0,0 +1,60 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface DeleteSnapshotRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.DeleteSnapshotRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the snapshot to delete.
+   * Format is `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The snapshot. + */ + java.lang.String getSnapshot(); + + /** + * + * + *
+   * Required. The name of the snapshot to delete.
+   * Format is `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for snapshot. + */ + com.google.protobuf.ByteString getSnapshotBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSubscriptionRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSubscriptionRequest.java new file mode 100644 index 000000000000..0b55f9447d22 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSubscriptionRequest.java @@ -0,0 +1,616 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the DeleteSubscription method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.DeleteSubscriptionRequest} + */ +@com.google.protobuf.Generated +public final class DeleteSubscriptionRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.DeleteSubscriptionRequest) + DeleteSubscriptionRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteSubscriptionRequest"); + } + + // Use DeleteSubscriptionRequest.newBuilder() to construct. + private DeleteSubscriptionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private DeleteSubscriptionRequest() { + subscription_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteSubscriptionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteSubscriptionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DeleteSubscriptionRequest.class, + com.google.pubsub.v1.DeleteSubscriptionRequest.Builder.class); + } + + public static final int SUBSCRIPTION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object subscription_ = ""; + + /** + * + * + *
+   * Required. The subscription to delete.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + @java.lang.Override + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The subscription to delete.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, subscription_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, subscription_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.DeleteSubscriptionRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.DeleteSubscriptionRequest other = + (com.google.pubsub.v1.DeleteSubscriptionRequest) obj; + + if (!getSubscription().equals(other.getSubscription())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SUBSCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getSubscription().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.DeleteSubscriptionRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteSubscriptionRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSubscriptionRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteSubscriptionRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSubscriptionRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteSubscriptionRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSubscriptionRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteSubscriptionRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSubscriptionRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteSubscriptionRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteSubscriptionRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteSubscriptionRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.DeleteSubscriptionRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the DeleteSubscription method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.DeleteSubscriptionRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.DeleteSubscriptionRequest) + com.google.pubsub.v1.DeleteSubscriptionRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteSubscriptionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteSubscriptionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DeleteSubscriptionRequest.class, + com.google.pubsub.v1.DeleteSubscriptionRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.DeleteSubscriptionRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + subscription_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteSubscriptionRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSubscriptionRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.DeleteSubscriptionRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSubscriptionRequest build() { + com.google.pubsub.v1.DeleteSubscriptionRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSubscriptionRequest buildPartial() { + com.google.pubsub.v1.DeleteSubscriptionRequest result = + new com.google.pubsub.v1.DeleteSubscriptionRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.DeleteSubscriptionRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.subscription_ = subscription_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.DeleteSubscriptionRequest) { + return mergeFrom((com.google.pubsub.v1.DeleteSubscriptionRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.DeleteSubscriptionRequest other) { + if (other == com.google.pubsub.v1.DeleteSubscriptionRequest.getDefaultInstance()) return this; + if (!other.getSubscription().isEmpty()) { + subscription_ = other.subscription_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + subscription_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object subscription_ = ""; + + /** + * + * + *
+     * Required. The subscription to delete.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The subscription to delete.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The subscription to delete.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscription(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription to delete.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSubscription() { + subscription_ = getDefaultInstance().getSubscription(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription to delete.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscriptionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.DeleteSubscriptionRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.DeleteSubscriptionRequest) + private static final com.google.pubsub.v1.DeleteSubscriptionRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.DeleteSubscriptionRequest(); + } + + public static com.google.pubsub.v1.DeleteSubscriptionRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DeleteSubscriptionRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteSubscriptionRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSubscriptionRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSubscriptionRequestOrBuilder.java new file mode 100644 index 000000000000..407ff8133eb8 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteSubscriptionRequestOrBuilder.java @@ -0,0 +1,60 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface DeleteSubscriptionRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.DeleteSubscriptionRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The subscription to delete.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + java.lang.String getSubscription(); + + /** + * + * + *
+   * Required. The subscription to delete.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + com.google.protobuf.ByteString getSubscriptionBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteTopicRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteTopicRequest.java new file mode 100644 index 000000000000..2d2b3780186d --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteTopicRequest.java @@ -0,0 +1,615 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `DeleteTopic` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.DeleteTopicRequest} + */ +@com.google.protobuf.Generated +public final class DeleteTopicRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.DeleteTopicRequest) + DeleteTopicRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DeleteTopicRequest"); + } + + // Use DeleteTopicRequest.newBuilder() to construct. + private DeleteTopicRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private DeleteTopicRequest() { + topic_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteTopicRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteTopicRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DeleteTopicRequest.class, + com.google.pubsub.v1.DeleteTopicRequest.Builder.class); + } + + public static final int TOPIC_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object topic_ = ""; + + /** + * + * + *
+   * Required. Name of the topic to delete.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + @java.lang.Override + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. Name of the topic to delete.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, topic_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, topic_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.DeleteTopicRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.DeleteTopicRequest other = (com.google.pubsub.v1.DeleteTopicRequest) obj; + + if (!getTopic().equals(other.getTopic())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getTopic().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.DeleteTopicRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteTopicRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteTopicRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteTopicRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteTopicRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DeleteTopicRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteTopicRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteTopicRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteTopicRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteTopicRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DeleteTopicRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DeleteTopicRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.DeleteTopicRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `DeleteTopic` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.DeleteTopicRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.DeleteTopicRequest) + com.google.pubsub.v1.DeleteTopicRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteTopicRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteTopicRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DeleteTopicRequest.class, + com.google.pubsub.v1.DeleteTopicRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.DeleteTopicRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + topic_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DeleteTopicRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteTopicRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.DeleteTopicRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteTopicRequest build() { + com.google.pubsub.v1.DeleteTopicRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteTopicRequest buildPartial() { + com.google.pubsub.v1.DeleteTopicRequest result = + new com.google.pubsub.v1.DeleteTopicRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.DeleteTopicRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.topic_ = topic_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.DeleteTopicRequest) { + return mergeFrom((com.google.pubsub.v1.DeleteTopicRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.DeleteTopicRequest other) { + if (other == com.google.pubsub.v1.DeleteTopicRequest.getDefaultInstance()) return this; + if (!other.getTopic().isEmpty()) { + topic_ = other.topic_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + topic_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object topic_ = ""; + + /** + * + * + *
+     * Required. Name of the topic to delete.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. Name of the topic to delete.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. Name of the topic to delete.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The topic to set. + * @return This builder for chaining. + */ + public Builder setTopic(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + topic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Name of the topic to delete.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearTopic() { + topic_ = getDefaultInstance().getTopic(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Name of the topic to delete.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for topic to set. + * @return This builder for chaining. + */ + public Builder setTopicBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + topic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.DeleteTopicRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.DeleteTopicRequest) + private static final com.google.pubsub.v1.DeleteTopicRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.DeleteTopicRequest(); + } + + public static com.google.pubsub.v1.DeleteTopicRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DeleteTopicRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.DeleteTopicRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteTopicRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteTopicRequestOrBuilder.java new file mode 100644 index 000000000000..ba2de1ac4dac --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeleteTopicRequestOrBuilder.java @@ -0,0 +1,60 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface DeleteTopicRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.DeleteTopicRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. Name of the topic to delete.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + java.lang.String getTopic(); + + /** + * + * + *
+   * Required. Name of the topic to delete.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + com.google.protobuf.ByteString getTopicBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeletedTopic.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeletedTopic.java new file mode 100644 index 000000000000..b32fcbfc04ee --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DeletedTopic.java @@ -0,0 +1,55 @@ +/* + * Copyright 2020 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 + * + * https://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. + */ + +package com.google.pubsub.v1; + +import com.google.common.collect.ImmutableMap; +import java.util.Map; + +/** AUTO-GENERATED DOCUMENTATION AND CLASS */ +@javax.annotation.Generated("by GAPIC protoc plugin") +public class DeletedTopic extends TopicName { + + private static final String FIXED_VALUE = "_deleted-topic_"; + private static final Map valueMap = ImmutableMap.of("", FIXED_VALUE); + + private static final DeletedTopic instance = new DeletedTopic(); + + private DeletedTopic() {} + + public static DeletedTopic instance() { + return instance; + } + + public static boolean matches(String value) { + return FIXED_VALUE.equals(value); + } + + /** Return a map with a single value FIXED_VALUE keyed on an empty String "". */ + public Map getFieldValuesMap() { + return valueMap; + } + + /** Return the FIXED_VALUE if @param fieldName is an empty String "", else return null. */ + public String getFieldValue(String fieldName) { + return valueMap.get(fieldName); + } + + @Override + public String toString() { + return FIXED_VALUE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DetachSubscriptionRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DetachSubscriptionRequest.java new file mode 100644 index 000000000000..074171a8ecb8 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DetachSubscriptionRequest.java @@ -0,0 +1,616 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the DetachSubscription method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.DetachSubscriptionRequest} + */ +@com.google.protobuf.Generated +public final class DetachSubscriptionRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.DetachSubscriptionRequest) + DetachSubscriptionRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DetachSubscriptionRequest"); + } + + // Use DetachSubscriptionRequest.newBuilder() to construct. + private DetachSubscriptionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private DetachSubscriptionRequest() { + subscription_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DetachSubscriptionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DetachSubscriptionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DetachSubscriptionRequest.class, + com.google.pubsub.v1.DetachSubscriptionRequest.Builder.class); + } + + public static final int SUBSCRIPTION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object subscription_ = ""; + + /** + * + * + *
+   * Required. The subscription to detach.
+   * Format is `projects/{project}/subscriptions/{subscription}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + @java.lang.Override + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The subscription to detach.
+   * Format is `projects/{project}/subscriptions/{subscription}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, subscription_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, subscription_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.DetachSubscriptionRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.DetachSubscriptionRequest other = + (com.google.pubsub.v1.DetachSubscriptionRequest) obj; + + if (!getSubscription().equals(other.getSubscription())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SUBSCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getSubscription().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.DetachSubscriptionRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DetachSubscriptionRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DetachSubscriptionRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DetachSubscriptionRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DetachSubscriptionRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DetachSubscriptionRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DetachSubscriptionRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DetachSubscriptionRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DetachSubscriptionRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DetachSubscriptionRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DetachSubscriptionRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DetachSubscriptionRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.DetachSubscriptionRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the DetachSubscription method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.DetachSubscriptionRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.DetachSubscriptionRequest) + com.google.pubsub.v1.DetachSubscriptionRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DetachSubscriptionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DetachSubscriptionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DetachSubscriptionRequest.class, + com.google.pubsub.v1.DetachSubscriptionRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.DetachSubscriptionRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + subscription_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DetachSubscriptionRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.DetachSubscriptionRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.DetachSubscriptionRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.DetachSubscriptionRequest build() { + com.google.pubsub.v1.DetachSubscriptionRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.DetachSubscriptionRequest buildPartial() { + com.google.pubsub.v1.DetachSubscriptionRequest result = + new com.google.pubsub.v1.DetachSubscriptionRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.DetachSubscriptionRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.subscription_ = subscription_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.DetachSubscriptionRequest) { + return mergeFrom((com.google.pubsub.v1.DetachSubscriptionRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.DetachSubscriptionRequest other) { + if (other == com.google.pubsub.v1.DetachSubscriptionRequest.getDefaultInstance()) return this; + if (!other.getSubscription().isEmpty()) { + subscription_ = other.subscription_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + subscription_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object subscription_ = ""; + + /** + * + * + *
+     * Required. The subscription to detach.
+     * Format is `projects/{project}/subscriptions/{subscription}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The subscription to detach.
+     * Format is `projects/{project}/subscriptions/{subscription}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The subscription to detach.
+     * Format is `projects/{project}/subscriptions/{subscription}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscription(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription to detach.
+     * Format is `projects/{project}/subscriptions/{subscription}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSubscription() { + subscription_ = getDefaultInstance().getSubscription(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription to detach.
+     * Format is `projects/{project}/subscriptions/{subscription}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscriptionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.DetachSubscriptionRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.DetachSubscriptionRequest) + private static final com.google.pubsub.v1.DetachSubscriptionRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.DetachSubscriptionRequest(); + } + + public static com.google.pubsub.v1.DetachSubscriptionRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DetachSubscriptionRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.DetachSubscriptionRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DetachSubscriptionRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DetachSubscriptionRequestOrBuilder.java new file mode 100644 index 000000000000..2980352a43f2 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DetachSubscriptionRequestOrBuilder.java @@ -0,0 +1,60 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface DetachSubscriptionRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.DetachSubscriptionRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The subscription to detach.
+   * Format is `projects/{project}/subscriptions/{subscription}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + java.lang.String getSubscription(); + + /** + * + * + *
+   * Required. The subscription to detach.
+   * Format is `projects/{project}/subscriptions/{subscription}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + com.google.protobuf.ByteString getSubscriptionBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DetachSubscriptionResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DetachSubscriptionResponse.java new file mode 100644 index 000000000000..6cc5449ec172 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DetachSubscriptionResponse.java @@ -0,0 +1,398 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the DetachSubscription method.
+ * Reserved for future use.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.DetachSubscriptionResponse} + */ +@com.google.protobuf.Generated +public final class DetachSubscriptionResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.DetachSubscriptionResponse) + DetachSubscriptionResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "DetachSubscriptionResponse"); + } + + // Use DetachSubscriptionResponse.newBuilder() to construct. + private DetachSubscriptionResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private DetachSubscriptionResponse() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DetachSubscriptionResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DetachSubscriptionResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DetachSubscriptionResponse.class, + com.google.pubsub.v1.DetachSubscriptionResponse.Builder.class); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.DetachSubscriptionResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.DetachSubscriptionResponse other = + (com.google.pubsub.v1.DetachSubscriptionResponse) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.DetachSubscriptionResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DetachSubscriptionResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DetachSubscriptionResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DetachSubscriptionResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DetachSubscriptionResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.DetachSubscriptionResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.DetachSubscriptionResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DetachSubscriptionResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DetachSubscriptionResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DetachSubscriptionResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.DetachSubscriptionResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.DetachSubscriptionResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.DetachSubscriptionResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the DetachSubscription method.
+   * Reserved for future use.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.DetachSubscriptionResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.DetachSubscriptionResponse) + com.google.pubsub.v1.DetachSubscriptionResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DetachSubscriptionResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DetachSubscriptionResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.DetachSubscriptionResponse.class, + com.google.pubsub.v1.DetachSubscriptionResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.DetachSubscriptionResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_DetachSubscriptionResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.DetachSubscriptionResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.DetachSubscriptionResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.DetachSubscriptionResponse build() { + com.google.pubsub.v1.DetachSubscriptionResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.DetachSubscriptionResponse buildPartial() { + com.google.pubsub.v1.DetachSubscriptionResponse result = + new com.google.pubsub.v1.DetachSubscriptionResponse(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.DetachSubscriptionResponse) { + return mergeFrom((com.google.pubsub.v1.DetachSubscriptionResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.DetachSubscriptionResponse other) { + if (other == com.google.pubsub.v1.DetachSubscriptionResponse.getDefaultInstance()) + return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.DetachSubscriptionResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.DetachSubscriptionResponse) + private static final com.google.pubsub.v1.DetachSubscriptionResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.DetachSubscriptionResponse(); + } + + public static com.google.pubsub.v1.DetachSubscriptionResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DetachSubscriptionResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.DetachSubscriptionResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DetachSubscriptionResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DetachSubscriptionResponseOrBuilder.java new file mode 100644 index 000000000000..52e34716c2f7 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/DetachSubscriptionResponseOrBuilder.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface DetachSubscriptionResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.DetachSubscriptionResponse) + com.google.protobuf.MessageOrBuilder {} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Encoding.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Encoding.java new file mode 100644 index 000000000000..3c03c8a9eca8 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Encoding.java @@ -0,0 +1,193 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Possible encoding types for messages.
+ * 
+ * + * Protobuf enum {@code google.pubsub.v1.Encoding} + */ +@com.google.protobuf.Generated +public enum Encoding implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+   * Unspecified
+   * 
+ * + * ENCODING_UNSPECIFIED = 0; + */ + ENCODING_UNSPECIFIED(0), + /** + * + * + *
+   * JSON encoding
+   * 
+ * + * JSON = 1; + */ + JSON(1), + /** + * + * + *
+   * Binary encoding, as defined by the schema type. For some schema types,
+   * binary encoding may not be available.
+   * 
+ * + * BINARY = 2; + */ + BINARY(2), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Encoding"); + } + + /** + * + * + *
+   * Unspecified
+   * 
+ * + * ENCODING_UNSPECIFIED = 0; + */ + public static final int ENCODING_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+   * JSON encoding
+   * 
+ * + * JSON = 1; + */ + public static final int JSON_VALUE = 1; + + /** + * + * + *
+   * Binary encoding, as defined by the schema type. For some schema types,
+   * binary encoding may not be available.
+   * 
+ * + * BINARY = 2; + */ + public static final int BINARY_VALUE = 2; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static Encoding valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static Encoding forNumber(int value) { + switch (value) { + case 0: + return ENCODING_UNSPECIFIED; + case 1: + return JSON; + case 2: + return BINARY; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Encoding findValueByNumber(int number) { + return Encoding.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto.getDescriptor().getEnumTypes().get(1); + } + + private static final Encoding[] VALUES = values(); + + public static Encoding valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private Encoding(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.Encoding) +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ExpirationPolicy.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ExpirationPolicy.java new file mode 100644 index 000000000000..ef25fb02c486 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ExpirationPolicy.java @@ -0,0 +1,747 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * A policy that specifies the conditions for resource expiration (i.e.,
+ * automatic resource deletion).
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ExpirationPolicy} + */ +@com.google.protobuf.Generated +public final class ExpirationPolicy extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ExpirationPolicy) + ExpirationPolicyOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ExpirationPolicy"); + } + + // Use ExpirationPolicy.newBuilder() to construct. + private ExpirationPolicy(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ExpirationPolicy() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ExpirationPolicy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ExpirationPolicy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ExpirationPolicy.class, + com.google.pubsub.v1.ExpirationPolicy.Builder.class); + } + + private int bitField0_; + public static final int TTL_FIELD_NUMBER = 1; + private com.google.protobuf.Duration ttl_; + + /** + * + * + *
+   * Optional. Specifies the "time-to-live" duration for an associated resource.
+   * The resource expires if it is not active for a period of `ttl`. The
+   * definition of "activity" depends on the type of the associated resource.
+   * The minimum and maximum allowed values for `ttl` depend on the type of the
+   * associated resource, as well. If `ttl` is not set, the associated resource
+   * never expires.
+   * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return Whether the ttl field is set. + */ + @java.lang.Override + public boolean hasTtl() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Optional. Specifies the "time-to-live" duration for an associated resource.
+   * The resource expires if it is not active for a period of `ttl`. The
+   * definition of "activity" depends on the type of the associated resource.
+   * The minimum and maximum allowed values for `ttl` depend on the type of the
+   * associated resource, as well. If `ttl` is not set, the associated resource
+   * never expires.
+   * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The ttl. + */ + @java.lang.Override + public com.google.protobuf.Duration getTtl() { + return ttl_ == null ? com.google.protobuf.Duration.getDefaultInstance() : ttl_; + } + + /** + * + * + *
+   * Optional. Specifies the "time-to-live" duration for an associated resource.
+   * The resource expires if it is not active for a period of `ttl`. The
+   * definition of "activity" depends on the type of the associated resource.
+   * The minimum and maximum allowed values for `ttl` depend on the type of the
+   * associated resource, as well. If `ttl` is not set, the associated resource
+   * never expires.
+   * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public com.google.protobuf.DurationOrBuilder getTtlOrBuilder() { + return ttl_ == null ? com.google.protobuf.Duration.getDefaultInstance() : ttl_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getTtl()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getTtl()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ExpirationPolicy)) { + return super.equals(obj); + } + com.google.pubsub.v1.ExpirationPolicy other = (com.google.pubsub.v1.ExpirationPolicy) obj; + + if (hasTtl() != other.hasTtl()) return false; + if (hasTtl()) { + if (!getTtl().equals(other.getTtl())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasTtl()) { + hash = (37 * hash) + TTL_FIELD_NUMBER; + hash = (53 * hash) + getTtl().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ExpirationPolicy parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ExpirationPolicy parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ExpirationPolicy parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ExpirationPolicy parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ExpirationPolicy parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ExpirationPolicy parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ExpirationPolicy parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ExpirationPolicy parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ExpirationPolicy parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ExpirationPolicy parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ExpirationPolicy parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ExpirationPolicy parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ExpirationPolicy prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * A policy that specifies the conditions for resource expiration (i.e.,
+   * automatic resource deletion).
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ExpirationPolicy} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ExpirationPolicy) + com.google.pubsub.v1.ExpirationPolicyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ExpirationPolicy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ExpirationPolicy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ExpirationPolicy.class, + com.google.pubsub.v1.ExpirationPolicy.Builder.class); + } + + // Construct using com.google.pubsub.v1.ExpirationPolicy.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetTtlFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + ttl_ = null; + if (ttlBuilder_ != null) { + ttlBuilder_.dispose(); + ttlBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ExpirationPolicy_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ExpirationPolicy getDefaultInstanceForType() { + return com.google.pubsub.v1.ExpirationPolicy.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ExpirationPolicy build() { + com.google.pubsub.v1.ExpirationPolicy result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ExpirationPolicy buildPartial() { + com.google.pubsub.v1.ExpirationPolicy result = + new com.google.pubsub.v1.ExpirationPolicy(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ExpirationPolicy result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.ttl_ = ttlBuilder_ == null ? ttl_ : ttlBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ExpirationPolicy) { + return mergeFrom((com.google.pubsub.v1.ExpirationPolicy) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ExpirationPolicy other) { + if (other == com.google.pubsub.v1.ExpirationPolicy.getDefaultInstance()) return this; + if (other.hasTtl()) { + mergeTtl(other.getTtl()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage(internalGetTtlFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.Duration ttl_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + ttlBuilder_; + + /** + * + * + *
+     * Optional. Specifies the "time-to-live" duration for an associated resource.
+     * The resource expires if it is not active for a period of `ttl`. The
+     * definition of "activity" depends on the type of the associated resource.
+     * The minimum and maximum allowed values for `ttl` depend on the type of the
+     * associated resource, as well. If `ttl` is not set, the associated resource
+     * never expires.
+     * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return Whether the ttl field is set. + */ + public boolean hasTtl() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+     * Optional. Specifies the "time-to-live" duration for an associated resource.
+     * The resource expires if it is not active for a period of `ttl`. The
+     * definition of "activity" depends on the type of the associated resource.
+     * The minimum and maximum allowed values for `ttl` depend on the type of the
+     * associated resource, as well. If `ttl` is not set, the associated resource
+     * never expires.
+     * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The ttl. + */ + public com.google.protobuf.Duration getTtl() { + if (ttlBuilder_ == null) { + return ttl_ == null ? com.google.protobuf.Duration.getDefaultInstance() : ttl_; + } else { + return ttlBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. Specifies the "time-to-live" duration for an associated resource.
+     * The resource expires if it is not active for a period of `ttl`. The
+     * definition of "activity" depends on the type of the associated resource.
+     * The minimum and maximum allowed values for `ttl` depend on the type of the
+     * associated resource, as well. If `ttl` is not set, the associated resource
+     * never expires.
+     * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder setTtl(com.google.protobuf.Duration value) { + if (ttlBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ttl_ = value; + } else { + ttlBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Specifies the "time-to-live" duration for an associated resource.
+     * The resource expires if it is not active for a period of `ttl`. The
+     * definition of "activity" depends on the type of the associated resource.
+     * The minimum and maximum allowed values for `ttl` depend on the type of the
+     * associated resource, as well. If `ttl` is not set, the associated resource
+     * never expires.
+     * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder setTtl(com.google.protobuf.Duration.Builder builderForValue) { + if (ttlBuilder_ == null) { + ttl_ = builderForValue.build(); + } else { + ttlBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Specifies the "time-to-live" duration for an associated resource.
+     * The resource expires if it is not active for a period of `ttl`. The
+     * definition of "activity" depends on the type of the associated resource.
+     * The minimum and maximum allowed values for `ttl` depend on the type of the
+     * associated resource, as well. If `ttl` is not set, the associated resource
+     * never expires.
+     * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder mergeTtl(com.google.protobuf.Duration value) { + if (ttlBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && ttl_ != null + && ttl_ != com.google.protobuf.Duration.getDefaultInstance()) { + getTtlBuilder().mergeFrom(value); + } else { + ttl_ = value; + } + } else { + ttlBuilder_.mergeFrom(value); + } + if (ttl_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. Specifies the "time-to-live" duration for an associated resource.
+     * The resource expires if it is not active for a period of `ttl`. The
+     * definition of "activity" depends on the type of the associated resource.
+     * The minimum and maximum allowed values for `ttl` depend on the type of the
+     * associated resource, as well. If `ttl` is not set, the associated resource
+     * never expires.
+     * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder clearTtl() { + bitField0_ = (bitField0_ & ~0x00000001); + ttl_ = null; + if (ttlBuilder_ != null) { + ttlBuilder_.dispose(); + ttlBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Specifies the "time-to-live" duration for an associated resource.
+     * The resource expires if it is not active for a period of `ttl`. The
+     * definition of "activity" depends on the type of the associated resource.
+     * The minimum and maximum allowed values for `ttl` depend on the type of the
+     * associated resource, as well. If `ttl` is not set, the associated resource
+     * never expires.
+     * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + */ + public com.google.protobuf.Duration.Builder getTtlBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetTtlFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Specifies the "time-to-live" duration for an associated resource.
+     * The resource expires if it is not active for a period of `ttl`. The
+     * definition of "activity" depends on the type of the associated resource.
+     * The minimum and maximum allowed values for `ttl` depend on the type of the
+     * associated resource, as well. If `ttl` is not set, the associated resource
+     * never expires.
+     * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + */ + public com.google.protobuf.DurationOrBuilder getTtlOrBuilder() { + if (ttlBuilder_ != null) { + return ttlBuilder_.getMessageOrBuilder(); + } else { + return ttl_ == null ? com.google.protobuf.Duration.getDefaultInstance() : ttl_; + } + } + + /** + * + * + *
+     * Optional. Specifies the "time-to-live" duration for an associated resource.
+     * The resource expires if it is not active for a period of `ttl`. The
+     * definition of "activity" depends on the type of the associated resource.
+     * The minimum and maximum allowed values for `ttl` depend on the type of the
+     * associated resource, as well. If `ttl` is not set, the associated resource
+     * never expires.
+     * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + internalGetTtlFieldBuilder() { + if (ttlBuilder_ == null) { + ttlBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder>(getTtl(), getParentForChildren(), isClean()); + ttl_ = null; + } + return ttlBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ExpirationPolicy) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ExpirationPolicy) + private static final com.google.pubsub.v1.ExpirationPolicy DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ExpirationPolicy(); + } + + public static com.google.pubsub.v1.ExpirationPolicy getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ExpirationPolicy parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ExpirationPolicy getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ExpirationPolicyOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ExpirationPolicyOrBuilder.java new file mode 100644 index 000000000000..825d9c775c19 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ExpirationPolicyOrBuilder.java @@ -0,0 +1,80 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ExpirationPolicyOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ExpirationPolicy) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. Specifies the "time-to-live" duration for an associated resource.
+   * The resource expires if it is not active for a period of `ttl`. The
+   * definition of "activity" depends on the type of the associated resource.
+   * The minimum and maximum allowed values for `ttl` depend on the type of the
+   * associated resource, as well. If `ttl` is not set, the associated resource
+   * never expires.
+   * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return Whether the ttl field is set. + */ + boolean hasTtl(); + + /** + * + * + *
+   * Optional. Specifies the "time-to-live" duration for an associated resource.
+   * The resource expires if it is not active for a period of `ttl`. The
+   * definition of "activity" depends on the type of the associated resource.
+   * The minimum and maximum allowed values for `ttl` depend on the type of the
+   * associated resource, as well. If `ttl` is not set, the associated resource
+   * never expires.
+   * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The ttl. + */ + com.google.protobuf.Duration getTtl(); + + /** + * + * + *
+   * Optional. Specifies the "time-to-live" duration for an associated resource.
+   * The resource expires if it is not active for a period of `ttl`. The
+   * definition of "activity" depends on the type of the associated resource.
+   * The minimum and maximum allowed values for `ttl` depend on the type of the
+   * associated resource, as well. If `ttl` is not set, the associated resource
+   * never expires.
+   * 
+ * + * .google.protobuf.Duration ttl = 1 [(.google.api.field_behavior) = OPTIONAL]; + */ + com.google.protobuf.DurationOrBuilder getTtlOrBuilder(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSchemaRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSchemaRequest.java new file mode 100644 index 000000000000..691454cd0de1 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSchemaRequest.java @@ -0,0 +1,774 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the GetSchema method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.GetSchemaRequest} + */ +@com.google.protobuf.Generated +public final class GetSchemaRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.GetSchemaRequest) + GetSchemaRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetSchemaRequest"); + } + + // Use GetSchemaRequest.newBuilder() to construct. + private GetSchemaRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private GetSchemaRequest() { + name_ = ""; + view_ = 0; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_GetSchemaRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_GetSchemaRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.GetSchemaRequest.class, + com.google.pubsub.v1.GetSchemaRequest.Builder.class); + } + + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
+   * Required. The name of the schema to get.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the schema to get.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int VIEW_FIELD_NUMBER = 2; + private int view_ = 0; + + /** + * + * + *
+   * The set of fields to return in the response. If not set, returns a Schema
+   * with all fields filled out. Set to `BASIC` to omit the `definition`.
+   * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The enum numeric value on the wire for view. + */ + @java.lang.Override + public int getViewValue() { + return view_; + } + + /** + * + * + *
+   * The set of fields to return in the response. If not set, returns a Schema
+   * with all fields filled out. Set to `BASIC` to omit the `definition`.
+   * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The view. + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaView getView() { + com.google.pubsub.v1.SchemaView result = com.google.pubsub.v1.SchemaView.forNumber(view_); + return result == null ? com.google.pubsub.v1.SchemaView.UNRECOGNIZED : result; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); + } + if (view_ != com.google.pubsub.v1.SchemaView.SCHEMA_VIEW_UNSPECIFIED.getNumber()) { + output.writeEnum(2, view_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); + } + if (view_ != com.google.pubsub.v1.SchemaView.SCHEMA_VIEW_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, view_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.GetSchemaRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.GetSchemaRequest other = (com.google.pubsub.v1.GetSchemaRequest) obj; + + if (!getName().equals(other.getName())) return false; + if (view_ != other.view_) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + VIEW_FIELD_NUMBER; + hash = (53 * hash) + view_; + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.GetSchemaRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.GetSchemaRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSchemaRequest parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.GetSchemaRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSchemaRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.GetSchemaRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSchemaRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.GetSchemaRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSchemaRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.GetSchemaRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSchemaRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.GetSchemaRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.GetSchemaRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the GetSchema method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.GetSchemaRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.GetSchemaRequest) + com.google.pubsub.v1.GetSchemaRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_GetSchemaRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_GetSchemaRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.GetSchemaRequest.class, + com.google.pubsub.v1.GetSchemaRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.GetSchemaRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + view_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_GetSchemaRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.GetSchemaRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.GetSchemaRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.GetSchemaRequest build() { + com.google.pubsub.v1.GetSchemaRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.GetSchemaRequest buildPartial() { + com.google.pubsub.v1.GetSchemaRequest result = + new com.google.pubsub.v1.GetSchemaRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.GetSchemaRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.view_ = view_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.GetSchemaRequest) { + return mergeFrom((com.google.pubsub.v1.GetSchemaRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.GetSchemaRequest other) { + if (other == com.google.pubsub.v1.GetSchemaRequest.getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.view_ != 0) { + setViewValue(other.getViewValue()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + view_ = input.readEnum(); + bitField0_ |= 0x00000002; + break; + } // case 16 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object name_ = ""; + + /** + * + * + *
+     * Required. The name of the schema to get.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the schema to get.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the schema to get.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the schema to get.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the schema to get.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private int view_ = 0; + + /** + * + * + *
+     * The set of fields to return in the response. If not set, returns a Schema
+     * with all fields filled out. Set to `BASIC` to omit the `definition`.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The enum numeric value on the wire for view. + */ + @java.lang.Override + public int getViewValue() { + return view_; + } + + /** + * + * + *
+     * The set of fields to return in the response. If not set, returns a Schema
+     * with all fields filled out. Set to `BASIC` to omit the `definition`.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @param value The enum numeric value on the wire for view to set. + * @return This builder for chaining. + */ + public Builder setViewValue(int value) { + view_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * The set of fields to return in the response. If not set, returns a Schema
+     * with all fields filled out. Set to `BASIC` to omit the `definition`.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The view. + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaView getView() { + com.google.pubsub.v1.SchemaView result = com.google.pubsub.v1.SchemaView.forNumber(view_); + return result == null ? com.google.pubsub.v1.SchemaView.UNRECOGNIZED : result; + } + + /** + * + * + *
+     * The set of fields to return in the response. If not set, returns a Schema
+     * with all fields filled out. Set to `BASIC` to omit the `definition`.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @param value The view to set. + * @return This builder for chaining. + */ + public Builder setView(com.google.pubsub.v1.SchemaView value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + view_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * The set of fields to return in the response. If not set, returns a Schema
+     * with all fields filled out. Set to `BASIC` to omit the `definition`.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return This builder for chaining. + */ + public Builder clearView() { + bitField0_ = (bitField0_ & ~0x00000002); + view_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.GetSchemaRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.GetSchemaRequest) + private static final com.google.pubsub.v1.GetSchemaRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.GetSchemaRequest(); + } + + public static com.google.pubsub.v1.GetSchemaRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GetSchemaRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.GetSchemaRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSchemaRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSchemaRequestOrBuilder.java new file mode 100644 index 000000000000..7f09aef117fa --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSchemaRequestOrBuilder.java @@ -0,0 +1,88 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface GetSchemaRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.GetSchemaRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the schema to get.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Required. The name of the schema to get.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * + * + *
+   * The set of fields to return in the response. If not set, returns a Schema
+   * with all fields filled out. Set to `BASIC` to omit the `definition`.
+   * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The enum numeric value on the wire for view. + */ + int getViewValue(); + + /** + * + * + *
+   * The set of fields to return in the response. If not set, returns a Schema
+   * with all fields filled out. Set to `BASIC` to omit the `definition`.
+   * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The view. + */ + com.google.pubsub.v1.SchemaView getView(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSnapshotRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSnapshotRequest.java new file mode 100644 index 000000000000..b8744fee068f --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSnapshotRequest.java @@ -0,0 +1,615 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the GetSnapshot method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.GetSnapshotRequest} + */ +@com.google.protobuf.Generated +public final class GetSnapshotRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.GetSnapshotRequest) + GetSnapshotRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetSnapshotRequest"); + } + + // Use GetSnapshotRequest.newBuilder() to construct. + private GetSnapshotRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private GetSnapshotRequest() { + snapshot_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetSnapshotRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetSnapshotRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.GetSnapshotRequest.class, + com.google.pubsub.v1.GetSnapshotRequest.Builder.class); + } + + public static final int SNAPSHOT_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object snapshot_ = ""; + + /** + * + * + *
+   * Required. The name of the snapshot to get.
+   * Format is `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The snapshot. + */ + @java.lang.Override + public java.lang.String getSnapshot() { + java.lang.Object ref = snapshot_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + snapshot_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the snapshot to get.
+   * Format is `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for snapshot. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSnapshotBytes() { + java.lang.Object ref = snapshot_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + snapshot_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(snapshot_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, snapshot_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(snapshot_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, snapshot_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.GetSnapshotRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.GetSnapshotRequest other = (com.google.pubsub.v1.GetSnapshotRequest) obj; + + if (!getSnapshot().equals(other.getSnapshot())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SNAPSHOT_FIELD_NUMBER; + hash = (53 * hash) + getSnapshot().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.GetSnapshotRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.GetSnapshotRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSnapshotRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.GetSnapshotRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSnapshotRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.GetSnapshotRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSnapshotRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.GetSnapshotRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSnapshotRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.GetSnapshotRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSnapshotRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.GetSnapshotRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.GetSnapshotRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the GetSnapshot method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.GetSnapshotRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.GetSnapshotRequest) + com.google.pubsub.v1.GetSnapshotRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetSnapshotRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetSnapshotRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.GetSnapshotRequest.class, + com.google.pubsub.v1.GetSnapshotRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.GetSnapshotRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + snapshot_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetSnapshotRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.GetSnapshotRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.GetSnapshotRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.GetSnapshotRequest build() { + com.google.pubsub.v1.GetSnapshotRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.GetSnapshotRequest buildPartial() { + com.google.pubsub.v1.GetSnapshotRequest result = + new com.google.pubsub.v1.GetSnapshotRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.GetSnapshotRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.snapshot_ = snapshot_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.GetSnapshotRequest) { + return mergeFrom((com.google.pubsub.v1.GetSnapshotRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.GetSnapshotRequest other) { + if (other == com.google.pubsub.v1.GetSnapshotRequest.getDefaultInstance()) return this; + if (!other.getSnapshot().isEmpty()) { + snapshot_ = other.snapshot_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + snapshot_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object snapshot_ = ""; + + /** + * + * + *
+     * Required. The name of the snapshot to get.
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The snapshot. + */ + public java.lang.String getSnapshot() { + java.lang.Object ref = snapshot_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + snapshot_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the snapshot to get.
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for snapshot. + */ + public com.google.protobuf.ByteString getSnapshotBytes() { + java.lang.Object ref = snapshot_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + snapshot_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the snapshot to get.
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The snapshot to set. + * @return This builder for chaining. + */ + public Builder setSnapshot(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + snapshot_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the snapshot to get.
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSnapshot() { + snapshot_ = getDefaultInstance().getSnapshot(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the snapshot to get.
+     * Format is `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for snapshot to set. + * @return This builder for chaining. + */ + public Builder setSnapshotBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + snapshot_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.GetSnapshotRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.GetSnapshotRequest) + private static final com.google.pubsub.v1.GetSnapshotRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.GetSnapshotRequest(); + } + + public static com.google.pubsub.v1.GetSnapshotRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GetSnapshotRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.GetSnapshotRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSnapshotRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSnapshotRequestOrBuilder.java new file mode 100644 index 000000000000..d818ff674091 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSnapshotRequestOrBuilder.java @@ -0,0 +1,60 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface GetSnapshotRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.GetSnapshotRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the snapshot to get.
+   * Format is `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The snapshot. + */ + java.lang.String getSnapshot(); + + /** + * + * + *
+   * Required. The name of the snapshot to get.
+   * Format is `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for snapshot. + */ + com.google.protobuf.ByteString getSnapshotBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSubscriptionRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSubscriptionRequest.java new file mode 100644 index 000000000000..df1d38b06b55 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSubscriptionRequest.java @@ -0,0 +1,616 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the GetSubscription method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.GetSubscriptionRequest} + */ +@com.google.protobuf.Generated +public final class GetSubscriptionRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.GetSubscriptionRequest) + GetSubscriptionRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetSubscriptionRequest"); + } + + // Use GetSubscriptionRequest.newBuilder() to construct. + private GetSubscriptionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private GetSubscriptionRequest() { + subscription_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetSubscriptionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetSubscriptionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.GetSubscriptionRequest.class, + com.google.pubsub.v1.GetSubscriptionRequest.Builder.class); + } + + public static final int SUBSCRIPTION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object subscription_ = ""; + + /** + * + * + *
+   * Required. The name of the subscription to get.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + @java.lang.Override + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the subscription to get.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, subscription_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, subscription_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.GetSubscriptionRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.GetSubscriptionRequest other = + (com.google.pubsub.v1.GetSubscriptionRequest) obj; + + if (!getSubscription().equals(other.getSubscription())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SUBSCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getSubscription().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.GetSubscriptionRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.GetSubscriptionRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSubscriptionRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.GetSubscriptionRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSubscriptionRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.GetSubscriptionRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSubscriptionRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.GetSubscriptionRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSubscriptionRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.GetSubscriptionRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.GetSubscriptionRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.GetSubscriptionRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.GetSubscriptionRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the GetSubscription method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.GetSubscriptionRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.GetSubscriptionRequest) + com.google.pubsub.v1.GetSubscriptionRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetSubscriptionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetSubscriptionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.GetSubscriptionRequest.class, + com.google.pubsub.v1.GetSubscriptionRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.GetSubscriptionRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + subscription_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetSubscriptionRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.GetSubscriptionRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.GetSubscriptionRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.GetSubscriptionRequest build() { + com.google.pubsub.v1.GetSubscriptionRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.GetSubscriptionRequest buildPartial() { + com.google.pubsub.v1.GetSubscriptionRequest result = + new com.google.pubsub.v1.GetSubscriptionRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.GetSubscriptionRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.subscription_ = subscription_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.GetSubscriptionRequest) { + return mergeFrom((com.google.pubsub.v1.GetSubscriptionRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.GetSubscriptionRequest other) { + if (other == com.google.pubsub.v1.GetSubscriptionRequest.getDefaultInstance()) return this; + if (!other.getSubscription().isEmpty()) { + subscription_ = other.subscription_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + subscription_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object subscription_ = ""; + + /** + * + * + *
+     * Required. The name of the subscription to get.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the subscription to get.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the subscription to get.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscription(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the subscription to get.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSubscription() { + subscription_ = getDefaultInstance().getSubscription(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the subscription to get.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscriptionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.GetSubscriptionRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.GetSubscriptionRequest) + private static final com.google.pubsub.v1.GetSubscriptionRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.GetSubscriptionRequest(); + } + + public static com.google.pubsub.v1.GetSubscriptionRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GetSubscriptionRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.GetSubscriptionRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSubscriptionRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSubscriptionRequestOrBuilder.java new file mode 100644 index 000000000000..93a8ea4fa95c --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetSubscriptionRequestOrBuilder.java @@ -0,0 +1,60 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface GetSubscriptionRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.GetSubscriptionRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the subscription to get.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + java.lang.String getSubscription(); + + /** + * + * + *
+   * Required. The name of the subscription to get.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + com.google.protobuf.ByteString getSubscriptionBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetTopicRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetTopicRequest.java new file mode 100644 index 000000000000..215b1b7cee11 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetTopicRequest.java @@ -0,0 +1,613 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the GetTopic method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.GetTopicRequest} + */ +@com.google.protobuf.Generated +public final class GetTopicRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.GetTopicRequest) + GetTopicRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "GetTopicRequest"); + } + + // Use GetTopicRequest.newBuilder() to construct. + private GetTopicRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private GetTopicRequest() { + topic_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetTopicRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetTopicRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.GetTopicRequest.class, + com.google.pubsub.v1.GetTopicRequest.Builder.class); + } + + public static final int TOPIC_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object topic_ = ""; + + /** + * + * + *
+   * Required. The name of the topic to get.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + @java.lang.Override + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the topic to get.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, topic_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, topic_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.GetTopicRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.GetTopicRequest other = (com.google.pubsub.v1.GetTopicRequest) obj; + + if (!getTopic().equals(other.getTopic())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getTopic().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.GetTopicRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.GetTopicRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.GetTopicRequest parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.GetTopicRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.GetTopicRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.GetTopicRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.GetTopicRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.GetTopicRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.GetTopicRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.GetTopicRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.GetTopicRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.GetTopicRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.GetTopicRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the GetTopic method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.GetTopicRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.GetTopicRequest) + com.google.pubsub.v1.GetTopicRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetTopicRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetTopicRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.GetTopicRequest.class, + com.google.pubsub.v1.GetTopicRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.GetTopicRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + topic_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_GetTopicRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.GetTopicRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.GetTopicRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.GetTopicRequest build() { + com.google.pubsub.v1.GetTopicRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.GetTopicRequest buildPartial() { + com.google.pubsub.v1.GetTopicRequest result = new com.google.pubsub.v1.GetTopicRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.GetTopicRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.topic_ = topic_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.GetTopicRequest) { + return mergeFrom((com.google.pubsub.v1.GetTopicRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.GetTopicRequest other) { + if (other == com.google.pubsub.v1.GetTopicRequest.getDefaultInstance()) return this; + if (!other.getTopic().isEmpty()) { + topic_ = other.topic_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + topic_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object topic_ = ""; + + /** + * + * + *
+     * Required. The name of the topic to get.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the topic to get.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the topic to get.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The topic to set. + * @return This builder for chaining. + */ + public Builder setTopic(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + topic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the topic to get.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearTopic() { + topic_ = getDefaultInstance().getTopic(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the topic to get.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for topic to set. + * @return This builder for chaining. + */ + public Builder setTopicBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + topic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.GetTopicRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.GetTopicRequest) + private static final com.google.pubsub.v1.GetTopicRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.GetTopicRequest(); + } + + public static com.google.pubsub.v1.GetTopicRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GetTopicRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.GetTopicRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetTopicRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetTopicRequestOrBuilder.java new file mode 100644 index 000000000000..29713e8fcb0d --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/GetTopicRequestOrBuilder.java @@ -0,0 +1,60 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface GetTopicRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.GetTopicRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the topic to get.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + java.lang.String getTopic(); + + /** + * + * + *
+   * Required. The name of the topic to get.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + com.google.protobuf.ByteString getTopicBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/IngestionDataSourceSettings.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/IngestionDataSourceSettings.java new file mode 100644 index 000000000000..2eb76d04be59 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/IngestionDataSourceSettings.java @@ -0,0 +1,15117 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Settings for an ingestion data source on a topic.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings} + */ +@com.google.protobuf.Generated +public final class IngestionDataSourceSettings extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionDataSourceSettings) + IngestionDataSourceSettingsOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "IngestionDataSourceSettings"); + } + + // Use IngestionDataSourceSettings.newBuilder() to construct. + private IngestionDataSourceSettings(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private IngestionDataSourceSettings() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.class, + com.google.pubsub.v1.IngestionDataSourceSettings.Builder.class); + } + + public interface AwsKinesisOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Kinesis
+     * ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + int getStateValue(); + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Kinesis
+     * ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State getState(); + + /** + * + * + *
+     * Required. The Kinesis stream ARN to ingest data from.
+     * 
+ * + * string stream_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The streamArn. + */ + java.lang.String getStreamArn(); + + /** + * + * + *
+     * Required. The Kinesis stream ARN to ingest data from.
+     * 
+ * + * string stream_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for streamArn. + */ + com.google.protobuf.ByteString getStreamArnBytes(); + + /** + * + * + *
+     * Required. The Kinesis consumer ARN to used for ingestion in Enhanced
+     * Fan-Out mode. The consumer must be already created and ready to be used.
+     * 
+ * + * string consumer_arn = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The consumerArn. + */ + java.lang.String getConsumerArn(); + + /** + * + * + *
+     * Required. The Kinesis consumer ARN to used for ingestion in Enhanced
+     * Fan-Out mode. The consumer must be already created and ready to be used.
+     * 
+ * + * string consumer_arn = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for consumerArn. + */ + com.google.protobuf.ByteString getConsumerArnBytes(); + + /** + * + * + *
+     * Required. AWS role ARN to be used for Federated Identity authentication
+     * with Kinesis. Check the Pub/Sub docs for how to set up this role and the
+     * required permissions that need to be attached to it.
+     * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The awsRoleArn. + */ + java.lang.String getAwsRoleArn(); + + /** + * + * + *
+     * Required. AWS role ARN to be used for Federated Identity authentication
+     * with Kinesis. Check the Pub/Sub docs for how to set up this role and the
+     * required permissions that need to be attached to it.
+     * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for awsRoleArn. + */ + com.google.protobuf.ByteString getAwsRoleArnBytes(); + + /** + * + * + *
+     * Required. The GCP service account to be used for Federated Identity
+     * authentication with Kinesis (via a `AssumeRoleWithWebIdentity` call for
+     * the provided role). The `aws_role_arn` must be set up with
+     * `accounts.google.com:sub` equals to this service account number.
+     * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The gcpServiceAccount. + */ + java.lang.String getGcpServiceAccount(); + + /** + * + * + *
+     * Required. The GCP service account to be used for Federated Identity
+     * authentication with Kinesis (via a `AssumeRoleWithWebIdentity` call for
+     * the provided role). The `aws_role_arn` must be set up with
+     * `accounts.google.com:sub` equals to this service account number.
+     * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for gcpServiceAccount. + */ + com.google.protobuf.ByteString getGcpServiceAccountBytes(); + } + + /** + * + * + *
+   * Ingestion settings for Amazon Kinesis Data Streams.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis} + */ + public static final class AwsKinesis extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) + AwsKinesisOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AwsKinesis"); + } + + // Use AwsKinesis.newBuilder() to construct. + private AwsKinesis(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AwsKinesis() { + state_ = 0; + streamArn_ = ""; + consumerArn_ = ""; + awsRoleArn_ = ""; + gcpServiceAccount_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsKinesis_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsKinesis_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.class, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.Builder.class); + } + + /** + * + * + *
+     * Possible states for ingestion from Amazon Kinesis Data Streams.
+     * 
+ * + * Protobuf enum {@code google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State} + */ + public enum State implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+       * Default value. This value is unused.
+       * 
+ * + * STATE_UNSPECIFIED = 0; + */ + STATE_UNSPECIFIED(0), + /** + * + * + *
+       * Ingestion is active.
+       * 
+ * + * ACTIVE = 1; + */ + ACTIVE(1), + /** + * + * + *
+       * Permission denied encountered while consuming data from Kinesis.
+       * This can happen if:
+       * - The provided `aws_role_arn` does not exist or does not have the
+       * appropriate permissions attached.
+       * - The provided `aws_role_arn` is not set up properly for Identity
+       * Federation using `gcp_service_account`.
+       * - The Pub/Sub SA is not granted the
+       * `iam.serviceAccounts.getOpenIdToken` permission on
+       * `gcp_service_account`.
+       * 
+ * + * KINESIS_PERMISSION_DENIED = 2; + */ + KINESIS_PERMISSION_DENIED(2), + /** + * + * + *
+       * Permission denied encountered while publishing to the topic. This can
+       * happen if the Pub/Sub SA has not been granted the [appropriate publish
+       * permissions](https://cloud.google.com/pubsub/docs/access-control#pubsub.publisher)
+       * 
+ * + * PUBLISH_PERMISSION_DENIED = 3; + */ + PUBLISH_PERMISSION_DENIED(3), + /** + * + * + *
+       * The Kinesis stream does not exist.
+       * 
+ * + * STREAM_NOT_FOUND = 4; + */ + STREAM_NOT_FOUND(4), + /** + * + * + *
+       * The Kinesis consumer does not exist.
+       * 
+ * + * CONSUMER_NOT_FOUND = 5; + */ + CONSUMER_NOT_FOUND(5), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + + /** + * + * + *
+       * Default value. This value is unused.
+       * 
+ * + * STATE_UNSPECIFIED = 0; + */ + public static final int STATE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+       * Ingestion is active.
+       * 
+ * + * ACTIVE = 1; + */ + public static final int ACTIVE_VALUE = 1; + + /** + * + * + *
+       * Permission denied encountered while consuming data from Kinesis.
+       * This can happen if:
+       * - The provided `aws_role_arn` does not exist or does not have the
+       * appropriate permissions attached.
+       * - The provided `aws_role_arn` is not set up properly for Identity
+       * Federation using `gcp_service_account`.
+       * - The Pub/Sub SA is not granted the
+       * `iam.serviceAccounts.getOpenIdToken` permission on
+       * `gcp_service_account`.
+       * 
+ * + * KINESIS_PERMISSION_DENIED = 2; + */ + public static final int KINESIS_PERMISSION_DENIED_VALUE = 2; + + /** + * + * + *
+       * Permission denied encountered while publishing to the topic. This can
+       * happen if the Pub/Sub SA has not been granted the [appropriate publish
+       * permissions](https://cloud.google.com/pubsub/docs/access-control#pubsub.publisher)
+       * 
+ * + * PUBLISH_PERMISSION_DENIED = 3; + */ + public static final int PUBLISH_PERMISSION_DENIED_VALUE = 3; + + /** + * + * + *
+       * The Kinesis stream does not exist.
+       * 
+ * + * STREAM_NOT_FOUND = 4; + */ + public static final int STREAM_NOT_FOUND_VALUE = 4; + + /** + * + * + *
+       * The Kinesis consumer does not exist.
+       * 
+ * + * CONSUMER_NOT_FOUND = 5; + */ + public static final int CONSUMER_NOT_FOUND_VALUE = 5; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static State valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static State forNumber(int value) { + switch (value) { + case 0: + return STATE_UNSPECIFIED; + case 1: + return ACTIVE; + case 2: + return KINESIS_PERMISSION_DENIED; + case 3: + return PUBLISH_PERMISSION_DENIED; + case 4: + return STREAM_NOT_FOUND; + case 5: + return CONSUMER_NOT_FOUND; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public State findValueByNumber(int number) { + return State.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.getDescriptor() + .getEnumTypes() + .get(0); + } + + private static final State[] VALUES = values(); + + public static State valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private State(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State) + } + + public static final int STATE_FIELD_NUMBER = 1; + private int state_ = 0; + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Kinesis
+     * ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Kinesis
+     * ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State getState() { + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State result = + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State.forNumber(state_); + return result == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State.UNRECOGNIZED + : result; + } + + public static final int STREAM_ARN_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object streamArn_ = ""; + + /** + * + * + *
+     * Required. The Kinesis stream ARN to ingest data from.
+     * 
+ * + * string stream_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The streamArn. + */ + @java.lang.Override + public java.lang.String getStreamArn() { + java.lang.Object ref = streamArn_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + streamArn_ = s; + return s; + } + } + + /** + * + * + *
+     * Required. The Kinesis stream ARN to ingest data from.
+     * 
+ * + * string stream_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for streamArn. + */ + @java.lang.Override + public com.google.protobuf.ByteString getStreamArnBytes() { + java.lang.Object ref = streamArn_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + streamArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int CONSUMER_ARN_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object consumerArn_ = ""; + + /** + * + * + *
+     * Required. The Kinesis consumer ARN to used for ingestion in Enhanced
+     * Fan-Out mode. The consumer must be already created and ready to be used.
+     * 
+ * + * string consumer_arn = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The consumerArn. + */ + @java.lang.Override + public java.lang.String getConsumerArn() { + java.lang.Object ref = consumerArn_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + consumerArn_ = s; + return s; + } + } + + /** + * + * + *
+     * Required. The Kinesis consumer ARN to used for ingestion in Enhanced
+     * Fan-Out mode. The consumer must be already created and ready to be used.
+     * 
+ * + * string consumer_arn = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for consumerArn. + */ + @java.lang.Override + public com.google.protobuf.ByteString getConsumerArnBytes() { + java.lang.Object ref = consumerArn_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + consumerArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int AWS_ROLE_ARN_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private volatile java.lang.Object awsRoleArn_ = ""; + + /** + * + * + *
+     * Required. AWS role ARN to be used for Federated Identity authentication
+     * with Kinesis. Check the Pub/Sub docs for how to set up this role and the
+     * required permissions that need to be attached to it.
+     * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The awsRoleArn. + */ + @java.lang.Override + public java.lang.String getAwsRoleArn() { + java.lang.Object ref = awsRoleArn_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + awsRoleArn_ = s; + return s; + } + } + + /** + * + * + *
+     * Required. AWS role ARN to be used for Federated Identity authentication
+     * with Kinesis. Check the Pub/Sub docs for how to set up this role and the
+     * required permissions that need to be attached to it.
+     * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for awsRoleArn. + */ + @java.lang.Override + public com.google.protobuf.ByteString getAwsRoleArnBytes() { + java.lang.Object ref = awsRoleArn_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + awsRoleArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int GCP_SERVICE_ACCOUNT_FIELD_NUMBER = 5; + + @SuppressWarnings("serial") + private volatile java.lang.Object gcpServiceAccount_ = ""; + + /** + * + * + *
+     * Required. The GCP service account to be used for Federated Identity
+     * authentication with Kinesis (via a `AssumeRoleWithWebIdentity` call for
+     * the provided role). The `aws_role_arn` must be set up with
+     * `accounts.google.com:sub` equals to this service account number.
+     * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The gcpServiceAccount. + */ + @java.lang.Override + public java.lang.String getGcpServiceAccount() { + java.lang.Object ref = gcpServiceAccount_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + gcpServiceAccount_ = s; + return s; + } + } + + /** + * + * + *
+     * Required. The GCP service account to be used for Federated Identity
+     * authentication with Kinesis (via a `AssumeRoleWithWebIdentity` call for
+     * the provided role). The `aws_role_arn` must be set up with
+     * `accounts.google.com:sub` equals to this service account number.
+     * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for gcpServiceAccount. + */ + @java.lang.Override + public com.google.protobuf.ByteString getGcpServiceAccountBytes() { + java.lang.Object ref = gcpServiceAccount_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + gcpServiceAccount_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (state_ + != com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State.STATE_UNSPECIFIED + .getNumber()) { + output.writeEnum(1, state_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(streamArn_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, streamArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(consumerArn_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, consumerArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(awsRoleArn_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, awsRoleArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(gcpServiceAccount_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, gcpServiceAccount_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (state_ + != com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State.STATE_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, state_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(streamArn_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, streamArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(consumerArn_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, consumerArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(awsRoleArn_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, awsRoleArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(gcpServiceAccount_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, gcpServiceAccount_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis other = + (com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) obj; + + if (state_ != other.state_) return false; + if (!getStreamArn().equals(other.getStreamArn())) return false; + if (!getConsumerArn().equals(other.getConsumerArn())) return false; + if (!getAwsRoleArn().equals(other.getAwsRoleArn())) return false; + if (!getGcpServiceAccount().equals(other.getGcpServiceAccount())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + state_; + hash = (37 * hash) + STREAM_ARN_FIELD_NUMBER; + hash = (53 * hash) + getStreamArn().hashCode(); + hash = (37 * hash) + CONSUMER_ARN_FIELD_NUMBER; + hash = (53 * hash) + getConsumerArn().hashCode(); + hash = (37 * hash) + AWS_ROLE_ARN_FIELD_NUMBER; + hash = (53 * hash) + getAwsRoleArn().hashCode(); + hash = (37 * hash) + GCP_SERVICE_ACCOUNT_FIELD_NUMBER; + hash = (53 * hash) + getGcpServiceAccount().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Ingestion settings for Amazon Kinesis Data Streams.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesisOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsKinesis_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsKinesis_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.class, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.Builder.class); + } + + // Construct using com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + state_ = 0; + streamArn_ = ""; + consumerArn_ = ""; + awsRoleArn_ = ""; + gcpServiceAccount_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsKinesis_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis build() { + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis buildPartial() { + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis result = + new com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.state_ = state_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.streamArn_ = streamArn_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.consumerArn_ = consumerArn_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.awsRoleArn_ = awsRoleArn_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.gcpServiceAccount_ = gcpServiceAccount_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) { + return mergeFrom((com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis other) { + if (other + == com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.getDefaultInstance()) + return this; + if (other.state_ != 0) { + setStateValue(other.getStateValue()); + } + if (!other.getStreamArn().isEmpty()) { + streamArn_ = other.streamArn_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getConsumerArn().isEmpty()) { + consumerArn_ = other.consumerArn_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (!other.getAwsRoleArn().isEmpty()) { + awsRoleArn_ = other.awsRoleArn_; + bitField0_ |= 0x00000008; + onChanged(); + } + if (!other.getGcpServiceAccount().isEmpty()) { + gcpServiceAccount_ = other.gcpServiceAccount_; + bitField0_ |= 0x00000010; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + state_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + streamArn_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + consumerArn_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + awsRoleArn_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: + { + gcpServiceAccount_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000010; + break; + } // case 42 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private int state_ = 0; + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Kinesis
+       * ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Kinesis
+       * ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The enum numeric value on the wire for state to set. + * @return This builder for chaining. + */ + public Builder setStateValue(int value) { + state_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Kinesis
+       * ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State getState() { + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State result = + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State.forNumber(state_); + return result == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State.UNRECOGNIZED + : result; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Kinesis
+       * ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The state to set. + * @return This builder for chaining. + */ + public Builder setState( + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + state_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Kinesis
+       * ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearState() { + bitField0_ = (bitField0_ & ~0x00000001); + state_ = 0; + onChanged(); + return this; + } + + private java.lang.Object streamArn_ = ""; + + /** + * + * + *
+       * Required. The Kinesis stream ARN to ingest data from.
+       * 
+ * + * string stream_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The streamArn. + */ + public java.lang.String getStreamArn() { + java.lang.Object ref = streamArn_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + streamArn_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Required. The Kinesis stream ARN to ingest data from.
+       * 
+ * + * string stream_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for streamArn. + */ + public com.google.protobuf.ByteString getStreamArnBytes() { + java.lang.Object ref = streamArn_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + streamArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Required. The Kinesis stream ARN to ingest data from.
+       * 
+ * + * string stream_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The streamArn to set. + * @return This builder for chaining. + */ + public Builder setStreamArn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + streamArn_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The Kinesis stream ARN to ingest data from.
+       * 
+ * + * string stream_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearStreamArn() { + streamArn_ = getDefaultInstance().getStreamArn(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The Kinesis stream ARN to ingest data from.
+       * 
+ * + * string stream_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for streamArn to set. + * @return This builder for chaining. + */ + public Builder setStreamArnBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + streamArn_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object consumerArn_ = ""; + + /** + * + * + *
+       * Required. The Kinesis consumer ARN to used for ingestion in Enhanced
+       * Fan-Out mode. The consumer must be already created and ready to be used.
+       * 
+ * + * string consumer_arn = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The consumerArn. + */ + public java.lang.String getConsumerArn() { + java.lang.Object ref = consumerArn_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + consumerArn_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Required. The Kinesis consumer ARN to used for ingestion in Enhanced
+       * Fan-Out mode. The consumer must be already created and ready to be used.
+       * 
+ * + * string consumer_arn = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for consumerArn. + */ + public com.google.protobuf.ByteString getConsumerArnBytes() { + java.lang.Object ref = consumerArn_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + consumerArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Required. The Kinesis consumer ARN to used for ingestion in Enhanced
+       * Fan-Out mode. The consumer must be already created and ready to be used.
+       * 
+ * + * string consumer_arn = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The consumerArn to set. + * @return This builder for chaining. + */ + public Builder setConsumerArn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + consumerArn_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The Kinesis consumer ARN to used for ingestion in Enhanced
+       * Fan-Out mode. The consumer must be already created and ready to be used.
+       * 
+ * + * string consumer_arn = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearConsumerArn() { + consumerArn_ = getDefaultInstance().getConsumerArn(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The Kinesis consumer ARN to used for ingestion in Enhanced
+       * Fan-Out mode. The consumer must be already created and ready to be used.
+       * 
+ * + * string consumer_arn = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for consumerArn to set. + * @return This builder for chaining. + */ + public Builder setConsumerArnBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + consumerArn_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private java.lang.Object awsRoleArn_ = ""; + + /** + * + * + *
+       * Required. AWS role ARN to be used for Federated Identity authentication
+       * with Kinesis. Check the Pub/Sub docs for how to set up this role and the
+       * required permissions that need to be attached to it.
+       * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The awsRoleArn. + */ + public java.lang.String getAwsRoleArn() { + java.lang.Object ref = awsRoleArn_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + awsRoleArn_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Required. AWS role ARN to be used for Federated Identity authentication
+       * with Kinesis. Check the Pub/Sub docs for how to set up this role and the
+       * required permissions that need to be attached to it.
+       * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for awsRoleArn. + */ + public com.google.protobuf.ByteString getAwsRoleArnBytes() { + java.lang.Object ref = awsRoleArn_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + awsRoleArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Required. AWS role ARN to be used for Federated Identity authentication
+       * with Kinesis. Check the Pub/Sub docs for how to set up this role and the
+       * required permissions that need to be attached to it.
+       * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The awsRoleArn to set. + * @return This builder for chaining. + */ + public Builder setAwsRoleArn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + awsRoleArn_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. AWS role ARN to be used for Federated Identity authentication
+       * with Kinesis. Check the Pub/Sub docs for how to set up this role and the
+       * required permissions that need to be attached to it.
+       * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearAwsRoleArn() { + awsRoleArn_ = getDefaultInstance().getAwsRoleArn(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. AWS role ARN to be used for Federated Identity authentication
+       * with Kinesis. Check the Pub/Sub docs for how to set up this role and the
+       * required permissions that need to be attached to it.
+       * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for awsRoleArn to set. + * @return This builder for chaining. + */ + public Builder setAwsRoleArnBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + awsRoleArn_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + private java.lang.Object gcpServiceAccount_ = ""; + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with Kinesis (via a `AssumeRoleWithWebIdentity` call for
+       * the provided role). The `aws_role_arn` must be set up with
+       * `accounts.google.com:sub` equals to this service account number.
+       * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The gcpServiceAccount. + */ + public java.lang.String getGcpServiceAccount() { + java.lang.Object ref = gcpServiceAccount_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + gcpServiceAccount_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with Kinesis (via a `AssumeRoleWithWebIdentity` call for
+       * the provided role). The `aws_role_arn` must be set up with
+       * `accounts.google.com:sub` equals to this service account number.
+       * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for gcpServiceAccount. + */ + public com.google.protobuf.ByteString getGcpServiceAccountBytes() { + java.lang.Object ref = gcpServiceAccount_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + gcpServiceAccount_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with Kinesis (via a `AssumeRoleWithWebIdentity` call for
+       * the provided role). The `aws_role_arn` must be set up with
+       * `accounts.google.com:sub` equals to this service account number.
+       * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The gcpServiceAccount to set. + * @return This builder for chaining. + */ + public Builder setGcpServiceAccount(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + gcpServiceAccount_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with Kinesis (via a `AssumeRoleWithWebIdentity` call for
+       * the provided role). The `aws_role_arn` must be set up with
+       * `accounts.google.com:sub` equals to this service account number.
+       * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearGcpServiceAccount() { + gcpServiceAccount_ = getDefaultInstance().getGcpServiceAccount(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with Kinesis (via a `AssumeRoleWithWebIdentity` call for
+       * the provided role). The `aws_role_arn` must be set up with
+       * `accounts.google.com:sub` equals to this service account number.
+       * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for gcpServiceAccount to set. + * @return This builder for chaining. + */ + public Builder setGcpServiceAccountBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + gcpServiceAccount_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) + private static final com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis(); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AwsKinesis parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface CloudStorageOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Cloud
+     * Storage ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + int getStateValue(); + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Cloud
+     * Storage ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State getState(); + + /** + * + * + *
+     * Optional. Cloud Storage bucket. The bucket name must be without any
+     * prefix like "gs://". See the [bucket naming requirements]
+     * (https://cloud.google.com/storage/docs/buckets#naming).
+     * 
+ * + * string bucket = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bucket. + */ + java.lang.String getBucket(); + + /** + * + * + *
+     * Optional. Cloud Storage bucket. The bucket name must be without any
+     * prefix like "gs://". See the [bucket naming requirements]
+     * (https://cloud.google.com/storage/docs/buckets#naming).
+     * 
+ * + * string bucket = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for bucket. + */ + com.google.protobuf.ByteString getBucketBytes(); + + /** + * + * + *
+     * Optional. Data from Cloud Storage will be interpreted as text.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the textFormat field is set. + */ + boolean hasTextFormat(); + + /** + * + * + *
+     * Optional. Data from Cloud Storage will be interpreted as text.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The textFormat. + */ + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat getTextFormat(); + + /** + * + * + *
+     * Optional. Data from Cloud Storage will be interpreted as text.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormatOrBuilder + getTextFormatOrBuilder(); + + /** + * + * + *
+     * Optional. Data from Cloud Storage will be interpreted in Avro format.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the avroFormat field is set. + */ + boolean hasAvroFormat(); + + /** + * + * + *
+     * Optional. Data from Cloud Storage will be interpreted in Avro format.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The avroFormat. + */ + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat getAvroFormat(); + + /** + * + * + *
+     * Optional. Data from Cloud Storage will be interpreted in Avro format.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormatOrBuilder + getAvroFormatOrBuilder(); + + /** + * + * + *
+     * Optional. It will be assumed data from Cloud Storage was written via
+     * [Cloud Storage
+     * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the pubsubAvroFormat field is set. + */ + boolean hasPubsubAvroFormat(); + + /** + * + * + *
+     * Optional. It will be assumed data from Cloud Storage was written via
+     * [Cloud Storage
+     * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The pubsubAvroFormat. + */ + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + getPubsubAvroFormat(); + + /** + * + * + *
+     * Optional. It will be assumed data from Cloud Storage was written via
+     * [Cloud Storage
+     * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormatOrBuilder + getPubsubAvroFormatOrBuilder(); + + /** + * + * + *
+     * Optional. Only objects with a larger or equal creation timestamp will be
+     * ingested.
+     * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the minimumObjectCreateTime field is set. + */ + boolean hasMinimumObjectCreateTime(); + + /** + * + * + *
+     * Optional. Only objects with a larger or equal creation timestamp will be
+     * ingested.
+     * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The minimumObjectCreateTime. + */ + com.google.protobuf.Timestamp getMinimumObjectCreateTime(); + + /** + * + * + *
+     * Optional. Only objects with a larger or equal creation timestamp will be
+     * ingested.
+     * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.protobuf.TimestampOrBuilder getMinimumObjectCreateTimeOrBuilder(); + + /** + * + * + *
+     * Optional. Glob pattern used to match objects that will be ingested. If
+     * unset, all objects will be ingested. See the [supported
+     * patterns](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob).
+     * 
+ * + * string match_glob = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The matchGlob. + */ + java.lang.String getMatchGlob(); + + /** + * + * + *
+     * Optional. Glob pattern used to match objects that will be ingested. If
+     * unset, all objects will be ingested. See the [supported
+     * patterns](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob).
+     * 
+ * + * string match_glob = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for matchGlob. + */ + com.google.protobuf.ByteString getMatchGlobBytes(); + + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.InputFormatCase + getInputFormatCase(); + } + + /** + * + * + *
+   * Ingestion settings for Cloud Storage.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.CloudStorage} + */ + public static final class CloudStorage extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) + CloudStorageOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CloudStorage"); + } + + // Use CloudStorage.newBuilder() to construct. + private CloudStorage(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private CloudStorage() { + state_ = 0; + bucket_ = ""; + matchGlob_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.class, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.Builder.class); + } + + /** + * + * + *
+     * Possible states for ingestion from Cloud Storage.
+     * 
+ * + * Protobuf enum {@code google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State} + */ + public enum State implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+       * Default value. This value is unused.
+       * 
+ * + * STATE_UNSPECIFIED = 0; + */ + STATE_UNSPECIFIED(0), + /** + * + * + *
+       * Ingestion is active.
+       * 
+ * + * ACTIVE = 1; + */ + ACTIVE(1), + /** + * + * + *
+       * Permission denied encountered while calling the Cloud Storage API. This
+       * can happen if the Pub/Sub SA has not been granted the
+       * [appropriate
+       * permissions](https://cloud.google.com/storage/docs/access-control/iam-permissions):
+       * - storage.objects.list: to list the objects in a bucket.
+       * - storage.objects.get: to read the objects in a bucket.
+       * - storage.buckets.get: to verify the bucket exists.
+       * 
+ * + * CLOUD_STORAGE_PERMISSION_DENIED = 2; + */ + CLOUD_STORAGE_PERMISSION_DENIED(2), + /** + * + * + *
+       * Permission denied encountered while publishing to the topic. This can
+       * happen if the Pub/Sub SA has not been granted the [appropriate publish
+       * permissions](https://cloud.google.com/pubsub/docs/access-control#pubsub.publisher)
+       * 
+ * + * PUBLISH_PERMISSION_DENIED = 3; + */ + PUBLISH_PERMISSION_DENIED(3), + /** + * + * + *
+       * The provided Cloud Storage bucket doesn't exist.
+       * 
+ * + * BUCKET_NOT_FOUND = 4; + */ + BUCKET_NOT_FOUND(4), + /** + * + * + *
+       * The Cloud Storage bucket has too many objects, ingestion will be
+       * paused.
+       * 
+ * + * TOO_MANY_OBJECTS = 5; + */ + TOO_MANY_OBJECTS(5), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + + /** + * + * + *
+       * Default value. This value is unused.
+       * 
+ * + * STATE_UNSPECIFIED = 0; + */ + public static final int STATE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+       * Ingestion is active.
+       * 
+ * + * ACTIVE = 1; + */ + public static final int ACTIVE_VALUE = 1; + + /** + * + * + *
+       * Permission denied encountered while calling the Cloud Storage API. This
+       * can happen if the Pub/Sub SA has not been granted the
+       * [appropriate
+       * permissions](https://cloud.google.com/storage/docs/access-control/iam-permissions):
+       * - storage.objects.list: to list the objects in a bucket.
+       * - storage.objects.get: to read the objects in a bucket.
+       * - storage.buckets.get: to verify the bucket exists.
+       * 
+ * + * CLOUD_STORAGE_PERMISSION_DENIED = 2; + */ + public static final int CLOUD_STORAGE_PERMISSION_DENIED_VALUE = 2; + + /** + * + * + *
+       * Permission denied encountered while publishing to the topic. This can
+       * happen if the Pub/Sub SA has not been granted the [appropriate publish
+       * permissions](https://cloud.google.com/pubsub/docs/access-control#pubsub.publisher)
+       * 
+ * + * PUBLISH_PERMISSION_DENIED = 3; + */ + public static final int PUBLISH_PERMISSION_DENIED_VALUE = 3; + + /** + * + * + *
+       * The provided Cloud Storage bucket doesn't exist.
+       * 
+ * + * BUCKET_NOT_FOUND = 4; + */ + public static final int BUCKET_NOT_FOUND_VALUE = 4; + + /** + * + * + *
+       * The Cloud Storage bucket has too many objects, ingestion will be
+       * paused.
+       * 
+ * + * TOO_MANY_OBJECTS = 5; + */ + public static final int TOO_MANY_OBJECTS_VALUE = 5; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static State valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static State forNumber(int value) { + switch (value) { + case 0: + return STATE_UNSPECIFIED; + case 1: + return ACTIVE; + case 2: + return CLOUD_STORAGE_PERMISSION_DENIED; + case 3: + return PUBLISH_PERMISSION_DENIED; + case 4: + return BUCKET_NOT_FOUND; + case 5: + return TOO_MANY_OBJECTS; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public State findValueByNumber(int number) { + return State.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.getDescriptor() + .getEnumTypes() + .get(0); + } + + private static final State[] VALUES = values(); + + public static State valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private State(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State) + } + + public interface TextFormatOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+       * Optional. When unset, '\n' is used.
+       * 
+ * + * optional string delimiter = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return Whether the delimiter field is set. + */ + boolean hasDelimiter(); + + /** + * + * + *
+       * Optional. When unset, '\n' is used.
+       * 
+ * + * optional string delimiter = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The delimiter. + */ + java.lang.String getDelimiter(); + + /** + * + * + *
+       * Optional. When unset, '\n' is used.
+       * 
+ * + * optional string delimiter = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for delimiter. + */ + com.google.protobuf.ByteString getDelimiterBytes(); + } + + /** + * + * + *
+     * Configuration for reading Cloud Storage data in text format. Each line of
+     * text as specified by the delimiter will be set to the `data` field of a
+     * Pub/Sub message.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat} + */ + public static final class TextFormat extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) + TextFormatOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "TextFormat"); + } + + // Use TextFormat.newBuilder() to construct. + private TextFormat(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private TextFormat() { + delimiter_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_TextFormat_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_TextFormat_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat.class, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat.Builder + .class); + } + + private int bitField0_; + public static final int DELIMITER_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object delimiter_ = ""; + + /** + * + * + *
+       * Optional. When unset, '\n' is used.
+       * 
+ * + * optional string delimiter = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return Whether the delimiter field is set. + */ + @java.lang.Override + public boolean hasDelimiter() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+       * Optional. When unset, '\n' is used.
+       * 
+ * + * optional string delimiter = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The delimiter. + */ + @java.lang.Override + public java.lang.String getDelimiter() { + java.lang.Object ref = delimiter_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + delimiter_ = s; + return s; + } + } + + /** + * + * + *
+       * Optional. When unset, '\n' is used.
+       * 
+ * + * optional string delimiter = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for delimiter. + */ + @java.lang.Override + public com.google.protobuf.ByteString getDelimiterBytes() { + java.lang.Object ref = delimiter_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + delimiter_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, delimiter_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, delimiter_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj + instanceof com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat other = + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) obj; + + if (hasDelimiter() != other.hasDelimiter()) return false; + if (hasDelimiter()) { + if (!getDelimiter().equals(other.getDelimiter())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasDelimiter()) { + hash = (37 * hash) + DELIMITER_FIELD_NUMBER; + hash = (53 * hash) + getDelimiter().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + parseFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+       * Configuration for reading Cloud Storage data in text format. Each line of
+       * text as specified by the delimiter will be set to the `data` field of a
+       * Pub/Sub message.
+       * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat} + */ + public static final class Builder + extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormatOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_TextFormat_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_TextFormat_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat.class, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat.Builder + .class); + } + + // Construct using + // com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + delimiter_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_TextFormat_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat build() { + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + buildPartial() { + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat result = + new com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.delimiter_ = delimiter_; + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other + instanceof com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) { + return mergeFrom( + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat other) { + if (other + == com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + .getDefaultInstance()) return this; + if (other.hasDelimiter()) { + delimiter_ = other.delimiter_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + delimiter_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object delimiter_ = ""; + + /** + * + * + *
+         * Optional. When unset, '\n' is used.
+         * 
+ * + * optional string delimiter = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return Whether the delimiter field is set. + */ + public boolean hasDelimiter() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+         * Optional. When unset, '\n' is used.
+         * 
+ * + * optional string delimiter = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The delimiter. + */ + public java.lang.String getDelimiter() { + java.lang.Object ref = delimiter_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + delimiter_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+         * Optional. When unset, '\n' is used.
+         * 
+ * + * optional string delimiter = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for delimiter. + */ + public com.google.protobuf.ByteString getDelimiterBytes() { + java.lang.Object ref = delimiter_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + delimiter_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+         * Optional. When unset, '\n' is used.
+         * 
+ * + * optional string delimiter = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The delimiter to set. + * @return This builder for chaining. + */ + public Builder setDelimiter(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + delimiter_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+         * Optional. When unset, '\n' is used.
+         * 
+ * + * optional string delimiter = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearDelimiter() { + delimiter_ = getDefaultInstance().getDelimiter(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+         * Optional. When unset, '\n' is used.
+         * 
+ * + * optional string delimiter = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for delimiter to set. + * @return This builder for chaining. + */ + public Builder setDelimiterBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + delimiter_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) + private static final com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = + new com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat(); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public TextFormat parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface AvroFormatOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) + com.google.protobuf.MessageOrBuilder {} + + /** + * + * + *
+     * Configuration for reading Cloud Storage data in Avro binary format. The
+     * bytes of each object will be set to the `data` field of a Pub/Sub
+     * message.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat} + */ + public static final class AvroFormat extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) + AvroFormatOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AvroFormat"); + } + + // Use AvroFormat.newBuilder() to construct. + private AvroFormat(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AvroFormat() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_AvroFormat_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_AvroFormat_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat.class, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat.Builder + .class); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj + instanceof com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat other = + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + parseFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+       * Configuration for reading Cloud Storage data in Avro binary format. The
+       * bytes of each object will be set to the `data` field of a Pub/Sub
+       * message.
+       * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat} + */ + public static final class Builder + extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormatOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_AvroFormat_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_AvroFormat_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat.class, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat.Builder + .class); + } + + // Construct using + // com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_AvroFormat_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat build() { + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + buildPartial() { + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat result = + new com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other + instanceof com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) { + return mergeFrom( + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat other) { + if (other + == com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + .getDefaultInstance()) return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) + private static final com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = + new com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat(); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AvroFormat parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface PubSubAvroFormatOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) + com.google.protobuf.MessageOrBuilder {} + + /** + * + * + *
+     * Configuration for reading Cloud Storage data written via [Cloud Storage
+     * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage). The
+     * data and attributes fields of the originally exported Pub/Sub message
+     * will be restored when publishing.
+     * 
+ * + * Protobuf type {@code + * google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat} + */ + public static final class PubSubAvroFormat extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) + PubSubAvroFormatOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PubSubAvroFormat"); + } + + // Use PubSubAvroFormat.newBuilder() to construct. + private PubSubAvroFormat(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private PubSubAvroFormat() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_PubSubAvroFormat_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_PubSubAvroFormat_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .class, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .Builder.class); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj + instanceof + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat other = + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + parseFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+       * Configuration for reading Cloud Storage data written via [Cloud Storage
+       * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage). The
+       * data and attributes fields of the originally exported Pub/Sub message
+       * will be restored when publishing.
+       * 
+ * + * Protobuf type {@code + * google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat} + */ + public static final class Builder + extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormatOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_PubSubAvroFormat_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_PubSubAvroFormat_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .class, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .Builder.class); + } + + // Construct using + // com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_PubSubAvroFormat_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + build() { + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + buildPartial() { + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat result = + new com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat( + this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other + instanceof + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) { + return mergeFrom( + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) + other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat other) { + if (other + == com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .getDefaultInstance()) return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) + private static final com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage + .PubSubAvroFormat + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = + new com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat(); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PubSubAvroFormat parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int bitField0_; + private int inputFormatCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object inputFormat_; + + public enum InputFormatCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + TEXT_FORMAT(3), + AVRO_FORMAT(4), + PUBSUB_AVRO_FORMAT(5), + INPUTFORMAT_NOT_SET(0); + private final int value; + + private InputFormatCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static InputFormatCase valueOf(int value) { + return forNumber(value); + } + + public static InputFormatCase forNumber(int value) { + switch (value) { + case 3: + return TEXT_FORMAT; + case 4: + return AVRO_FORMAT; + case 5: + return PUBSUB_AVRO_FORMAT; + case 0: + return INPUTFORMAT_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public InputFormatCase getInputFormatCase() { + return InputFormatCase.forNumber(inputFormatCase_); + } + + public static final int STATE_FIELD_NUMBER = 1; + private int state_ = 0; + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Cloud
+     * Storage ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Cloud
+     * Storage ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State getState() { + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State result = + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State.forNumber(state_); + return result == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State.UNRECOGNIZED + : result; + } + + public static final int BUCKET_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object bucket_ = ""; + + /** + * + * + *
+     * Optional. Cloud Storage bucket. The bucket name must be without any
+     * prefix like "gs://". See the [bucket naming requirements]
+     * (https://cloud.google.com/storage/docs/buckets#naming).
+     * 
+ * + * string bucket = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bucket. + */ + @java.lang.Override + public java.lang.String getBucket() { + java.lang.Object ref = bucket_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + bucket_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. Cloud Storage bucket. The bucket name must be without any
+     * prefix like "gs://". See the [bucket naming requirements]
+     * (https://cloud.google.com/storage/docs/buckets#naming).
+     * 
+ * + * string bucket = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for bucket. + */ + @java.lang.Override + public com.google.protobuf.ByteString getBucketBytes() { + java.lang.Object ref = bucket_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + bucket_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TEXT_FORMAT_FIELD_NUMBER = 3; + + /** + * + * + *
+     * Optional. Data from Cloud Storage will be interpreted as text.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the textFormat field is set. + */ + @java.lang.Override + public boolean hasTextFormat() { + return inputFormatCase_ == 3; + } + + /** + * + * + *
+     * Optional. Data from Cloud Storage will be interpreted as text.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The textFormat. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + getTextFormat() { + if (inputFormatCase_ == 3) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) + inputFormat_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + .getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. Data from Cloud Storage will be interpreted as text.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormatOrBuilder + getTextFormatOrBuilder() { + if (inputFormatCase_ == 3) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) + inputFormat_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + .getDefaultInstance(); + } + + public static final int AVRO_FORMAT_FIELD_NUMBER = 4; + + /** + * + * + *
+     * Optional. Data from Cloud Storage will be interpreted in Avro format.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the avroFormat field is set. + */ + @java.lang.Override + public boolean hasAvroFormat() { + return inputFormatCase_ == 4; + } + + /** + * + * + *
+     * Optional. Data from Cloud Storage will be interpreted in Avro format.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The avroFormat. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + getAvroFormat() { + if (inputFormatCase_ == 4) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) + inputFormat_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + .getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. Data from Cloud Storage will be interpreted in Avro format.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormatOrBuilder + getAvroFormatOrBuilder() { + if (inputFormatCase_ == 4) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) + inputFormat_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + .getDefaultInstance(); + } + + public static final int PUBSUB_AVRO_FORMAT_FIELD_NUMBER = 5; + + /** + * + * + *
+     * Optional. It will be assumed data from Cloud Storage was written via
+     * [Cloud Storage
+     * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the pubsubAvroFormat field is set. + */ + @java.lang.Override + public boolean hasPubsubAvroFormat() { + return inputFormatCase_ == 5; + } + + /** + * + * + *
+     * Optional. It will be assumed data from Cloud Storage was written via
+     * [Cloud Storage
+     * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The pubsubAvroFormat. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + getPubsubAvroFormat() { + if (inputFormatCase_ == 5) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) + inputFormat_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. It will be assumed data from Cloud Storage was written via
+     * [Cloud Storage
+     * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormatOrBuilder + getPubsubAvroFormatOrBuilder() { + if (inputFormatCase_ == 5) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) + inputFormat_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .getDefaultInstance(); + } + + public static final int MINIMUM_OBJECT_CREATE_TIME_FIELD_NUMBER = 6; + private com.google.protobuf.Timestamp minimumObjectCreateTime_; + + /** + * + * + *
+     * Optional. Only objects with a larger or equal creation timestamp will be
+     * ingested.
+     * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the minimumObjectCreateTime field is set. + */ + @java.lang.Override + public boolean hasMinimumObjectCreateTime() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+     * Optional. Only objects with a larger or equal creation timestamp will be
+     * ingested.
+     * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The minimumObjectCreateTime. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getMinimumObjectCreateTime() { + return minimumObjectCreateTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : minimumObjectCreateTime_; + } + + /** + * + * + *
+     * Optional. Only objects with a larger or equal creation timestamp will be
+     * ingested.
+     * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getMinimumObjectCreateTimeOrBuilder() { + return minimumObjectCreateTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : minimumObjectCreateTime_; + } + + public static final int MATCH_GLOB_FIELD_NUMBER = 9; + + @SuppressWarnings("serial") + private volatile java.lang.Object matchGlob_ = ""; + + /** + * + * + *
+     * Optional. Glob pattern used to match objects that will be ingested. If
+     * unset, all objects will be ingested. See the [supported
+     * patterns](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob).
+     * 
+ * + * string match_glob = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The matchGlob. + */ + @java.lang.Override + public java.lang.String getMatchGlob() { + java.lang.Object ref = matchGlob_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + matchGlob_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. Glob pattern used to match objects that will be ingested. If
+     * unset, all objects will be ingested. See the [supported
+     * patterns](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob).
+     * 
+ * + * string match_glob = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for matchGlob. + */ + @java.lang.Override + public com.google.protobuf.ByteString getMatchGlobBytes() { + java.lang.Object ref = matchGlob_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + matchGlob_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (state_ + != com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State.STATE_UNSPECIFIED + .getNumber()) { + output.writeEnum(1, state_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(bucket_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, bucket_); + } + if (inputFormatCase_ == 3) { + output.writeMessage( + 3, + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) + inputFormat_); + } + if (inputFormatCase_ == 4) { + output.writeMessage( + 4, + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) + inputFormat_); + } + if (inputFormatCase_ == 5) { + output.writeMessage( + 5, + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) + inputFormat_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(6, getMinimumObjectCreateTime()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(matchGlob_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 9, matchGlob_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (state_ + != com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State.STATE_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, state_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(bucket_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, bucket_); + } + if (inputFormatCase_ == 3) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 3, + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) + inputFormat_); + } + if (inputFormatCase_ == 4) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 4, + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) + inputFormat_); + } + if (inputFormatCase_ == 5) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 5, + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) + inputFormat_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 6, getMinimumObjectCreateTime()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(matchGlob_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(9, matchGlob_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage other = + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) obj; + + if (state_ != other.state_) return false; + if (!getBucket().equals(other.getBucket())) return false; + if (hasMinimumObjectCreateTime() != other.hasMinimumObjectCreateTime()) return false; + if (hasMinimumObjectCreateTime()) { + if (!getMinimumObjectCreateTime().equals(other.getMinimumObjectCreateTime())) return false; + } + if (!getMatchGlob().equals(other.getMatchGlob())) return false; + if (!getInputFormatCase().equals(other.getInputFormatCase())) return false; + switch (inputFormatCase_) { + case 3: + if (!getTextFormat().equals(other.getTextFormat())) return false; + break; + case 4: + if (!getAvroFormat().equals(other.getAvroFormat())) return false; + break; + case 5: + if (!getPubsubAvroFormat().equals(other.getPubsubAvroFormat())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + state_; + hash = (37 * hash) + BUCKET_FIELD_NUMBER; + hash = (53 * hash) + getBucket().hashCode(); + if (hasMinimumObjectCreateTime()) { + hash = (37 * hash) + MINIMUM_OBJECT_CREATE_TIME_FIELD_NUMBER; + hash = (53 * hash) + getMinimumObjectCreateTime().hashCode(); + } + hash = (37 * hash) + MATCH_GLOB_FIELD_NUMBER; + hash = (53 * hash) + getMatchGlob().hashCode(); + switch (inputFormatCase_) { + case 3: + hash = (37 * hash) + TEXT_FORMAT_FIELD_NUMBER; + hash = (53 * hash) + getTextFormat().hashCode(); + break; + case 4: + hash = (37 * hash) + AVRO_FORMAT_FIELD_NUMBER; + hash = (53 * hash) + getAvroFormat().hashCode(); + break; + case 5: + hash = (37 * hash) + PUBSUB_AVRO_FORMAT_FIELD_NUMBER; + hash = (53 * hash) + getPubsubAvroFormat().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Ingestion settings for Cloud Storage.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.CloudStorage} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorageOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.class, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.Builder.class); + } + + // Construct using com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetMinimumObjectCreateTimeFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + state_ = 0; + bucket_ = ""; + if (textFormatBuilder_ != null) { + textFormatBuilder_.clear(); + } + if (avroFormatBuilder_ != null) { + avroFormatBuilder_.clear(); + } + if (pubsubAvroFormatBuilder_ != null) { + pubsubAvroFormatBuilder_.clear(); + } + minimumObjectCreateTime_ = null; + if (minimumObjectCreateTimeBuilder_ != null) { + minimumObjectCreateTimeBuilder_.dispose(); + minimumObjectCreateTimeBuilder_ = null; + } + matchGlob_ = ""; + inputFormatCase_ = 0; + inputFormat_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage build() { + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage buildPartial() { + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage result = + new com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.state_ = state_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.bucket_ = bucket_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000020) != 0)) { + result.minimumObjectCreateTime_ = + minimumObjectCreateTimeBuilder_ == null + ? minimumObjectCreateTime_ + : minimumObjectCreateTimeBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.matchGlob_ = matchGlob_; + } + result.bitField0_ |= to_bitField0_; + } + + private void buildPartialOneofs( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage result) { + result.inputFormatCase_ = inputFormatCase_; + result.inputFormat_ = this.inputFormat_; + if (inputFormatCase_ == 3 && textFormatBuilder_ != null) { + result.inputFormat_ = textFormatBuilder_.build(); + } + if (inputFormatCase_ == 4 && avroFormatBuilder_ != null) { + result.inputFormat_ = avroFormatBuilder_.build(); + } + if (inputFormatCase_ == 5 && pubsubAvroFormatBuilder_ != null) { + result.inputFormat_ = pubsubAvroFormatBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) { + return mergeFrom((com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage other) { + if (other + == com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.getDefaultInstance()) + return this; + if (other.state_ != 0) { + setStateValue(other.getStateValue()); + } + if (!other.getBucket().isEmpty()) { + bucket_ = other.bucket_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (other.hasMinimumObjectCreateTime()) { + mergeMinimumObjectCreateTime(other.getMinimumObjectCreateTime()); + } + if (!other.getMatchGlob().isEmpty()) { + matchGlob_ = other.matchGlob_; + bitField0_ |= 0x00000040; + onChanged(); + } + switch (other.getInputFormatCase()) { + case TEXT_FORMAT: + { + mergeTextFormat(other.getTextFormat()); + break; + } + case AVRO_FORMAT: + { + mergeAvroFormat(other.getAvroFormat()); + break; + } + case PUBSUB_AVRO_FORMAT: + { + mergePubsubAvroFormat(other.getPubsubAvroFormat()); + break; + } + case INPUTFORMAT_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + state_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + bucket_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + input.readMessage( + internalGetTextFormatFieldBuilder().getBuilder(), extensionRegistry); + inputFormatCase_ = 3; + break; + } // case 26 + case 34: + { + input.readMessage( + internalGetAvroFormatFieldBuilder().getBuilder(), extensionRegistry); + inputFormatCase_ = 4; + break; + } // case 34 + case 42: + { + input.readMessage( + internalGetPubsubAvroFormatFieldBuilder().getBuilder(), extensionRegistry); + inputFormatCase_ = 5; + break; + } // case 42 + case 50: + { + input.readMessage( + internalGetMinimumObjectCreateTimeFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000020; + break; + } // case 50 + case 74: + { + matchGlob_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000040; + break; + } // case 74 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int inputFormatCase_ = 0; + private java.lang.Object inputFormat_; + + public InputFormatCase getInputFormatCase() { + return InputFormatCase.forNumber(inputFormatCase_); + } + + public Builder clearInputFormat() { + inputFormatCase_ = 0; + inputFormat_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private int state_ = 0; + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Cloud
+       * Storage ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Cloud
+       * Storage ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The enum numeric value on the wire for state to set. + * @return This builder for chaining. + */ + public Builder setStateValue(int value) { + state_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Cloud
+       * Storage ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State getState() { + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State result = + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State.forNumber(state_); + return result == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State.UNRECOGNIZED + : result; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Cloud
+       * Storage ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The state to set. + * @return This builder for chaining. + */ + public Builder setState( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + state_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Cloud
+       * Storage ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearState() { + bitField0_ = (bitField0_ & ~0x00000001); + state_ = 0; + onChanged(); + return this; + } + + private java.lang.Object bucket_ = ""; + + /** + * + * + *
+       * Optional. Cloud Storage bucket. The bucket name must be without any
+       * prefix like "gs://". See the [bucket naming requirements]
+       * (https://cloud.google.com/storage/docs/buckets#naming).
+       * 
+ * + * string bucket = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bucket. + */ + public java.lang.String getBucket() { + java.lang.Object ref = bucket_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + bucket_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. Cloud Storage bucket. The bucket name must be without any
+       * prefix like "gs://". See the [bucket naming requirements]
+       * (https://cloud.google.com/storage/docs/buckets#naming).
+       * 
+ * + * string bucket = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for bucket. + */ + public com.google.protobuf.ByteString getBucketBytes() { + java.lang.Object ref = bucket_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + bucket_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. Cloud Storage bucket. The bucket name must be without any
+       * prefix like "gs://". See the [bucket naming requirements]
+       * (https://cloud.google.com/storage/docs/buckets#naming).
+       * 
+ * + * string bucket = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bucket to set. + * @return This builder for chaining. + */ + public Builder setBucket(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bucket_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Cloud Storage bucket. The bucket name must be without any
+       * prefix like "gs://". See the [bucket naming requirements]
+       * (https://cloud.google.com/storage/docs/buckets#naming).
+       * 
+ * + * string bucket = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearBucket() { + bucket_ = getDefaultInstance().getBucket(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Cloud Storage bucket. The bucket name must be without any
+       * prefix like "gs://". See the [bucket naming requirements]
+       * (https://cloud.google.com/storage/docs/buckets#naming).
+       * 
+ * + * string bucket = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for bucket to set. + * @return This builder for chaining. + */ + public Builder setBucketBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + bucket_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormatOrBuilder> + textFormatBuilder_; + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted as text.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the textFormat field is set. + */ + @java.lang.Override + public boolean hasTextFormat() { + return inputFormatCase_ == 3; + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted as text.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The textFormat. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + getTextFormat() { + if (textFormatBuilder_ == null) { + if (inputFormatCase_ == 3) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) + inputFormat_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + .getDefaultInstance(); + } else { + if (inputFormatCase_ == 3) { + return textFormatBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted as text.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setTextFormat( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat value) { + if (textFormatBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + inputFormat_ = value; + onChanged(); + } else { + textFormatBuilder_.setMessage(value); + } + inputFormatCase_ = 3; + return this; + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted as text.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setTextFormat( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat.Builder + builderForValue) { + if (textFormatBuilder_ == null) { + inputFormat_ = builderForValue.build(); + onChanged(); + } else { + textFormatBuilder_.setMessage(builderForValue.build()); + } + inputFormatCase_ = 3; + return this; + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted as text.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeTextFormat( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat value) { + if (textFormatBuilder_ == null) { + if (inputFormatCase_ == 3 + && inputFormat_ + != com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + .getDefaultInstance()) { + inputFormat_ = + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat.newBuilder( + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) + inputFormat_) + .mergeFrom(value) + .buildPartial(); + } else { + inputFormat_ = value; + } + onChanged(); + } else { + if (inputFormatCase_ == 3) { + textFormatBuilder_.mergeFrom(value); + } else { + textFormatBuilder_.setMessage(value); + } + } + inputFormatCase_ = 3; + return this; + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted as text.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearTextFormat() { + if (textFormatBuilder_ == null) { + if (inputFormatCase_ == 3) { + inputFormatCase_ = 0; + inputFormat_ = null; + onChanged(); + } + } else { + if (inputFormatCase_ == 3) { + inputFormatCase_ = 0; + inputFormat_ = null; + } + textFormatBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted as text.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat.Builder + getTextFormatBuilder() { + return internalGetTextFormatFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted as text.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormatOrBuilder + getTextFormatOrBuilder() { + if ((inputFormatCase_ == 3) && (textFormatBuilder_ != null)) { + return textFormatBuilder_.getMessageOrBuilder(); + } else { + if (inputFormatCase_ == 3) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) + inputFormat_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted as text.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat text_format = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormatOrBuilder> + internalGetTextFormatFieldBuilder() { + if (textFormatBuilder_ == null) { + if (!(inputFormatCase_ == 3)) { + inputFormat_ = + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat + .getDefaultInstance(); + } + textFormatBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage + .TextFormatOrBuilder>( + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.TextFormat) + inputFormat_, + getParentForChildren(), + isClean()); + inputFormat_ = null; + } + inputFormatCase_ = 3; + onChanged(); + return textFormatBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormatOrBuilder> + avroFormatBuilder_; + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted in Avro format.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the avroFormat field is set. + */ + @java.lang.Override + public boolean hasAvroFormat() { + return inputFormatCase_ == 4; + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted in Avro format.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The avroFormat. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + getAvroFormat() { + if (avroFormatBuilder_ == null) { + if (inputFormatCase_ == 4) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) + inputFormat_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + .getDefaultInstance(); + } else { + if (inputFormatCase_ == 4) { + return avroFormatBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted in Avro format.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAvroFormat( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat value) { + if (avroFormatBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + inputFormat_ = value; + onChanged(); + } else { + avroFormatBuilder_.setMessage(value); + } + inputFormatCase_ = 4; + return this; + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted in Avro format.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAvroFormat( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat.Builder + builderForValue) { + if (avroFormatBuilder_ == null) { + inputFormat_ = builderForValue.build(); + onChanged(); + } else { + avroFormatBuilder_.setMessage(builderForValue.build()); + } + inputFormatCase_ = 4; + return this; + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted in Avro format.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeAvroFormat( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat value) { + if (avroFormatBuilder_ == null) { + if (inputFormatCase_ == 4 + && inputFormat_ + != com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + .getDefaultInstance()) { + inputFormat_ = + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat.newBuilder( + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) + inputFormat_) + .mergeFrom(value) + .buildPartial(); + } else { + inputFormat_ = value; + } + onChanged(); + } else { + if (inputFormatCase_ == 4) { + avroFormatBuilder_.mergeFrom(value); + } else { + avroFormatBuilder_.setMessage(value); + } + } + inputFormatCase_ = 4; + return this; + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted in Avro format.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearAvroFormat() { + if (avroFormatBuilder_ == null) { + if (inputFormatCase_ == 4) { + inputFormatCase_ = 0; + inputFormat_ = null; + onChanged(); + } + } else { + if (inputFormatCase_ == 4) { + inputFormatCase_ = 0; + inputFormat_ = null; + } + avroFormatBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted in Avro format.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat.Builder + getAvroFormatBuilder() { + return internalGetAvroFormatFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted in Avro format.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormatOrBuilder + getAvroFormatOrBuilder() { + if ((inputFormatCase_ == 4) && (avroFormatBuilder_ != null)) { + return avroFormatBuilder_.getMessageOrBuilder(); + } else { + if (inputFormatCase_ == 4) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) + inputFormat_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Data from Cloud Storage will be interpreted in Avro format.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat avro_format = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormatOrBuilder> + internalGetAvroFormatFieldBuilder() { + if (avroFormatBuilder_ == null) { + if (!(inputFormatCase_ == 4)) { + inputFormat_ = + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat + .getDefaultInstance(); + } + avroFormatBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage + .AvroFormatOrBuilder>( + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.AvroFormat) + inputFormat_, + getParentForChildren(), + isClean()); + inputFormat_ = null; + } + inputFormatCase_ = 4; + onChanged(); + return avroFormatBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage + .PubSubAvroFormatOrBuilder> + pubsubAvroFormatBuilder_; + + /** + * + * + *
+       * Optional. It will be assumed data from Cloud Storage was written via
+       * [Cloud Storage
+       * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the pubsubAvroFormat field is set. + */ + @java.lang.Override + public boolean hasPubsubAvroFormat() { + return inputFormatCase_ == 5; + } + + /** + * + * + *
+       * Optional. It will be assumed data from Cloud Storage was written via
+       * [Cloud Storage
+       * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The pubsubAvroFormat. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + getPubsubAvroFormat() { + if (pubsubAvroFormatBuilder_ == null) { + if (inputFormatCase_ == 5) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) + inputFormat_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .getDefaultInstance(); + } else { + if (inputFormatCase_ == 5) { + return pubsubAvroFormatBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. It will be assumed data from Cloud Storage was written via
+       * [Cloud Storage
+       * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setPubsubAvroFormat( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat value) { + if (pubsubAvroFormatBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + inputFormat_ = value; + onChanged(); + } else { + pubsubAvroFormatBuilder_.setMessage(value); + } + inputFormatCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. It will be assumed data from Cloud Storage was written via
+       * [Cloud Storage
+       * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setPubsubAvroFormat( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat.Builder + builderForValue) { + if (pubsubAvroFormatBuilder_ == null) { + inputFormat_ = builderForValue.build(); + onChanged(); + } else { + pubsubAvroFormatBuilder_.setMessage(builderForValue.build()); + } + inputFormatCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. It will be assumed data from Cloud Storage was written via
+       * [Cloud Storage
+       * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergePubsubAvroFormat( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat value) { + if (pubsubAvroFormatBuilder_ == null) { + if (inputFormatCase_ == 5 + && inputFormat_ + != com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .getDefaultInstance()) { + inputFormat_ = + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .newBuilder( + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage + .PubSubAvroFormat) + inputFormat_) + .mergeFrom(value) + .buildPartial(); + } else { + inputFormat_ = value; + } + onChanged(); + } else { + if (inputFormatCase_ == 5) { + pubsubAvroFormatBuilder_.mergeFrom(value); + } else { + pubsubAvroFormatBuilder_.setMessage(value); + } + } + inputFormatCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. It will be assumed data from Cloud Storage was written via
+       * [Cloud Storage
+       * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearPubsubAvroFormat() { + if (pubsubAvroFormatBuilder_ == null) { + if (inputFormatCase_ == 5) { + inputFormatCase_ = 0; + inputFormat_ = null; + onChanged(); + } + } else { + if (inputFormatCase_ == 5) { + inputFormatCase_ = 0; + inputFormat_ = null; + } + pubsubAvroFormatBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. It will be assumed data from Cloud Storage was written via
+       * [Cloud Storage
+       * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat.Builder + getPubsubAvroFormatBuilder() { + return internalGetPubsubAvroFormatFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. It will be assumed data from Cloud Storage was written via
+       * [Cloud Storage
+       * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormatOrBuilder + getPubsubAvroFormatOrBuilder() { + if ((inputFormatCase_ == 5) && (pubsubAvroFormatBuilder_ != null)) { + return pubsubAvroFormatBuilder_.getMessageOrBuilder(); + } else { + if (inputFormatCase_ == 5) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) + inputFormat_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. It will be assumed data from Cloud Storage was written via
+       * [Cloud Storage
+       * subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage).
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat pubsub_avro_format = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage + .PubSubAvroFormatOrBuilder> + internalGetPubsubAvroFormatFieldBuilder() { + if (pubsubAvroFormatBuilder_ == null) { + if (!(inputFormatCase_ == 5)) { + inputFormat_ = + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .getDefaultInstance(); + } + pubsubAvroFormatBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat + .Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage + .PubSubAvroFormatOrBuilder>( + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat) + inputFormat_, + getParentForChildren(), + isClean()); + inputFormat_ = null; + } + inputFormatCase_ = 5; + onChanged(); + return pubsubAvroFormatBuilder_; + } + + private com.google.protobuf.Timestamp minimumObjectCreateTime_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + minimumObjectCreateTimeBuilder_; + + /** + * + * + *
+       * Optional. Only objects with a larger or equal creation timestamp will be
+       * ingested.
+       * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the minimumObjectCreateTime field is set. + */ + public boolean hasMinimumObjectCreateTime() { + return ((bitField0_ & 0x00000020) != 0); + } + + /** + * + * + *
+       * Optional. Only objects with a larger or equal creation timestamp will be
+       * ingested.
+       * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The minimumObjectCreateTime. + */ + public com.google.protobuf.Timestamp getMinimumObjectCreateTime() { + if (minimumObjectCreateTimeBuilder_ == null) { + return minimumObjectCreateTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : minimumObjectCreateTime_; + } else { + return minimumObjectCreateTimeBuilder_.getMessage(); + } + } + + /** + * + * + *
+       * Optional. Only objects with a larger or equal creation timestamp will be
+       * ingested.
+       * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMinimumObjectCreateTime(com.google.protobuf.Timestamp value) { + if (minimumObjectCreateTimeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + minimumObjectCreateTime_ = value; + } else { + minimumObjectCreateTimeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Only objects with a larger or equal creation timestamp will be
+       * ingested.
+       * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMinimumObjectCreateTime( + com.google.protobuf.Timestamp.Builder builderForValue) { + if (minimumObjectCreateTimeBuilder_ == null) { + minimumObjectCreateTime_ = builderForValue.build(); + } else { + minimumObjectCreateTimeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Only objects with a larger or equal creation timestamp will be
+       * ingested.
+       * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeMinimumObjectCreateTime(com.google.protobuf.Timestamp value) { + if (minimumObjectCreateTimeBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0) + && minimumObjectCreateTime_ != null + && minimumObjectCreateTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getMinimumObjectCreateTimeBuilder().mergeFrom(value); + } else { + minimumObjectCreateTime_ = value; + } + } else { + minimumObjectCreateTimeBuilder_.mergeFrom(value); + } + if (minimumObjectCreateTime_ != null) { + bitField0_ |= 0x00000020; + onChanged(); + } + return this; + } + + /** + * + * + *
+       * Optional. Only objects with a larger or equal creation timestamp will be
+       * ingested.
+       * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMinimumObjectCreateTime() { + bitField0_ = (bitField0_ & ~0x00000020); + minimumObjectCreateTime_ = null; + if (minimumObjectCreateTimeBuilder_ != null) { + minimumObjectCreateTimeBuilder_.dispose(); + minimumObjectCreateTimeBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Only objects with a larger or equal creation timestamp will be
+       * ingested.
+       * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.Timestamp.Builder getMinimumObjectCreateTimeBuilder() { + bitField0_ |= 0x00000020; + onChanged(); + return internalGetMinimumObjectCreateTimeFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. Only objects with a larger or equal creation timestamp will be
+       * ingested.
+       * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.TimestampOrBuilder getMinimumObjectCreateTimeOrBuilder() { + if (minimumObjectCreateTimeBuilder_ != null) { + return minimumObjectCreateTimeBuilder_.getMessageOrBuilder(); + } else { + return minimumObjectCreateTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : minimumObjectCreateTime_; + } + } + + /** + * + * + *
+       * Optional. Only objects with a larger or equal creation timestamp will be
+       * ingested.
+       * 
+ * + * + * .google.protobuf.Timestamp minimum_object_create_time = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetMinimumObjectCreateTimeFieldBuilder() { + if (minimumObjectCreateTimeBuilder_ == null) { + minimumObjectCreateTimeBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getMinimumObjectCreateTime(), getParentForChildren(), isClean()); + minimumObjectCreateTime_ = null; + } + return minimumObjectCreateTimeBuilder_; + } + + private java.lang.Object matchGlob_ = ""; + + /** + * + * + *
+       * Optional. Glob pattern used to match objects that will be ingested. If
+       * unset, all objects will be ingested. See the [supported
+       * patterns](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob).
+       * 
+ * + * string match_glob = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The matchGlob. + */ + public java.lang.String getMatchGlob() { + java.lang.Object ref = matchGlob_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + matchGlob_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. Glob pattern used to match objects that will be ingested. If
+       * unset, all objects will be ingested. See the [supported
+       * patterns](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob).
+       * 
+ * + * string match_glob = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for matchGlob. + */ + public com.google.protobuf.ByteString getMatchGlobBytes() { + java.lang.Object ref = matchGlob_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + matchGlob_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. Glob pattern used to match objects that will be ingested. If
+       * unset, all objects will be ingested. See the [supported
+       * patterns](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob).
+       * 
+ * + * string match_glob = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The matchGlob to set. + * @return This builder for chaining. + */ + public Builder setMatchGlob(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + matchGlob_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Glob pattern used to match objects that will be ingested. If
+       * unset, all objects will be ingested. See the [supported
+       * patterns](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob).
+       * 
+ * + * string match_glob = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearMatchGlob() { + matchGlob_ = getDefaultInstance().getMatchGlob(); + bitField0_ = (bitField0_ & ~0x00000040); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Glob pattern used to match objects that will be ingested. If
+       * unset, all objects will be ingested. See the [supported
+       * patterns](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob).
+       * 
+ * + * string match_glob = 9 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for matchGlob to set. + * @return This builder for chaining. + */ + public Builder setMatchGlobBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + matchGlob_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) + private static final com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage(); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public CloudStorage parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface AzureEventHubsOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Event
+     * Hubs ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + int getStateValue(); + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Event
+     * Hubs ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State getState(); + + /** + * + * + *
+     * Optional. Name of the resource group within the azure subscription.
+     * 
+ * + * string resource_group = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The resourceGroup. + */ + java.lang.String getResourceGroup(); + + /** + * + * + *
+     * Optional. Name of the resource group within the azure subscription.
+     * 
+ * + * string resource_group = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for resourceGroup. + */ + com.google.protobuf.ByteString getResourceGroupBytes(); + + /** + * + * + *
+     * Optional. The name of the Event Hubs namespace.
+     * 
+ * + * string namespace = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The namespace. + */ + java.lang.String getNamespace(); + + /** + * + * + *
+     * Optional. The name of the Event Hubs namespace.
+     * 
+ * + * string namespace = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for namespace. + */ + com.google.protobuf.ByteString getNamespaceBytes(); + + /** + * + * + *
+     * Optional. The name of the Event Hub.
+     * 
+ * + * string event_hub = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The eventHub. + */ + java.lang.String getEventHub(); + + /** + * + * + *
+     * Optional. The name of the Event Hub.
+     * 
+ * + * string event_hub = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for eventHub. + */ + com.google.protobuf.ByteString getEventHubBytes(); + + /** + * + * + *
+     * Optional. The client id of the Azure application that is being used to
+     * authenticate Pub/Sub.
+     * 
+ * + * string client_id = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The clientId. + */ + java.lang.String getClientId(); + + /** + * + * + *
+     * Optional. The client id of the Azure application that is being used to
+     * authenticate Pub/Sub.
+     * 
+ * + * string client_id = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for clientId. + */ + com.google.protobuf.ByteString getClientIdBytes(); + + /** + * + * + *
+     * Optional. The tenant id of the Azure application that is being used to
+     * authenticate Pub/Sub.
+     * 
+ * + * string tenant_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The tenantId. + */ + java.lang.String getTenantId(); + + /** + * + * + *
+     * Optional. The tenant id of the Azure application that is being used to
+     * authenticate Pub/Sub.
+     * 
+ * + * string tenant_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for tenantId. + */ + com.google.protobuf.ByteString getTenantIdBytes(); + + /** + * + * + *
+     * Optional. The Azure subscription id.
+     * 
+ * + * string subscription_id = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The subscriptionId. + */ + java.lang.String getSubscriptionId(); + + /** + * + * + *
+     * Optional. The Azure subscription id.
+     * 
+ * + * string subscription_id = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for subscriptionId. + */ + com.google.protobuf.ByteString getSubscriptionIdBytes(); + + /** + * + * + *
+     * Optional. The GCP service account to be used for Federated Identity
+     * authentication.
+     * 
+ * + * string gcp_service_account = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The gcpServiceAccount. + */ + java.lang.String getGcpServiceAccount(); + + /** + * + * + *
+     * Optional. The GCP service account to be used for Federated Identity
+     * authentication.
+     * 
+ * + * string gcp_service_account = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for gcpServiceAccount. + */ + com.google.protobuf.ByteString getGcpServiceAccountBytes(); + } + + /** + * + * + *
+   * Ingestion settings for Azure Event Hubs.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs} + */ + public static final class AzureEventHubs extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) + AzureEventHubsOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AzureEventHubs"); + } + + // Use AzureEventHubs.newBuilder() to construct. + private AzureEventHubs(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AzureEventHubs() { + state_ = 0; + resourceGroup_ = ""; + namespace_ = ""; + eventHub_ = ""; + clientId_ = ""; + tenantId_ = ""; + subscriptionId_ = ""; + gcpServiceAccount_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AzureEventHubs_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AzureEventHubs_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.class, + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.Builder.class); + } + + /** + * + * + *
+     * Possible states for managed ingestion from Event Hubs.
+     * 
+ * + * Protobuf enum {@code google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State} + */ + public enum State implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+       * Default value. This value is unused.
+       * 
+ * + * STATE_UNSPECIFIED = 0; + */ + STATE_UNSPECIFIED(0), + /** + * + * + *
+       * Ingestion is active.
+       * 
+ * + * ACTIVE = 1; + */ + ACTIVE(1), + /** + * + * + *
+       * Permission denied encountered while consuming data from Event Hubs.
+       * This can happen when `client_id`, or `tenant_id` are invalid. Or the
+       * right permissions haven't been granted.
+       * 
+ * + * EVENT_HUBS_PERMISSION_DENIED = 2; + */ + EVENT_HUBS_PERMISSION_DENIED(2), + /** + * + * + *
+       * Permission denied encountered while publishing to the topic.
+       * 
+ * + * PUBLISH_PERMISSION_DENIED = 3; + */ + PUBLISH_PERMISSION_DENIED(3), + /** + * + * + *
+       * The provided Event Hubs namespace couldn't be found.
+       * 
+ * + * NAMESPACE_NOT_FOUND = 4; + */ + NAMESPACE_NOT_FOUND(4), + /** + * + * + *
+       * The provided Event Hub couldn't be found.
+       * 
+ * + * EVENT_HUB_NOT_FOUND = 5; + */ + EVENT_HUB_NOT_FOUND(5), + /** + * + * + *
+       * The provided Event Hubs subscription couldn't be found.
+       * 
+ * + * SUBSCRIPTION_NOT_FOUND = 6; + */ + SUBSCRIPTION_NOT_FOUND(6), + /** + * + * + *
+       * The provided Event Hubs resource group couldn't be found.
+       * 
+ * + * RESOURCE_GROUP_NOT_FOUND = 7; + */ + RESOURCE_GROUP_NOT_FOUND(7), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + + /** + * + * + *
+       * Default value. This value is unused.
+       * 
+ * + * STATE_UNSPECIFIED = 0; + */ + public static final int STATE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+       * Ingestion is active.
+       * 
+ * + * ACTIVE = 1; + */ + public static final int ACTIVE_VALUE = 1; + + /** + * + * + *
+       * Permission denied encountered while consuming data from Event Hubs.
+       * This can happen when `client_id`, or `tenant_id` are invalid. Or the
+       * right permissions haven't been granted.
+       * 
+ * + * EVENT_HUBS_PERMISSION_DENIED = 2; + */ + public static final int EVENT_HUBS_PERMISSION_DENIED_VALUE = 2; + + /** + * + * + *
+       * Permission denied encountered while publishing to the topic.
+       * 
+ * + * PUBLISH_PERMISSION_DENIED = 3; + */ + public static final int PUBLISH_PERMISSION_DENIED_VALUE = 3; + + /** + * + * + *
+       * The provided Event Hubs namespace couldn't be found.
+       * 
+ * + * NAMESPACE_NOT_FOUND = 4; + */ + public static final int NAMESPACE_NOT_FOUND_VALUE = 4; + + /** + * + * + *
+       * The provided Event Hub couldn't be found.
+       * 
+ * + * EVENT_HUB_NOT_FOUND = 5; + */ + public static final int EVENT_HUB_NOT_FOUND_VALUE = 5; + + /** + * + * + *
+       * The provided Event Hubs subscription couldn't be found.
+       * 
+ * + * SUBSCRIPTION_NOT_FOUND = 6; + */ + public static final int SUBSCRIPTION_NOT_FOUND_VALUE = 6; + + /** + * + * + *
+       * The provided Event Hubs resource group couldn't be found.
+       * 
+ * + * RESOURCE_GROUP_NOT_FOUND = 7; + */ + public static final int RESOURCE_GROUP_NOT_FOUND_VALUE = 7; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static State valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static State forNumber(int value) { + switch (value) { + case 0: + return STATE_UNSPECIFIED; + case 1: + return ACTIVE; + case 2: + return EVENT_HUBS_PERMISSION_DENIED; + case 3: + return PUBLISH_PERMISSION_DENIED; + case 4: + return NAMESPACE_NOT_FOUND; + case 5: + return EVENT_HUB_NOT_FOUND; + case 6: + return SUBSCRIPTION_NOT_FOUND; + case 7: + return RESOURCE_GROUP_NOT_FOUND; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public State findValueByNumber(int number) { + return State.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.getDescriptor() + .getEnumTypes() + .get(0); + } + + private static final State[] VALUES = values(); + + public static State valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private State(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State) + } + + public static final int STATE_FIELD_NUMBER = 1; + private int state_ = 0; + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Event
+     * Hubs ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Event
+     * Hubs ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State getState() { + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State result = + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State.forNumber(state_); + return result == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State.UNRECOGNIZED + : result; + } + + public static final int RESOURCE_GROUP_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object resourceGroup_ = ""; + + /** + * + * + *
+     * Optional. Name of the resource group within the azure subscription.
+     * 
+ * + * string resource_group = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The resourceGroup. + */ + @java.lang.Override + public java.lang.String getResourceGroup() { + java.lang.Object ref = resourceGroup_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + resourceGroup_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. Name of the resource group within the azure subscription.
+     * 
+ * + * string resource_group = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for resourceGroup. + */ + @java.lang.Override + public com.google.protobuf.ByteString getResourceGroupBytes() { + java.lang.Object ref = resourceGroup_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + resourceGroup_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int NAMESPACE_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object namespace_ = ""; + + /** + * + * + *
+     * Optional. The name of the Event Hubs namespace.
+     * 
+ * + * string namespace = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The namespace. + */ + @java.lang.Override + public java.lang.String getNamespace() { + java.lang.Object ref = namespace_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + namespace_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The name of the Event Hubs namespace.
+     * 
+ * + * string namespace = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for namespace. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNamespaceBytes() { + java.lang.Object ref = namespace_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + namespace_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int EVENT_HUB_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private volatile java.lang.Object eventHub_ = ""; + + /** + * + * + *
+     * Optional. The name of the Event Hub.
+     * 
+ * + * string event_hub = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The eventHub. + */ + @java.lang.Override + public java.lang.String getEventHub() { + java.lang.Object ref = eventHub_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + eventHub_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The name of the Event Hub.
+     * 
+ * + * string event_hub = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for eventHub. + */ + @java.lang.Override + public com.google.protobuf.ByteString getEventHubBytes() { + java.lang.Object ref = eventHub_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + eventHub_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int CLIENT_ID_FIELD_NUMBER = 5; + + @SuppressWarnings("serial") + private volatile java.lang.Object clientId_ = ""; + + /** + * + * + *
+     * Optional. The client id of the Azure application that is being used to
+     * authenticate Pub/Sub.
+     * 
+ * + * string client_id = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The clientId. + */ + @java.lang.Override + public java.lang.String getClientId() { + java.lang.Object ref = clientId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clientId_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The client id of the Azure application that is being used to
+     * authenticate Pub/Sub.
+     * 
+ * + * string client_id = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for clientId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getClientIdBytes() { + java.lang.Object ref = clientId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clientId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TENANT_ID_FIELD_NUMBER = 6; + + @SuppressWarnings("serial") + private volatile java.lang.Object tenantId_ = ""; + + /** + * + * + *
+     * Optional. The tenant id of the Azure application that is being used to
+     * authenticate Pub/Sub.
+     * 
+ * + * string tenant_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The tenantId. + */ + @java.lang.Override + public java.lang.String getTenantId() { + java.lang.Object ref = tenantId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + tenantId_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The tenant id of the Azure application that is being used to
+     * authenticate Pub/Sub.
+     * 
+ * + * string tenant_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for tenantId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTenantIdBytes() { + java.lang.Object ref = tenantId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + tenantId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SUBSCRIPTION_ID_FIELD_NUMBER = 7; + + @SuppressWarnings("serial") + private volatile java.lang.Object subscriptionId_ = ""; + + /** + * + * + *
+     * Optional. The Azure subscription id.
+     * 
+ * + * string subscription_id = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The subscriptionId. + */ + @java.lang.Override + public java.lang.String getSubscriptionId() { + java.lang.Object ref = subscriptionId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscriptionId_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The Azure subscription id.
+     * 
+ * + * string subscription_id = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for subscriptionId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSubscriptionIdBytes() { + java.lang.Object ref = subscriptionId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscriptionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int GCP_SERVICE_ACCOUNT_FIELD_NUMBER = 8; + + @SuppressWarnings("serial") + private volatile java.lang.Object gcpServiceAccount_ = ""; + + /** + * + * + *
+     * Optional. The GCP service account to be used for Federated Identity
+     * authentication.
+     * 
+ * + * string gcp_service_account = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The gcpServiceAccount. + */ + @java.lang.Override + public java.lang.String getGcpServiceAccount() { + java.lang.Object ref = gcpServiceAccount_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + gcpServiceAccount_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The GCP service account to be used for Federated Identity
+     * authentication.
+     * 
+ * + * string gcp_service_account = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for gcpServiceAccount. + */ + @java.lang.Override + public com.google.protobuf.ByteString getGcpServiceAccountBytes() { + java.lang.Object ref = gcpServiceAccount_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + gcpServiceAccount_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (state_ + != com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State.STATE_UNSPECIFIED + .getNumber()) { + output.writeEnum(1, state_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(resourceGroup_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, resourceGroup_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(namespace_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, namespace_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(eventHub_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, eventHub_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clientId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, clientId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(tenantId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 6, tenantId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscriptionId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 7, subscriptionId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(gcpServiceAccount_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 8, gcpServiceAccount_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (state_ + != com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State.STATE_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, state_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(resourceGroup_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, resourceGroup_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(namespace_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, namespace_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(eventHub_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, eventHub_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clientId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, clientId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(tenantId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(6, tenantId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscriptionId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(7, subscriptionId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(gcpServiceAccount_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(8, gcpServiceAccount_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs other = + (com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) obj; + + if (state_ != other.state_) return false; + if (!getResourceGroup().equals(other.getResourceGroup())) return false; + if (!getNamespace().equals(other.getNamespace())) return false; + if (!getEventHub().equals(other.getEventHub())) return false; + if (!getClientId().equals(other.getClientId())) return false; + if (!getTenantId().equals(other.getTenantId())) return false; + if (!getSubscriptionId().equals(other.getSubscriptionId())) return false; + if (!getGcpServiceAccount().equals(other.getGcpServiceAccount())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + state_; + hash = (37 * hash) + RESOURCE_GROUP_FIELD_NUMBER; + hash = (53 * hash) + getResourceGroup().hashCode(); + hash = (37 * hash) + NAMESPACE_FIELD_NUMBER; + hash = (53 * hash) + getNamespace().hashCode(); + hash = (37 * hash) + EVENT_HUB_FIELD_NUMBER; + hash = (53 * hash) + getEventHub().hashCode(); + hash = (37 * hash) + CLIENT_ID_FIELD_NUMBER; + hash = (53 * hash) + getClientId().hashCode(); + hash = (37 * hash) + TENANT_ID_FIELD_NUMBER; + hash = (53 * hash) + getTenantId().hashCode(); + hash = (37 * hash) + SUBSCRIPTION_ID_FIELD_NUMBER; + hash = (53 * hash) + getSubscriptionId().hashCode(); + hash = (37 * hash) + GCP_SERVICE_ACCOUNT_FIELD_NUMBER; + hash = (53 * hash) + getGcpServiceAccount().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Ingestion settings for Azure Event Hubs.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AzureEventHubs_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AzureEventHubs_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.class, + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.Builder.class); + } + + // Construct using + // com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + state_ = 0; + resourceGroup_ = ""; + namespace_ = ""; + eventHub_ = ""; + clientId_ = ""; + tenantId_ = ""; + subscriptionId_ = ""; + gcpServiceAccount_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AzureEventHubs_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs build() { + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs buildPartial() { + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs result = + new com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.state_ = state_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.resourceGroup_ = resourceGroup_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.namespace_ = namespace_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.eventHub_ = eventHub_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.clientId_ = clientId_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.tenantId_ = tenantId_; + } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.subscriptionId_ = subscriptionId_; + } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.gcpServiceAccount_ = gcpServiceAccount_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) { + return mergeFrom((com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs other) { + if (other + == com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.getDefaultInstance()) + return this; + if (other.state_ != 0) { + setStateValue(other.getStateValue()); + } + if (!other.getResourceGroup().isEmpty()) { + resourceGroup_ = other.resourceGroup_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getNamespace().isEmpty()) { + namespace_ = other.namespace_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (!other.getEventHub().isEmpty()) { + eventHub_ = other.eventHub_; + bitField0_ |= 0x00000008; + onChanged(); + } + if (!other.getClientId().isEmpty()) { + clientId_ = other.clientId_; + bitField0_ |= 0x00000010; + onChanged(); + } + if (!other.getTenantId().isEmpty()) { + tenantId_ = other.tenantId_; + bitField0_ |= 0x00000020; + onChanged(); + } + if (!other.getSubscriptionId().isEmpty()) { + subscriptionId_ = other.subscriptionId_; + bitField0_ |= 0x00000040; + onChanged(); + } + if (!other.getGcpServiceAccount().isEmpty()) { + gcpServiceAccount_ = other.gcpServiceAccount_; + bitField0_ |= 0x00000080; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + state_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + resourceGroup_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + namespace_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + eventHub_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: + { + clientId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000010; + break; + } // case 42 + case 50: + { + tenantId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000020; + break; + } // case 50 + case 58: + { + subscriptionId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000040; + break; + } // case 58 + case 66: + { + gcpServiceAccount_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000080; + break; + } // case 66 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private int state_ = 0; + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Event
+       * Hubs ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Event
+       * Hubs ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The enum numeric value on the wire for state to set. + * @return This builder for chaining. + */ + public Builder setStateValue(int value) { + state_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Event
+       * Hubs ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State getState() { + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State result = + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State.forNumber(state_); + return result == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State.UNRECOGNIZED + : result; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Event
+       * Hubs ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The state to set. + * @return This builder for chaining. + */ + public Builder setState( + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + state_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Event
+       * Hubs ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearState() { + bitField0_ = (bitField0_ & ~0x00000001); + state_ = 0; + onChanged(); + return this; + } + + private java.lang.Object resourceGroup_ = ""; + + /** + * + * + *
+       * Optional. Name of the resource group within the azure subscription.
+       * 
+ * + * string resource_group = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The resourceGroup. + */ + public java.lang.String getResourceGroup() { + java.lang.Object ref = resourceGroup_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + resourceGroup_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. Name of the resource group within the azure subscription.
+       * 
+ * + * string resource_group = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for resourceGroup. + */ + public com.google.protobuf.ByteString getResourceGroupBytes() { + java.lang.Object ref = resourceGroup_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + resourceGroup_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. Name of the resource group within the azure subscription.
+       * 
+ * + * string resource_group = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The resourceGroup to set. + * @return This builder for chaining. + */ + public Builder setResourceGroup(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + resourceGroup_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Name of the resource group within the azure subscription.
+       * 
+ * + * string resource_group = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearResourceGroup() { + resourceGroup_ = getDefaultInstance().getResourceGroup(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Name of the resource group within the azure subscription.
+       * 
+ * + * string resource_group = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for resourceGroup to set. + * @return This builder for chaining. + */ + public Builder setResourceGroupBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + resourceGroup_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object namespace_ = ""; + + /** + * + * + *
+       * Optional. The name of the Event Hubs namespace.
+       * 
+ * + * string namespace = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The namespace. + */ + public java.lang.String getNamespace() { + java.lang.Object ref = namespace_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + namespace_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the Event Hubs namespace.
+       * 
+ * + * string namespace = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for namespace. + */ + public com.google.protobuf.ByteString getNamespaceBytes() { + java.lang.Object ref = namespace_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + namespace_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the Event Hubs namespace.
+       * 
+ * + * string namespace = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The namespace to set. + * @return This builder for chaining. + */ + public Builder setNamespace(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + namespace_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the Event Hubs namespace.
+       * 
+ * + * string namespace = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearNamespace() { + namespace_ = getDefaultInstance().getNamespace(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the Event Hubs namespace.
+       * 
+ * + * string namespace = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for namespace to set. + * @return This builder for chaining. + */ + public Builder setNamespaceBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + namespace_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private java.lang.Object eventHub_ = ""; + + /** + * + * + *
+       * Optional. The name of the Event Hub.
+       * 
+ * + * string event_hub = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The eventHub. + */ + public java.lang.String getEventHub() { + java.lang.Object ref = eventHub_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + eventHub_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the Event Hub.
+       * 
+ * + * string event_hub = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for eventHub. + */ + public com.google.protobuf.ByteString getEventHubBytes() { + java.lang.Object ref = eventHub_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + eventHub_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the Event Hub.
+       * 
+ * + * string event_hub = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The eventHub to set. + * @return This builder for chaining. + */ + public Builder setEventHub(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + eventHub_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the Event Hub.
+       * 
+ * + * string event_hub = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearEventHub() { + eventHub_ = getDefaultInstance().getEventHub(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the Event Hub.
+       * 
+ * + * string event_hub = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for eventHub to set. + * @return This builder for chaining. + */ + public Builder setEventHubBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + eventHub_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + private java.lang.Object clientId_ = ""; + + /** + * + * + *
+       * Optional. The client id of the Azure application that is being used to
+       * authenticate Pub/Sub.
+       * 
+ * + * string client_id = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The clientId. + */ + public java.lang.String getClientId() { + java.lang.Object ref = clientId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clientId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The client id of the Azure application that is being used to
+       * authenticate Pub/Sub.
+       * 
+ * + * string client_id = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for clientId. + */ + public com.google.protobuf.ByteString getClientIdBytes() { + java.lang.Object ref = clientId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clientId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The client id of the Azure application that is being used to
+       * authenticate Pub/Sub.
+       * 
+ * + * string client_id = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The clientId to set. + * @return This builder for chaining. + */ + public Builder setClientId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + clientId_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The client id of the Azure application that is being used to
+       * authenticate Pub/Sub.
+       * 
+ * + * string client_id = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearClientId() { + clientId_ = getDefaultInstance().getClientId(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The client id of the Azure application that is being used to
+       * authenticate Pub/Sub.
+       * 
+ * + * string client_id = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for clientId to set. + * @return This builder for chaining. + */ + public Builder setClientIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + clientId_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + private java.lang.Object tenantId_ = ""; + + /** + * + * + *
+       * Optional. The tenant id of the Azure application that is being used to
+       * authenticate Pub/Sub.
+       * 
+ * + * string tenant_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The tenantId. + */ + public java.lang.String getTenantId() { + java.lang.Object ref = tenantId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + tenantId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The tenant id of the Azure application that is being used to
+       * authenticate Pub/Sub.
+       * 
+ * + * string tenant_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for tenantId. + */ + public com.google.protobuf.ByteString getTenantIdBytes() { + java.lang.Object ref = tenantId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + tenantId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The tenant id of the Azure application that is being used to
+       * authenticate Pub/Sub.
+       * 
+ * + * string tenant_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The tenantId to set. + * @return This builder for chaining. + */ + public Builder setTenantId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + tenantId_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The tenant id of the Azure application that is being used to
+       * authenticate Pub/Sub.
+       * 
+ * + * string tenant_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearTenantId() { + tenantId_ = getDefaultInstance().getTenantId(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The tenant id of the Azure application that is being used to
+       * authenticate Pub/Sub.
+       * 
+ * + * string tenant_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for tenantId to set. + * @return This builder for chaining. + */ + public Builder setTenantIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + tenantId_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + private java.lang.Object subscriptionId_ = ""; + + /** + * + * + *
+       * Optional. The Azure subscription id.
+       * 
+ * + * string subscription_id = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The subscriptionId. + */ + public java.lang.String getSubscriptionId() { + java.lang.Object ref = subscriptionId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscriptionId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The Azure subscription id.
+       * 
+ * + * string subscription_id = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for subscriptionId. + */ + public com.google.protobuf.ByteString getSubscriptionIdBytes() { + java.lang.Object ref = subscriptionId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscriptionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The Azure subscription id.
+       * 
+ * + * string subscription_id = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The subscriptionId to set. + * @return This builder for chaining. + */ + public Builder setSubscriptionId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + subscriptionId_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The Azure subscription id.
+       * 
+ * + * string subscription_id = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearSubscriptionId() { + subscriptionId_ = getDefaultInstance().getSubscriptionId(); + bitField0_ = (bitField0_ & ~0x00000040); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The Azure subscription id.
+       * 
+ * + * string subscription_id = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for subscriptionId to set. + * @return This builder for chaining. + */ + public Builder setSubscriptionIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + subscriptionId_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + private java.lang.Object gcpServiceAccount_ = ""; + + /** + * + * + *
+       * Optional. The GCP service account to be used for Federated Identity
+       * authentication.
+       * 
+ * + * string gcp_service_account = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The gcpServiceAccount. + */ + public java.lang.String getGcpServiceAccount() { + java.lang.Object ref = gcpServiceAccount_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + gcpServiceAccount_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The GCP service account to be used for Federated Identity
+       * authentication.
+       * 
+ * + * string gcp_service_account = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for gcpServiceAccount. + */ + public com.google.protobuf.ByteString getGcpServiceAccountBytes() { + java.lang.Object ref = gcpServiceAccount_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + gcpServiceAccount_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The GCP service account to be used for Federated Identity
+       * authentication.
+       * 
+ * + * string gcp_service_account = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The gcpServiceAccount to set. + * @return This builder for chaining. + */ + public Builder setGcpServiceAccount(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + gcpServiceAccount_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The GCP service account to be used for Federated Identity
+       * authentication.
+       * 
+ * + * string gcp_service_account = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearGcpServiceAccount() { + gcpServiceAccount_ = getDefaultInstance().getGcpServiceAccount(); + bitField0_ = (bitField0_ & ~0x00000080); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The GCP service account to be used for Federated Identity
+       * authentication.
+       * 
+ * + * string gcp_service_account = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for gcpServiceAccount to set. + * @return This builder for chaining. + */ + public Builder setGcpServiceAccountBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + gcpServiceAccount_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) + private static final com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs(); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AzureEventHubs parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface AwsMskOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Amazon
+     * MSK ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + int getStateValue(); + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Amazon
+     * MSK ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State getState(); + + /** + * + * + *
+     * Required. The Amazon Resource Name (ARN) that uniquely identifies the
+     * cluster.
+     * 
+ * + * string cluster_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The clusterArn. + */ + java.lang.String getClusterArn(); + + /** + * + * + *
+     * Required. The Amazon Resource Name (ARN) that uniquely identifies the
+     * cluster.
+     * 
+ * + * string cluster_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for clusterArn. + */ + com.google.protobuf.ByteString getClusterArnBytes(); + + /** + * + * + *
+     * Required. The name of the topic in the Amazon MSK cluster that Pub/Sub
+     * will import from.
+     * 
+ * + * + * string topic = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + java.lang.String getTopic(); + + /** + * + * + *
+     * Required. The name of the topic in the Amazon MSK cluster that Pub/Sub
+     * will import from.
+     * 
+ * + * + * string topic = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + com.google.protobuf.ByteString getTopicBytes(); + + /** + * + * + *
+     * Required. AWS role ARN to be used for Federated Identity authentication
+     * with Amazon MSK. Check the Pub/Sub docs for how to set up this role and
+     * the required permissions that need to be attached to it.
+     * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The awsRoleArn. + */ + java.lang.String getAwsRoleArn(); + + /** + * + * + *
+     * Required. AWS role ARN to be used for Federated Identity authentication
+     * with Amazon MSK. Check the Pub/Sub docs for how to set up this role and
+     * the required permissions that need to be attached to it.
+     * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for awsRoleArn. + */ + com.google.protobuf.ByteString getAwsRoleArnBytes(); + + /** + * + * + *
+     * Required. The GCP service account to be used for Federated Identity
+     * authentication with Amazon MSK (via a `AssumeRoleWithWebIdentity` call
+     * for the provided role). The `aws_role_arn` must be set up with
+     * `accounts.google.com:sub` equals to this service account number.
+     * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The gcpServiceAccount. + */ + java.lang.String getGcpServiceAccount(); + + /** + * + * + *
+     * Required. The GCP service account to be used for Federated Identity
+     * authentication with Amazon MSK (via a `AssumeRoleWithWebIdentity` call
+     * for the provided role). The `aws_role_arn` must be set up with
+     * `accounts.google.com:sub` equals to this service account number.
+     * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for gcpServiceAccount. + */ + com.google.protobuf.ByteString getGcpServiceAccountBytes(); + } + + /** + * + * + *
+   * Ingestion settings for Amazon MSK.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.AwsMsk} + */ + public static final class AwsMsk extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) + AwsMskOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AwsMsk"); + } + + // Use AwsMsk.newBuilder() to construct. + private AwsMsk(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AwsMsk() { + state_ = 0; + clusterArn_ = ""; + topic_ = ""; + awsRoleArn_ = ""; + gcpServiceAccount_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsMsk_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsMsk_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.class, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.Builder.class); + } + + /** + * + * + *
+     * Possible states for managed ingestion from Amazon MSK.
+     * 
+ * + * Protobuf enum {@code google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State} + */ + public enum State implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+       * Default value. This value is unused.
+       * 
+ * + * STATE_UNSPECIFIED = 0; + */ + STATE_UNSPECIFIED(0), + /** + * + * + *
+       * Ingestion is active.
+       * 
+ * + * ACTIVE = 1; + */ + ACTIVE(1), + /** + * + * + *
+       * Permission denied encountered while consuming data from Amazon MSK.
+       * 
+ * + * MSK_PERMISSION_DENIED = 2; + */ + MSK_PERMISSION_DENIED(2), + /** + * + * + *
+       * Permission denied encountered while publishing to the topic.
+       * 
+ * + * PUBLISH_PERMISSION_DENIED = 3; + */ + PUBLISH_PERMISSION_DENIED(3), + /** + * + * + *
+       * The provided MSK cluster wasn't found.
+       * 
+ * + * CLUSTER_NOT_FOUND = 4; + */ + CLUSTER_NOT_FOUND(4), + /** + * + * + *
+       * The provided topic wasn't found.
+       * 
+ * + * TOPIC_NOT_FOUND = 5; + */ + TOPIC_NOT_FOUND(5), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + + /** + * + * + *
+       * Default value. This value is unused.
+       * 
+ * + * STATE_UNSPECIFIED = 0; + */ + public static final int STATE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+       * Ingestion is active.
+       * 
+ * + * ACTIVE = 1; + */ + public static final int ACTIVE_VALUE = 1; + + /** + * + * + *
+       * Permission denied encountered while consuming data from Amazon MSK.
+       * 
+ * + * MSK_PERMISSION_DENIED = 2; + */ + public static final int MSK_PERMISSION_DENIED_VALUE = 2; + + /** + * + * + *
+       * Permission denied encountered while publishing to the topic.
+       * 
+ * + * PUBLISH_PERMISSION_DENIED = 3; + */ + public static final int PUBLISH_PERMISSION_DENIED_VALUE = 3; + + /** + * + * + *
+       * The provided MSK cluster wasn't found.
+       * 
+ * + * CLUSTER_NOT_FOUND = 4; + */ + public static final int CLUSTER_NOT_FOUND_VALUE = 4; + + /** + * + * + *
+       * The provided topic wasn't found.
+       * 
+ * + * TOPIC_NOT_FOUND = 5; + */ + public static final int TOPIC_NOT_FOUND_VALUE = 5; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static State valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static State forNumber(int value) { + switch (value) { + case 0: + return STATE_UNSPECIFIED; + case 1: + return ACTIVE; + case 2: + return MSK_PERMISSION_DENIED; + case 3: + return PUBLISH_PERMISSION_DENIED; + case 4: + return CLUSTER_NOT_FOUND; + case 5: + return TOPIC_NOT_FOUND; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public State findValueByNumber(int number) { + return State.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.getDescriptor() + .getEnumTypes() + .get(0); + } + + private static final State[] VALUES = values(); + + public static State valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private State(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State) + } + + public static final int STATE_FIELD_NUMBER = 1; + private int state_ = 0; + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Amazon
+     * MSK ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the Amazon
+     * MSK ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State getState() { + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State result = + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State.forNumber(state_); + return result == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State.UNRECOGNIZED + : result; + } + + public static final int CLUSTER_ARN_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object clusterArn_ = ""; + + /** + * + * + *
+     * Required. The Amazon Resource Name (ARN) that uniquely identifies the
+     * cluster.
+     * 
+ * + * string cluster_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The clusterArn. + */ + @java.lang.Override + public java.lang.String getClusterArn() { + java.lang.Object ref = clusterArn_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clusterArn_ = s; + return s; + } + } + + /** + * + * + *
+     * Required. The Amazon Resource Name (ARN) that uniquely identifies the
+     * cluster.
+     * 
+ * + * string cluster_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for clusterArn. + */ + @java.lang.Override + public com.google.protobuf.ByteString getClusterArnBytes() { + java.lang.Object ref = clusterArn_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clusterArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TOPIC_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object topic_ = ""; + + /** + * + * + *
+     * Required. The name of the topic in the Amazon MSK cluster that Pub/Sub
+     * will import from.
+     * 
+ * + * + * string topic = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + @java.lang.Override + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } + } + + /** + * + * + *
+     * Required. The name of the topic in the Amazon MSK cluster that Pub/Sub
+     * will import from.
+     * 
+ * + * + * string topic = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int AWS_ROLE_ARN_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private volatile java.lang.Object awsRoleArn_ = ""; + + /** + * + * + *
+     * Required. AWS role ARN to be used for Federated Identity authentication
+     * with Amazon MSK. Check the Pub/Sub docs for how to set up this role and
+     * the required permissions that need to be attached to it.
+     * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The awsRoleArn. + */ + @java.lang.Override + public java.lang.String getAwsRoleArn() { + java.lang.Object ref = awsRoleArn_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + awsRoleArn_ = s; + return s; + } + } + + /** + * + * + *
+     * Required. AWS role ARN to be used for Federated Identity authentication
+     * with Amazon MSK. Check the Pub/Sub docs for how to set up this role and
+     * the required permissions that need to be attached to it.
+     * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for awsRoleArn. + */ + @java.lang.Override + public com.google.protobuf.ByteString getAwsRoleArnBytes() { + java.lang.Object ref = awsRoleArn_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + awsRoleArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int GCP_SERVICE_ACCOUNT_FIELD_NUMBER = 5; + + @SuppressWarnings("serial") + private volatile java.lang.Object gcpServiceAccount_ = ""; + + /** + * + * + *
+     * Required. The GCP service account to be used for Federated Identity
+     * authentication with Amazon MSK (via a `AssumeRoleWithWebIdentity` call
+     * for the provided role). The `aws_role_arn` must be set up with
+     * `accounts.google.com:sub` equals to this service account number.
+     * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The gcpServiceAccount. + */ + @java.lang.Override + public java.lang.String getGcpServiceAccount() { + java.lang.Object ref = gcpServiceAccount_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + gcpServiceAccount_ = s; + return s; + } + } + + /** + * + * + *
+     * Required. The GCP service account to be used for Federated Identity
+     * authentication with Amazon MSK (via a `AssumeRoleWithWebIdentity` call
+     * for the provided role). The `aws_role_arn` must be set up with
+     * `accounts.google.com:sub` equals to this service account number.
+     * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for gcpServiceAccount. + */ + @java.lang.Override + public com.google.protobuf.ByteString getGcpServiceAccountBytes() { + java.lang.Object ref = gcpServiceAccount_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + gcpServiceAccount_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (state_ + != com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State.STATE_UNSPECIFIED + .getNumber()) { + output.writeEnum(1, state_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clusterArn_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, clusterArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, topic_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(awsRoleArn_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, awsRoleArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(gcpServiceAccount_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, gcpServiceAccount_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (state_ + != com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State.STATE_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, state_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clusterArn_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, clusterArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, topic_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(awsRoleArn_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, awsRoleArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(gcpServiceAccount_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, gcpServiceAccount_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk other = + (com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) obj; + + if (state_ != other.state_) return false; + if (!getClusterArn().equals(other.getClusterArn())) return false; + if (!getTopic().equals(other.getTopic())) return false; + if (!getAwsRoleArn().equals(other.getAwsRoleArn())) return false; + if (!getGcpServiceAccount().equals(other.getGcpServiceAccount())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + state_; + hash = (37 * hash) + CLUSTER_ARN_FIELD_NUMBER; + hash = (53 * hash) + getClusterArn().hashCode(); + hash = (37 * hash) + TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getTopic().hashCode(); + hash = (37 * hash) + AWS_ROLE_ARN_FIELD_NUMBER; + hash = (53 * hash) + getAwsRoleArn().hashCode(); + hash = (37 * hash) + GCP_SERVICE_ACCOUNT_FIELD_NUMBER; + hash = (53 * hash) + getGcpServiceAccount().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Ingestion settings for Amazon MSK.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.AwsMsk} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMskOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsMsk_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsMsk_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.class, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.Builder.class); + } + + // Construct using com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + state_ = 0; + clusterArn_ = ""; + topic_ = ""; + awsRoleArn_ = ""; + gcpServiceAccount_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsMsk_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk build() { + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk buildPartial() { + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk result = + new com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.state_ = state_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.clusterArn_ = clusterArn_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.topic_ = topic_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.awsRoleArn_ = awsRoleArn_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.gcpServiceAccount_ = gcpServiceAccount_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) { + return mergeFrom((com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk other) { + if (other == com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.getDefaultInstance()) + return this; + if (other.state_ != 0) { + setStateValue(other.getStateValue()); + } + if (!other.getClusterArn().isEmpty()) { + clusterArn_ = other.clusterArn_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getTopic().isEmpty()) { + topic_ = other.topic_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (!other.getAwsRoleArn().isEmpty()) { + awsRoleArn_ = other.awsRoleArn_; + bitField0_ |= 0x00000008; + onChanged(); + } + if (!other.getGcpServiceAccount().isEmpty()) { + gcpServiceAccount_ = other.gcpServiceAccount_; + bitField0_ |= 0x00000010; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + state_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + clusterArn_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + topic_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + awsRoleArn_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: + { + gcpServiceAccount_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000010; + break; + } // case 42 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private int state_ = 0; + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Amazon
+       * MSK ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Amazon
+       * MSK ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The enum numeric value on the wire for state to set. + * @return This builder for chaining. + */ + public Builder setStateValue(int value) { + state_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Amazon
+       * MSK ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State getState() { + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State result = + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State.forNumber(state_); + return result == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State.UNRECOGNIZED + : result; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Amazon
+       * MSK ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The state to set. + * @return This builder for chaining. + */ + public Builder setState(com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + state_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the Amazon
+       * MSK ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearState() { + bitField0_ = (bitField0_ & ~0x00000001); + state_ = 0; + onChanged(); + return this; + } + + private java.lang.Object clusterArn_ = ""; + + /** + * + * + *
+       * Required. The Amazon Resource Name (ARN) that uniquely identifies the
+       * cluster.
+       * 
+ * + * string cluster_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The clusterArn. + */ + public java.lang.String getClusterArn() { + java.lang.Object ref = clusterArn_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clusterArn_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Required. The Amazon Resource Name (ARN) that uniquely identifies the
+       * cluster.
+       * 
+ * + * string cluster_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for clusterArn. + */ + public com.google.protobuf.ByteString getClusterArnBytes() { + java.lang.Object ref = clusterArn_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clusterArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Required. The Amazon Resource Name (ARN) that uniquely identifies the
+       * cluster.
+       * 
+ * + * string cluster_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The clusterArn to set. + * @return This builder for chaining. + */ + public Builder setClusterArn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + clusterArn_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The Amazon Resource Name (ARN) that uniquely identifies the
+       * cluster.
+       * 
+ * + * string cluster_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearClusterArn() { + clusterArn_ = getDefaultInstance().getClusterArn(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The Amazon Resource Name (ARN) that uniquely identifies the
+       * cluster.
+       * 
+ * + * string cluster_arn = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for clusterArn to set. + * @return This builder for chaining. + */ + public Builder setClusterArnBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + clusterArn_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object topic_ = ""; + + /** + * + * + *
+       * Required. The name of the topic in the Amazon MSK cluster that Pub/Sub
+       * will import from.
+       * 
+ * + * + * string topic = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Required. The name of the topic in the Amazon MSK cluster that Pub/Sub
+       * will import from.
+       * 
+ * + * + * string topic = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Required. The name of the topic in the Amazon MSK cluster that Pub/Sub
+       * will import from.
+       * 
+ * + * + * string topic = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The topic to set. + * @return This builder for chaining. + */ + public Builder setTopic(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + topic_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The name of the topic in the Amazon MSK cluster that Pub/Sub
+       * will import from.
+       * 
+ * + * + * string topic = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearTopic() { + topic_ = getDefaultInstance().getTopic(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The name of the topic in the Amazon MSK cluster that Pub/Sub
+       * will import from.
+       * 
+ * + * + * string topic = 3 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for topic to set. + * @return This builder for chaining. + */ + public Builder setTopicBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + topic_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private java.lang.Object awsRoleArn_ = ""; + + /** + * + * + *
+       * Required. AWS role ARN to be used for Federated Identity authentication
+       * with Amazon MSK. Check the Pub/Sub docs for how to set up this role and
+       * the required permissions that need to be attached to it.
+       * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The awsRoleArn. + */ + public java.lang.String getAwsRoleArn() { + java.lang.Object ref = awsRoleArn_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + awsRoleArn_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Required. AWS role ARN to be used for Federated Identity authentication
+       * with Amazon MSK. Check the Pub/Sub docs for how to set up this role and
+       * the required permissions that need to be attached to it.
+       * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for awsRoleArn. + */ + public com.google.protobuf.ByteString getAwsRoleArnBytes() { + java.lang.Object ref = awsRoleArn_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + awsRoleArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Required. AWS role ARN to be used for Federated Identity authentication
+       * with Amazon MSK. Check the Pub/Sub docs for how to set up this role and
+       * the required permissions that need to be attached to it.
+       * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The awsRoleArn to set. + * @return This builder for chaining. + */ + public Builder setAwsRoleArn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + awsRoleArn_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. AWS role ARN to be used for Federated Identity authentication
+       * with Amazon MSK. Check the Pub/Sub docs for how to set up this role and
+       * the required permissions that need to be attached to it.
+       * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearAwsRoleArn() { + awsRoleArn_ = getDefaultInstance().getAwsRoleArn(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. AWS role ARN to be used for Federated Identity authentication
+       * with Amazon MSK. Check the Pub/Sub docs for how to set up this role and
+       * the required permissions that need to be attached to it.
+       * 
+ * + * string aws_role_arn = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for awsRoleArn to set. + * @return This builder for chaining. + */ + public Builder setAwsRoleArnBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + awsRoleArn_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + private java.lang.Object gcpServiceAccount_ = ""; + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with Amazon MSK (via a `AssumeRoleWithWebIdentity` call
+       * for the provided role). The `aws_role_arn` must be set up with
+       * `accounts.google.com:sub` equals to this service account number.
+       * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The gcpServiceAccount. + */ + public java.lang.String getGcpServiceAccount() { + java.lang.Object ref = gcpServiceAccount_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + gcpServiceAccount_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with Amazon MSK (via a `AssumeRoleWithWebIdentity` call
+       * for the provided role). The `aws_role_arn` must be set up with
+       * `accounts.google.com:sub` equals to this service account number.
+       * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for gcpServiceAccount. + */ + public com.google.protobuf.ByteString getGcpServiceAccountBytes() { + java.lang.Object ref = gcpServiceAccount_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + gcpServiceAccount_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with Amazon MSK (via a `AssumeRoleWithWebIdentity` call
+       * for the provided role). The `aws_role_arn` must be set up with
+       * `accounts.google.com:sub` equals to this service account number.
+       * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The gcpServiceAccount to set. + * @return This builder for chaining. + */ + public Builder setGcpServiceAccount(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + gcpServiceAccount_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with Amazon MSK (via a `AssumeRoleWithWebIdentity` call
+       * for the provided role). The `aws_role_arn` must be set up with
+       * `accounts.google.com:sub` equals to this service account number.
+       * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearGcpServiceAccount() { + gcpServiceAccount_ = getDefaultInstance().getGcpServiceAccount(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with Amazon MSK (via a `AssumeRoleWithWebIdentity` call
+       * for the provided role). The `aws_role_arn` must be set up with
+       * `accounts.google.com:sub` equals to this service account number.
+       * 
+ * + * string gcp_service_account = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for gcpServiceAccount to set. + * @return This builder for chaining. + */ + public Builder setGcpServiceAccountBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + gcpServiceAccount_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) + private static final com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk(); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AwsMsk parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface ConfluentCloudOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the
+     * Confluent Cloud ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + int getStateValue(); + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the
+     * Confluent Cloud ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State getState(); + + /** + * + * + *
+     * Required. The address of the bootstrap server. The format is url:port.
+     * 
+ * + * string bootstrap_server = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bootstrapServer. + */ + java.lang.String getBootstrapServer(); + + /** + * + * + *
+     * Required. The address of the bootstrap server. The format is url:port.
+     * 
+ * + * string bootstrap_server = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for bootstrapServer. + */ + com.google.protobuf.ByteString getBootstrapServerBytes(); + + /** + * + * + *
+     * Required. The id of the cluster.
+     * 
+ * + * string cluster_id = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The clusterId. + */ + java.lang.String getClusterId(); + + /** + * + * + *
+     * Required. The id of the cluster.
+     * 
+ * + * string cluster_id = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for clusterId. + */ + com.google.protobuf.ByteString getClusterIdBytes(); + + /** + * + * + *
+     * Required. The name of the topic in the Confluent Cloud cluster that
+     * Pub/Sub will import from.
+     * 
+ * + * string topic = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The topic. + */ + java.lang.String getTopic(); + + /** + * + * + *
+     * Required. The name of the topic in the Confluent Cloud cluster that
+     * Pub/Sub will import from.
+     * 
+ * + * string topic = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for topic. + */ + com.google.protobuf.ByteString getTopicBytes(); + + /** + * + * + *
+     * Required. The id of the identity pool to be used for Federated Identity
+     * authentication with Confluent Cloud. See
+     * https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/oauth/identity-pools.html#add-oauth-identity-pools.
+     * 
+ * + * string identity_pool_id = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The identityPoolId. + */ + java.lang.String getIdentityPoolId(); + + /** + * + * + *
+     * Required. The id of the identity pool to be used for Federated Identity
+     * authentication with Confluent Cloud. See
+     * https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/oauth/identity-pools.html#add-oauth-identity-pools.
+     * 
+ * + * string identity_pool_id = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for identityPoolId. + */ + com.google.protobuf.ByteString getIdentityPoolIdBytes(); + + /** + * + * + *
+     * Required. The GCP service account to be used for Federated Identity
+     * authentication with `identity_pool_id`.
+     * 
+ * + * string gcp_service_account = 6 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The gcpServiceAccount. + */ + java.lang.String getGcpServiceAccount(); + + /** + * + * + *
+     * Required. The GCP service account to be used for Federated Identity
+     * authentication with `identity_pool_id`.
+     * 
+ * + * string gcp_service_account = 6 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for gcpServiceAccount. + */ + com.google.protobuf.ByteString getGcpServiceAccountBytes(); + } + + /** + * + * + *
+   * Ingestion settings for Confluent Cloud.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud} + */ + public static final class ConfluentCloud extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) + ConfluentCloudOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ConfluentCloud"); + } + + // Use ConfluentCloud.newBuilder() to construct. + private ConfluentCloud(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ConfluentCloud() { + state_ = 0; + bootstrapServer_ = ""; + clusterId_ = ""; + topic_ = ""; + identityPoolId_ = ""; + gcpServiceAccount_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_ConfluentCloud_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_ConfluentCloud_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.class, + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.Builder.class); + } + + /** + * + * + *
+     * Possible states for managed ingestion from Confluent Cloud.
+     * 
+ * + * Protobuf enum {@code google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State} + */ + public enum State implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+       * Default value. This value is unused.
+       * 
+ * + * STATE_UNSPECIFIED = 0; + */ + STATE_UNSPECIFIED(0), + /** + * + * + *
+       * Ingestion is active.
+       * 
+ * + * ACTIVE = 1; + */ + ACTIVE(1), + /** + * + * + *
+       * Permission denied encountered while consuming data from Confluent
+       * Cloud.
+       * 
+ * + * CONFLUENT_CLOUD_PERMISSION_DENIED = 2; + */ + CONFLUENT_CLOUD_PERMISSION_DENIED(2), + /** + * + * + *
+       * Permission denied encountered while publishing to the topic.
+       * 
+ * + * PUBLISH_PERMISSION_DENIED = 3; + */ + PUBLISH_PERMISSION_DENIED(3), + /** + * + * + *
+       * The provided bootstrap server address is unreachable.
+       * 
+ * + * UNREACHABLE_BOOTSTRAP_SERVER = 4; + */ + UNREACHABLE_BOOTSTRAP_SERVER(4), + /** + * + * + *
+       * The provided cluster wasn't found.
+       * 
+ * + * CLUSTER_NOT_FOUND = 5; + */ + CLUSTER_NOT_FOUND(5), + /** + * + * + *
+       * The provided topic wasn't found.
+       * 
+ * + * TOPIC_NOT_FOUND = 6; + */ + TOPIC_NOT_FOUND(6), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + + /** + * + * + *
+       * Default value. This value is unused.
+       * 
+ * + * STATE_UNSPECIFIED = 0; + */ + public static final int STATE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+       * Ingestion is active.
+       * 
+ * + * ACTIVE = 1; + */ + public static final int ACTIVE_VALUE = 1; + + /** + * + * + *
+       * Permission denied encountered while consuming data from Confluent
+       * Cloud.
+       * 
+ * + * CONFLUENT_CLOUD_PERMISSION_DENIED = 2; + */ + public static final int CONFLUENT_CLOUD_PERMISSION_DENIED_VALUE = 2; + + /** + * + * + *
+       * Permission denied encountered while publishing to the topic.
+       * 
+ * + * PUBLISH_PERMISSION_DENIED = 3; + */ + public static final int PUBLISH_PERMISSION_DENIED_VALUE = 3; + + /** + * + * + *
+       * The provided bootstrap server address is unreachable.
+       * 
+ * + * UNREACHABLE_BOOTSTRAP_SERVER = 4; + */ + public static final int UNREACHABLE_BOOTSTRAP_SERVER_VALUE = 4; + + /** + * + * + *
+       * The provided cluster wasn't found.
+       * 
+ * + * CLUSTER_NOT_FOUND = 5; + */ + public static final int CLUSTER_NOT_FOUND_VALUE = 5; + + /** + * + * + *
+       * The provided topic wasn't found.
+       * 
+ * + * TOPIC_NOT_FOUND = 6; + */ + public static final int TOPIC_NOT_FOUND_VALUE = 6; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static State valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static State forNumber(int value) { + switch (value) { + case 0: + return STATE_UNSPECIFIED; + case 1: + return ACTIVE; + case 2: + return CONFLUENT_CLOUD_PERMISSION_DENIED; + case 3: + return PUBLISH_PERMISSION_DENIED; + case 4: + return UNREACHABLE_BOOTSTRAP_SERVER; + case 5: + return CLUSTER_NOT_FOUND; + case 6: + return TOPIC_NOT_FOUND; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public State findValueByNumber(int number) { + return State.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.getDescriptor() + .getEnumTypes() + .get(0); + } + + private static final State[] VALUES = values(); + + public static State valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private State(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State) + } + + public static final int STATE_FIELD_NUMBER = 1; + private int state_ = 0; + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the
+     * Confluent Cloud ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+     * Output only. An output-only field that indicates the state of the
+     * Confluent Cloud ingestion source.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State getState() { + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State result = + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State.forNumber(state_); + return result == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State.UNRECOGNIZED + : result; + } + + public static final int BOOTSTRAP_SERVER_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object bootstrapServer_ = ""; + + /** + * + * + *
+     * Required. The address of the bootstrap server. The format is url:port.
+     * 
+ * + * string bootstrap_server = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bootstrapServer. + */ + @java.lang.Override + public java.lang.String getBootstrapServer() { + java.lang.Object ref = bootstrapServer_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + bootstrapServer_ = s; + return s; + } + } + + /** + * + * + *
+     * Required. The address of the bootstrap server. The format is url:port.
+     * 
+ * + * string bootstrap_server = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for bootstrapServer. + */ + @java.lang.Override + public com.google.protobuf.ByteString getBootstrapServerBytes() { + java.lang.Object ref = bootstrapServer_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + bootstrapServer_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int CLUSTER_ID_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object clusterId_ = ""; + + /** + * + * + *
+     * Required. The id of the cluster.
+     * 
+ * + * string cluster_id = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The clusterId. + */ + @java.lang.Override + public java.lang.String getClusterId() { + java.lang.Object ref = clusterId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clusterId_ = s; + return s; + } + } + + /** + * + * + *
+     * Required. The id of the cluster.
+     * 
+ * + * string cluster_id = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for clusterId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getClusterIdBytes() { + java.lang.Object ref = clusterId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clusterId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TOPIC_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private volatile java.lang.Object topic_ = ""; + + /** + * + * + *
+     * Required. The name of the topic in the Confluent Cloud cluster that
+     * Pub/Sub will import from.
+     * 
+ * + * string topic = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The topic. + */ + @java.lang.Override + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } + } + + /** + * + * + *
+     * Required. The name of the topic in the Confluent Cloud cluster that
+     * Pub/Sub will import from.
+     * 
+ * + * string topic = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for topic. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int IDENTITY_POOL_ID_FIELD_NUMBER = 5; + + @SuppressWarnings("serial") + private volatile java.lang.Object identityPoolId_ = ""; + + /** + * + * + *
+     * Required. The id of the identity pool to be used for Federated Identity
+     * authentication with Confluent Cloud. See
+     * https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/oauth/identity-pools.html#add-oauth-identity-pools.
+     * 
+ * + * string identity_pool_id = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The identityPoolId. + */ + @java.lang.Override + public java.lang.String getIdentityPoolId() { + java.lang.Object ref = identityPoolId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + identityPoolId_ = s; + return s; + } + } + + /** + * + * + *
+     * Required. The id of the identity pool to be used for Federated Identity
+     * authentication with Confluent Cloud. See
+     * https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/oauth/identity-pools.html#add-oauth-identity-pools.
+     * 
+ * + * string identity_pool_id = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for identityPoolId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getIdentityPoolIdBytes() { + java.lang.Object ref = identityPoolId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + identityPoolId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int GCP_SERVICE_ACCOUNT_FIELD_NUMBER = 6; + + @SuppressWarnings("serial") + private volatile java.lang.Object gcpServiceAccount_ = ""; + + /** + * + * + *
+     * Required. The GCP service account to be used for Federated Identity
+     * authentication with `identity_pool_id`.
+     * 
+ * + * string gcp_service_account = 6 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The gcpServiceAccount. + */ + @java.lang.Override + public java.lang.String getGcpServiceAccount() { + java.lang.Object ref = gcpServiceAccount_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + gcpServiceAccount_ = s; + return s; + } + } + + /** + * + * + *
+     * Required. The GCP service account to be used for Federated Identity
+     * authentication with `identity_pool_id`.
+     * 
+ * + * string gcp_service_account = 6 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for gcpServiceAccount. + */ + @java.lang.Override + public com.google.protobuf.ByteString getGcpServiceAccountBytes() { + java.lang.Object ref = gcpServiceAccount_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + gcpServiceAccount_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (state_ + != com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State.STATE_UNSPECIFIED + .getNumber()) { + output.writeEnum(1, state_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(bootstrapServer_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, bootstrapServer_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clusterId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, clusterId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, topic_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(identityPoolId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, identityPoolId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(gcpServiceAccount_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 6, gcpServiceAccount_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (state_ + != com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State.STATE_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, state_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(bootstrapServer_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, bootstrapServer_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clusterId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, clusterId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, topic_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(identityPoolId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, identityPoolId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(gcpServiceAccount_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(6, gcpServiceAccount_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud other = + (com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) obj; + + if (state_ != other.state_) return false; + if (!getBootstrapServer().equals(other.getBootstrapServer())) return false; + if (!getClusterId().equals(other.getClusterId())) return false; + if (!getTopic().equals(other.getTopic())) return false; + if (!getIdentityPoolId().equals(other.getIdentityPoolId())) return false; + if (!getGcpServiceAccount().equals(other.getGcpServiceAccount())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + state_; + hash = (37 * hash) + BOOTSTRAP_SERVER_FIELD_NUMBER; + hash = (53 * hash) + getBootstrapServer().hashCode(); + hash = (37 * hash) + CLUSTER_ID_FIELD_NUMBER; + hash = (53 * hash) + getClusterId().hashCode(); + hash = (37 * hash) + TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getTopic().hashCode(); + hash = (37 * hash) + IDENTITY_POOL_ID_FIELD_NUMBER; + hash = (53 * hash) + getIdentityPoolId().hashCode(); + hash = (37 * hash) + GCP_SERVICE_ACCOUNT_FIELD_NUMBER; + hash = (53 * hash) + getGcpServiceAccount().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Ingestion settings for Confluent Cloud.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloudOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_ConfluentCloud_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_ConfluentCloud_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.class, + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.Builder.class); + } + + // Construct using + // com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + state_ = 0; + bootstrapServer_ = ""; + clusterId_ = ""; + topic_ = ""; + identityPoolId_ = ""; + gcpServiceAccount_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_ConfluentCloud_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud build() { + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud buildPartial() { + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud result = + new com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.state_ = state_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.bootstrapServer_ = bootstrapServer_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.clusterId_ = clusterId_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.topic_ = topic_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.identityPoolId_ = identityPoolId_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.gcpServiceAccount_ = gcpServiceAccount_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) { + return mergeFrom((com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud other) { + if (other + == com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.getDefaultInstance()) + return this; + if (other.state_ != 0) { + setStateValue(other.getStateValue()); + } + if (!other.getBootstrapServer().isEmpty()) { + bootstrapServer_ = other.bootstrapServer_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getClusterId().isEmpty()) { + clusterId_ = other.clusterId_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (!other.getTopic().isEmpty()) { + topic_ = other.topic_; + bitField0_ |= 0x00000008; + onChanged(); + } + if (!other.getIdentityPoolId().isEmpty()) { + identityPoolId_ = other.identityPoolId_; + bitField0_ |= 0x00000010; + onChanged(); + } + if (!other.getGcpServiceAccount().isEmpty()) { + gcpServiceAccount_ = other.gcpServiceAccount_; + bitField0_ |= 0x00000020; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + state_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + bootstrapServer_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + clusterId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + topic_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: + { + identityPoolId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000010; + break; + } // case 42 + case 50: + { + gcpServiceAccount_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000020; + break; + } // case 50 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private int state_ = 0; + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the
+       * Confluent Cloud ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the
+       * Confluent Cloud ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The enum numeric value on the wire for state to set. + * @return This builder for chaining. + */ + public Builder setStateValue(int value) { + state_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the
+       * Confluent Cloud ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State getState() { + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State result = + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State.forNumber(state_); + return result == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State.UNRECOGNIZED + : result; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the
+       * Confluent Cloud ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The state to set. + * @return This builder for chaining. + */ + public Builder setState( + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + state_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+       * Output only. An output-only field that indicates the state of the
+       * Confluent Cloud ingestion source.
+       * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.State state = 1 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearState() { + bitField0_ = (bitField0_ & ~0x00000001); + state_ = 0; + onChanged(); + return this; + } + + private java.lang.Object bootstrapServer_ = ""; + + /** + * + * + *
+       * Required. The address of the bootstrap server. The format is url:port.
+       * 
+ * + * string bootstrap_server = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bootstrapServer. + */ + public java.lang.String getBootstrapServer() { + java.lang.Object ref = bootstrapServer_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + bootstrapServer_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Required. The address of the bootstrap server. The format is url:port.
+       * 
+ * + * string bootstrap_server = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for bootstrapServer. + */ + public com.google.protobuf.ByteString getBootstrapServerBytes() { + java.lang.Object ref = bootstrapServer_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + bootstrapServer_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Required. The address of the bootstrap server. The format is url:port.
+       * 
+ * + * string bootstrap_server = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bootstrapServer to set. + * @return This builder for chaining. + */ + public Builder setBootstrapServer(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bootstrapServer_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The address of the bootstrap server. The format is url:port.
+       * 
+ * + * string bootstrap_server = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearBootstrapServer() { + bootstrapServer_ = getDefaultInstance().getBootstrapServer(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The address of the bootstrap server. The format is url:port.
+       * 
+ * + * string bootstrap_server = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for bootstrapServer to set. + * @return This builder for chaining. + */ + public Builder setBootstrapServerBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + bootstrapServer_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object clusterId_ = ""; + + /** + * + * + *
+       * Required. The id of the cluster.
+       * 
+ * + * string cluster_id = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The clusterId. + */ + public java.lang.String getClusterId() { + java.lang.Object ref = clusterId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clusterId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Required. The id of the cluster.
+       * 
+ * + * string cluster_id = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for clusterId. + */ + public com.google.protobuf.ByteString getClusterIdBytes() { + java.lang.Object ref = clusterId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clusterId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Required. The id of the cluster.
+       * 
+ * + * string cluster_id = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The clusterId to set. + * @return This builder for chaining. + */ + public Builder setClusterId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + clusterId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The id of the cluster.
+       * 
+ * + * string cluster_id = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearClusterId() { + clusterId_ = getDefaultInstance().getClusterId(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The id of the cluster.
+       * 
+ * + * string cluster_id = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for clusterId to set. + * @return This builder for chaining. + */ + public Builder setClusterIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + clusterId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private java.lang.Object topic_ = ""; + + /** + * + * + *
+       * Required. The name of the topic in the Confluent Cloud cluster that
+       * Pub/Sub will import from.
+       * 
+ * + * string topic = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The topic. + */ + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Required. The name of the topic in the Confluent Cloud cluster that
+       * Pub/Sub will import from.
+       * 
+ * + * string topic = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for topic. + */ + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Required. The name of the topic in the Confluent Cloud cluster that
+       * Pub/Sub will import from.
+       * 
+ * + * string topic = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The topic to set. + * @return This builder for chaining. + */ + public Builder setTopic(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + topic_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The name of the topic in the Confluent Cloud cluster that
+       * Pub/Sub will import from.
+       * 
+ * + * string topic = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearTopic() { + topic_ = getDefaultInstance().getTopic(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The name of the topic in the Confluent Cloud cluster that
+       * Pub/Sub will import from.
+       * 
+ * + * string topic = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for topic to set. + * @return This builder for chaining. + */ + public Builder setTopicBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + topic_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + private java.lang.Object identityPoolId_ = ""; + + /** + * + * + *
+       * Required. The id of the identity pool to be used for Federated Identity
+       * authentication with Confluent Cloud. See
+       * https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/oauth/identity-pools.html#add-oauth-identity-pools.
+       * 
+ * + * string identity_pool_id = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The identityPoolId. + */ + public java.lang.String getIdentityPoolId() { + java.lang.Object ref = identityPoolId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + identityPoolId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Required. The id of the identity pool to be used for Federated Identity
+       * authentication with Confluent Cloud. See
+       * https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/oauth/identity-pools.html#add-oauth-identity-pools.
+       * 
+ * + * string identity_pool_id = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for identityPoolId. + */ + public com.google.protobuf.ByteString getIdentityPoolIdBytes() { + java.lang.Object ref = identityPoolId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + identityPoolId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Required. The id of the identity pool to be used for Federated Identity
+       * authentication with Confluent Cloud. See
+       * https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/oauth/identity-pools.html#add-oauth-identity-pools.
+       * 
+ * + * string identity_pool_id = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The identityPoolId to set. + * @return This builder for chaining. + */ + public Builder setIdentityPoolId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + identityPoolId_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The id of the identity pool to be used for Federated Identity
+       * authentication with Confluent Cloud. See
+       * https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/oauth/identity-pools.html#add-oauth-identity-pools.
+       * 
+ * + * string identity_pool_id = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearIdentityPoolId() { + identityPoolId_ = getDefaultInstance().getIdentityPoolId(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The id of the identity pool to be used for Federated Identity
+       * authentication with Confluent Cloud. See
+       * https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/oauth/identity-pools.html#add-oauth-identity-pools.
+       * 
+ * + * string identity_pool_id = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for identityPoolId to set. + * @return This builder for chaining. + */ + public Builder setIdentityPoolIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + identityPoolId_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + private java.lang.Object gcpServiceAccount_ = ""; + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with `identity_pool_id`.
+       * 
+ * + * string gcp_service_account = 6 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The gcpServiceAccount. + */ + public java.lang.String getGcpServiceAccount() { + java.lang.Object ref = gcpServiceAccount_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + gcpServiceAccount_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with `identity_pool_id`.
+       * 
+ * + * string gcp_service_account = 6 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for gcpServiceAccount. + */ + public com.google.protobuf.ByteString getGcpServiceAccountBytes() { + java.lang.Object ref = gcpServiceAccount_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + gcpServiceAccount_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with `identity_pool_id`.
+       * 
+ * + * string gcp_service_account = 6 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The gcpServiceAccount to set. + * @return This builder for chaining. + */ + public Builder setGcpServiceAccount(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + gcpServiceAccount_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with `identity_pool_id`.
+       * 
+ * + * string gcp_service_account = 6 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearGcpServiceAccount() { + gcpServiceAccount_ = getDefaultInstance().getGcpServiceAccount(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + return this; + } + + /** + * + * + *
+       * Required. The GCP service account to be used for Federated Identity
+       * authentication with `identity_pool_id`.
+       * 
+ * + * string gcp_service_account = 6 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for gcpServiceAccount to set. + * @return This builder for chaining. + */ + public Builder setGcpServiceAccountBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + gcpServiceAccount_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) + private static final com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud(); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ConfluentCloud parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int bitField0_; + private int sourceCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object source_; + + public enum SourceCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + AWS_KINESIS(1), + CLOUD_STORAGE(2), + AZURE_EVENT_HUBS(3), + AWS_MSK(5), + CONFLUENT_CLOUD(6), + SOURCE_NOT_SET(0); + private final int value; + + private SourceCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static SourceCase valueOf(int value) { + return forNumber(value); + } + + public static SourceCase forNumber(int value) { + switch (value) { + case 1: + return AWS_KINESIS; + case 2: + return CLOUD_STORAGE; + case 3: + return AZURE_EVENT_HUBS; + case 5: + return AWS_MSK; + case 6: + return CONFLUENT_CLOUD; + case 0: + return SOURCE_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public SourceCase getSourceCase() { + return SourceCase.forNumber(sourceCase_); + } + + public static final int AWS_KINESIS_FIELD_NUMBER = 1; + + /** + * + * + *
+   * Optional. Amazon Kinesis Data Streams.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the awsKinesis field is set. + */ + @java.lang.Override + public boolean hasAwsKinesis() { + return sourceCase_ == 1; + } + + /** + * + * + *
+   * Optional. Amazon Kinesis Data Streams.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The awsKinesis. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis getAwsKinesis() { + if (sourceCase_ == 1) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. Amazon Kinesis Data Streams.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesisOrBuilder + getAwsKinesisOrBuilder() { + if (sourceCase_ == 1) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.getDefaultInstance(); + } + + public static final int CLOUD_STORAGE_FIELD_NUMBER = 2; + + /** + * + * + *
+   * Optional. Cloud Storage.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cloudStorage field is set. + */ + @java.lang.Override + public boolean hasCloudStorage() { + return sourceCase_ == 2; + } + + /** + * + * + *
+   * Optional. Cloud Storage.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cloudStorage. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage getCloudStorage() { + if (sourceCase_ == 2) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. Cloud Storage.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorageOrBuilder + getCloudStorageOrBuilder() { + if (sourceCase_ == 2) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.getDefaultInstance(); + } + + public static final int AZURE_EVENT_HUBS_FIELD_NUMBER = 3; + + /** + * + * + *
+   * Optional. Azure Event Hubs.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the azureEventHubs field is set. + */ + @java.lang.Override + public boolean hasAzureEventHubs() { + return sourceCase_ == 3; + } + + /** + * + * + *
+   * Optional. Azure Event Hubs.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The azureEventHubs. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs getAzureEventHubs() { + if (sourceCase_ == 3) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. Azure Event Hubs.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubsOrBuilder + getAzureEventHubsOrBuilder() { + if (sourceCase_ == 3) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.getDefaultInstance(); + } + + public static final int AWS_MSK_FIELD_NUMBER = 5; + + /** + * + * + *
+   * Optional. Amazon MSK.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the awsMsk field is set. + */ + @java.lang.Override + public boolean hasAwsMsk() { + return sourceCase_ == 5; + } + + /** + * + * + *
+   * Optional. Amazon MSK.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The awsMsk. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk getAwsMsk() { + if (sourceCase_ == 5) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. Amazon MSK.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsMskOrBuilder getAwsMskOrBuilder() { + if (sourceCase_ == 5) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.getDefaultInstance(); + } + + public static final int CONFLUENT_CLOUD_FIELD_NUMBER = 6; + + /** + * + * + *
+   * Optional. Confluent Cloud.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the confluentCloud field is set. + */ + @java.lang.Override + public boolean hasConfluentCloud() { + return sourceCase_ == 6; + } + + /** + * + * + *
+   * Optional. Confluent Cloud.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The confluentCloud. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud getConfluentCloud() { + if (sourceCase_ == 6) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. Confluent Cloud.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloudOrBuilder + getConfluentCloudOrBuilder() { + if (sourceCase_ == 6) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.getDefaultInstance(); + } + + public static final int PLATFORM_LOGS_SETTINGS_FIELD_NUMBER = 4; + private com.google.pubsub.v1.PlatformLogsSettings platformLogsSettings_; + + /** + * + * + *
+   * Optional. Platform Logs settings. If unset, no Platform Logs will be
+   * generated.
+   * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the platformLogsSettings field is set. + */ + @java.lang.Override + public boolean hasPlatformLogsSettings() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Optional. Platform Logs settings. If unset, no Platform Logs will be
+   * generated.
+   * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The platformLogsSettings. + */ + @java.lang.Override + public com.google.pubsub.v1.PlatformLogsSettings getPlatformLogsSettings() { + return platformLogsSettings_ == null + ? com.google.pubsub.v1.PlatformLogsSettings.getDefaultInstance() + : platformLogsSettings_; + } + + /** + * + * + *
+   * Optional. Platform Logs settings. If unset, no Platform Logs will be
+   * generated.
+   * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.PlatformLogsSettingsOrBuilder getPlatformLogsSettingsOrBuilder() { + return platformLogsSettings_ == null + ? com.google.pubsub.v1.PlatformLogsSettings.getDefaultInstance() + : platformLogsSettings_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (sourceCase_ == 1) { + output.writeMessage(1, (com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) source_); + } + if (sourceCase_ == 2) { + output.writeMessage( + 2, (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) source_); + } + if (sourceCase_ == 3) { + output.writeMessage( + 3, (com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) source_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(4, getPlatformLogsSettings()); + } + if (sourceCase_ == 5) { + output.writeMessage(5, (com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) source_); + } + if (sourceCase_ == 6) { + output.writeMessage( + 6, (com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) source_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (sourceCase_ == 1) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 1, (com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) source_); + } + if (sourceCase_ == 2) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 2, (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) source_); + } + if (sourceCase_ == 3) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 3, (com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) source_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize(4, getPlatformLogsSettings()); + } + if (sourceCase_ == 5) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 5, (com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) source_); + } + if (sourceCase_ == 6) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 6, (com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) source_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.IngestionDataSourceSettings)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionDataSourceSettings other = + (com.google.pubsub.v1.IngestionDataSourceSettings) obj; + + if (hasPlatformLogsSettings() != other.hasPlatformLogsSettings()) return false; + if (hasPlatformLogsSettings()) { + if (!getPlatformLogsSettings().equals(other.getPlatformLogsSettings())) return false; + } + if (!getSourceCase().equals(other.getSourceCase())) return false; + switch (sourceCase_) { + case 1: + if (!getAwsKinesis().equals(other.getAwsKinesis())) return false; + break; + case 2: + if (!getCloudStorage().equals(other.getCloudStorage())) return false; + break; + case 3: + if (!getAzureEventHubs().equals(other.getAzureEventHubs())) return false; + break; + case 5: + if (!getAwsMsk().equals(other.getAwsMsk())) return false; + break; + case 6: + if (!getConfluentCloud().equals(other.getConfluentCloud())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasPlatformLogsSettings()) { + hash = (37 * hash) + PLATFORM_LOGS_SETTINGS_FIELD_NUMBER; + hash = (53 * hash) + getPlatformLogsSettings().hashCode(); + } + switch (sourceCase_) { + case 1: + hash = (37 * hash) + AWS_KINESIS_FIELD_NUMBER; + hash = (53 * hash) + getAwsKinesis().hashCode(); + break; + case 2: + hash = (37 * hash) + CLOUD_STORAGE_FIELD_NUMBER; + hash = (53 * hash) + getCloudStorage().hashCode(); + break; + case 3: + hash = (37 * hash) + AZURE_EVENT_HUBS_FIELD_NUMBER; + hash = (53 * hash) + getAzureEventHubs().hashCode(); + break; + case 5: + hash = (37 * hash) + AWS_MSK_FIELD_NUMBER; + hash = (53 * hash) + getAwsMsk().hashCode(); + break; + case 6: + hash = (37 * hash) + CONFLUENT_CLOUD_FIELD_NUMBER; + hash = (53 * hash) + getConfluentCloud().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.IngestionDataSourceSettings prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Settings for an ingestion data source on a topic.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionDataSourceSettings} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionDataSourceSettings) + com.google.pubsub.v1.IngestionDataSourceSettingsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionDataSourceSettings.class, + com.google.pubsub.v1.IngestionDataSourceSettings.Builder.class); + } + + // Construct using com.google.pubsub.v1.IngestionDataSourceSettings.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetPlatformLogsSettingsFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (awsKinesisBuilder_ != null) { + awsKinesisBuilder_.clear(); + } + if (cloudStorageBuilder_ != null) { + cloudStorageBuilder_.clear(); + } + if (azureEventHubsBuilder_ != null) { + azureEventHubsBuilder_.clear(); + } + if (awsMskBuilder_ != null) { + awsMskBuilder_.clear(); + } + if (confluentCloudBuilder_ != null) { + confluentCloudBuilder_.clear(); + } + platformLogsSettings_ = null; + if (platformLogsSettingsBuilder_ != null) { + platformLogsSettingsBuilder_.dispose(); + platformLogsSettingsBuilder_ = null; + } + sourceCase_ = 0; + source_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionDataSourceSettings_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionDataSourceSettings.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings build() { + com.google.pubsub.v1.IngestionDataSourceSettings result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings buildPartial() { + com.google.pubsub.v1.IngestionDataSourceSettings result = + new com.google.pubsub.v1.IngestionDataSourceSettings(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.IngestionDataSourceSettings result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000020) != 0)) { + result.platformLogsSettings_ = + platformLogsSettingsBuilder_ == null + ? platformLogsSettings_ + : platformLogsSettingsBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + private void buildPartialOneofs(com.google.pubsub.v1.IngestionDataSourceSettings result) { + result.sourceCase_ = sourceCase_; + result.source_ = this.source_; + if (sourceCase_ == 1 && awsKinesisBuilder_ != null) { + result.source_ = awsKinesisBuilder_.build(); + } + if (sourceCase_ == 2 && cloudStorageBuilder_ != null) { + result.source_ = cloudStorageBuilder_.build(); + } + if (sourceCase_ == 3 && azureEventHubsBuilder_ != null) { + result.source_ = azureEventHubsBuilder_.build(); + } + if (sourceCase_ == 5 && awsMskBuilder_ != null) { + result.source_ = awsMskBuilder_.build(); + } + if (sourceCase_ == 6 && confluentCloudBuilder_ != null) { + result.source_ = confluentCloudBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.IngestionDataSourceSettings) { + return mergeFrom((com.google.pubsub.v1.IngestionDataSourceSettings) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.IngestionDataSourceSettings other) { + if (other == com.google.pubsub.v1.IngestionDataSourceSettings.getDefaultInstance()) + return this; + if (other.hasPlatformLogsSettings()) { + mergePlatformLogsSettings(other.getPlatformLogsSettings()); + } + switch (other.getSourceCase()) { + case AWS_KINESIS: + { + mergeAwsKinesis(other.getAwsKinesis()); + break; + } + case CLOUD_STORAGE: + { + mergeCloudStorage(other.getCloudStorage()); + break; + } + case AZURE_EVENT_HUBS: + { + mergeAzureEventHubs(other.getAzureEventHubs()); + break; + } + case AWS_MSK: + { + mergeAwsMsk(other.getAwsMsk()); + break; + } + case CONFLUENT_CLOUD: + { + mergeConfluentCloud(other.getConfluentCloud()); + break; + } + case SOURCE_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage( + internalGetAwsKinesisFieldBuilder().getBuilder(), extensionRegistry); + sourceCase_ = 1; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetCloudStorageFieldBuilder().getBuilder(), extensionRegistry); + sourceCase_ = 2; + break; + } // case 18 + case 26: + { + input.readMessage( + internalGetAzureEventHubsFieldBuilder().getBuilder(), extensionRegistry); + sourceCase_ = 3; + break; + } // case 26 + case 34: + { + input.readMessage( + internalGetPlatformLogsSettingsFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000020; + break; + } // case 34 + case 42: + { + input.readMessage(internalGetAwsMskFieldBuilder().getBuilder(), extensionRegistry); + sourceCase_ = 5; + break; + } // case 42 + case 50: + { + input.readMessage( + internalGetConfluentCloudFieldBuilder().getBuilder(), extensionRegistry); + sourceCase_ = 6; + break; + } // case 50 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int sourceCase_ = 0; + private java.lang.Object source_; + + public SourceCase getSourceCase() { + return SourceCase.forNumber(sourceCase_); + } + + public Builder clearSource() { + sourceCase_ = 0; + source_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesisOrBuilder> + awsKinesisBuilder_; + + /** + * + * + *
+     * Optional. Amazon Kinesis Data Streams.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the awsKinesis field is set. + */ + @java.lang.Override + public boolean hasAwsKinesis() { + return sourceCase_ == 1; + } + + /** + * + * + *
+     * Optional. Amazon Kinesis Data Streams.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The awsKinesis. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis getAwsKinesis() { + if (awsKinesisBuilder_ == null) { + if (sourceCase_ == 1) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.getDefaultInstance(); + } else { + if (sourceCase_ == 1) { + return awsKinesisBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Amazon Kinesis Data Streams.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAwsKinesis( + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis value) { + if (awsKinesisBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + source_ = value; + onChanged(); + } else { + awsKinesisBuilder_.setMessage(value); + } + sourceCase_ = 1; + return this; + } + + /** + * + * + *
+     * Optional. Amazon Kinesis Data Streams.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAwsKinesis( + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.Builder builderForValue) { + if (awsKinesisBuilder_ == null) { + source_ = builderForValue.build(); + onChanged(); + } else { + awsKinesisBuilder_.setMessage(builderForValue.build()); + } + sourceCase_ = 1; + return this; + } + + /** + * + * + *
+     * Optional. Amazon Kinesis Data Streams.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeAwsKinesis( + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis value) { + if (awsKinesisBuilder_ == null) { + if (sourceCase_ == 1 + && source_ + != com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis + .getDefaultInstance()) { + source_ = + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.newBuilder( + (com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) source_) + .mergeFrom(value) + .buildPartial(); + } else { + source_ = value; + } + onChanged(); + } else { + if (sourceCase_ == 1) { + awsKinesisBuilder_.mergeFrom(value); + } else { + awsKinesisBuilder_.setMessage(value); + } + } + sourceCase_ = 1; + return this; + } + + /** + * + * + *
+     * Optional. Amazon Kinesis Data Streams.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearAwsKinesis() { + if (awsKinesisBuilder_ == null) { + if (sourceCase_ == 1) { + sourceCase_ = 0; + source_ = null; + onChanged(); + } + } else { + if (sourceCase_ == 1) { + sourceCase_ = 0; + source_ = null; + } + awsKinesisBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Amazon Kinesis Data Streams.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.Builder + getAwsKinesisBuilder() { + return internalGetAwsKinesisFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Amazon Kinesis Data Streams.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesisOrBuilder + getAwsKinesisOrBuilder() { + if ((sourceCase_ == 1) && (awsKinesisBuilder_ != null)) { + return awsKinesisBuilder_.getMessageOrBuilder(); + } else { + if (sourceCase_ == 1) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Amazon Kinesis Data Streams.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesisOrBuilder> + internalGetAwsKinesisFieldBuilder() { + if (awsKinesisBuilder_ == null) { + if (!(sourceCase_ == 1)) { + source_ = + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.getDefaultInstance(); + } + awsKinesisBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesisOrBuilder>( + (com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis) source_, + getParentForChildren(), + isClean()); + source_ = null; + } + sourceCase_ = 1; + onChanged(); + return awsKinesisBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorageOrBuilder> + cloudStorageBuilder_; + + /** + * + * + *
+     * Optional. Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cloudStorage field is set. + */ + @java.lang.Override + public boolean hasCloudStorage() { + return sourceCase_ == 2; + } + + /** + * + * + *
+     * Optional. Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cloudStorage. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage getCloudStorage() { + if (cloudStorageBuilder_ == null) { + if (sourceCase_ == 2) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.getDefaultInstance(); + } else { + if (sourceCase_ == 2) { + return cloudStorageBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCloudStorage( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage value) { + if (cloudStorageBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + source_ = value; + onChanged(); + } else { + cloudStorageBuilder_.setMessage(value); + } + sourceCase_ = 2; + return this; + } + + /** + * + * + *
+     * Optional. Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCloudStorage( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.Builder builderForValue) { + if (cloudStorageBuilder_ == null) { + source_ = builderForValue.build(); + onChanged(); + } else { + cloudStorageBuilder_.setMessage(builderForValue.build()); + } + sourceCase_ = 2; + return this; + } + + /** + * + * + *
+     * Optional. Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeCloudStorage( + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage value) { + if (cloudStorageBuilder_ == null) { + if (sourceCase_ == 2 + && source_ + != com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage + .getDefaultInstance()) { + source_ = + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.newBuilder( + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) source_) + .mergeFrom(value) + .buildPartial(); + } else { + source_ = value; + } + onChanged(); + } else { + if (sourceCase_ == 2) { + cloudStorageBuilder_.mergeFrom(value); + } else { + cloudStorageBuilder_.setMessage(value); + } + } + sourceCase_ = 2; + return this; + } + + /** + * + * + *
+     * Optional. Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearCloudStorage() { + if (cloudStorageBuilder_ == null) { + if (sourceCase_ == 2) { + sourceCase_ = 0; + source_ = null; + onChanged(); + } + } else { + if (sourceCase_ == 2) { + sourceCase_ = 0; + source_ = null; + } + cloudStorageBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.Builder + getCloudStorageBuilder() { + return internalGetCloudStorageFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorageOrBuilder + getCloudStorageOrBuilder() { + if ((sourceCase_ == 2) && (cloudStorageBuilder_ != null)) { + return cloudStorageBuilder_.getMessageOrBuilder(); + } else { + if (sourceCase_ == 2) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorageOrBuilder> + internalGetCloudStorageFieldBuilder() { + if (cloudStorageBuilder_ == null) { + if (!(sourceCase_ == 2)) { + source_ = + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.getDefaultInstance(); + } + cloudStorageBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorageOrBuilder>( + (com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage) source_, + getParentForChildren(), + isClean()); + source_ = null; + } + sourceCase_ = 2; + onChanged(); + return cloudStorageBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs, + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubsOrBuilder> + azureEventHubsBuilder_; + + /** + * + * + *
+     * Optional. Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the azureEventHubs field is set. + */ + @java.lang.Override + public boolean hasAzureEventHubs() { + return sourceCase_ == 3; + } + + /** + * + * + *
+     * Optional. Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The azureEventHubs. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs getAzureEventHubs() { + if (azureEventHubsBuilder_ == null) { + if (sourceCase_ == 3) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.getDefaultInstance(); + } else { + if (sourceCase_ == 3) { + return azureEventHubsBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAzureEventHubs( + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs value) { + if (azureEventHubsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + source_ = value; + onChanged(); + } else { + azureEventHubsBuilder_.setMessage(value); + } + sourceCase_ = 3; + return this; + } + + /** + * + * + *
+     * Optional. Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAzureEventHubs( + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.Builder builderForValue) { + if (azureEventHubsBuilder_ == null) { + source_ = builderForValue.build(); + onChanged(); + } else { + azureEventHubsBuilder_.setMessage(builderForValue.build()); + } + sourceCase_ = 3; + return this; + } + + /** + * + * + *
+     * Optional. Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeAzureEventHubs( + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs value) { + if (azureEventHubsBuilder_ == null) { + if (sourceCase_ == 3 + && source_ + != com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs + .getDefaultInstance()) { + source_ = + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.newBuilder( + (com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) source_) + .mergeFrom(value) + .buildPartial(); + } else { + source_ = value; + } + onChanged(); + } else { + if (sourceCase_ == 3) { + azureEventHubsBuilder_.mergeFrom(value); + } else { + azureEventHubsBuilder_.setMessage(value); + } + } + sourceCase_ = 3; + return this; + } + + /** + * + * + *
+     * Optional. Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearAzureEventHubs() { + if (azureEventHubsBuilder_ == null) { + if (sourceCase_ == 3) { + sourceCase_ = 0; + source_ = null; + onChanged(); + } + } else { + if (sourceCase_ == 3) { + sourceCase_ = 0; + source_ = null; + } + azureEventHubsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.Builder + getAzureEventHubsBuilder() { + return internalGetAzureEventHubsFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubsOrBuilder + getAzureEventHubsOrBuilder() { + if ((sourceCase_ == 3) && (azureEventHubsBuilder_ != null)) { + return azureEventHubsBuilder_.getMessageOrBuilder(); + } else { + if (sourceCase_ == 3) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs, + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubsOrBuilder> + internalGetAzureEventHubsFieldBuilder() { + if (azureEventHubsBuilder_ == null) { + if (!(sourceCase_ == 3)) { + source_ = + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.getDefaultInstance(); + } + azureEventHubsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs, + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubsOrBuilder>( + (com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs) source_, + getParentForChildren(), + isClean()); + source_ = null; + } + sourceCase_ = 3; + onChanged(); + return azureEventHubsBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMskOrBuilder> + awsMskBuilder_; + + /** + * + * + *
+     * Optional. Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the awsMsk field is set. + */ + @java.lang.Override + public boolean hasAwsMsk() { + return sourceCase_ == 5; + } + + /** + * + * + *
+     * Optional. Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The awsMsk. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk getAwsMsk() { + if (awsMskBuilder_ == null) { + if (sourceCase_ == 5) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.getDefaultInstance(); + } else { + if (sourceCase_ == 5) { + return awsMskBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAwsMsk(com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk value) { + if (awsMskBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + source_ = value; + onChanged(); + } else { + awsMskBuilder_.setMessage(value); + } + sourceCase_ = 5; + return this; + } + + /** + * + * + *
+     * Optional. Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAwsMsk( + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.Builder builderForValue) { + if (awsMskBuilder_ == null) { + source_ = builderForValue.build(); + onChanged(); + } else { + awsMskBuilder_.setMessage(builderForValue.build()); + } + sourceCase_ = 5; + return this; + } + + /** + * + * + *
+     * Optional. Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeAwsMsk(com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk value) { + if (awsMskBuilder_ == null) { + if (sourceCase_ == 5 + && source_ + != com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.getDefaultInstance()) { + source_ = + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.newBuilder( + (com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) source_) + .mergeFrom(value) + .buildPartial(); + } else { + source_ = value; + } + onChanged(); + } else { + if (sourceCase_ == 5) { + awsMskBuilder_.mergeFrom(value); + } else { + awsMskBuilder_.setMessage(value); + } + } + sourceCase_ = 5; + return this; + } + + /** + * + * + *
+     * Optional. Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearAwsMsk() { + if (awsMskBuilder_ == null) { + if (sourceCase_ == 5) { + sourceCase_ = 0; + source_ = null; + onChanged(); + } + } else { + if (sourceCase_ == 5) { + sourceCase_ = 0; + source_ = null; + } + awsMskBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.Builder getAwsMskBuilder() { + return internalGetAwsMskFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.AwsMskOrBuilder getAwsMskOrBuilder() { + if ((sourceCase_ == 5) && (awsMskBuilder_ != null)) { + return awsMskBuilder_.getMessageOrBuilder(); + } else { + if (sourceCase_ == 5) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMskOrBuilder> + internalGetAwsMskFieldBuilder() { + if (awsMskBuilder_ == null) { + if (!(sourceCase_ == 5)) { + source_ = com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.getDefaultInstance(); + } + awsMskBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMskOrBuilder>( + (com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk) source_, + getParentForChildren(), + isClean()); + source_ = null; + } + sourceCase_ = 5; + onChanged(); + return awsMskBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud, + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloudOrBuilder> + confluentCloudBuilder_; + + /** + * + * + *
+     * Optional. Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the confluentCloud field is set. + */ + @java.lang.Override + public boolean hasConfluentCloud() { + return sourceCase_ == 6; + } + + /** + * + * + *
+     * Optional. Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The confluentCloud. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud getConfluentCloud() { + if (confluentCloudBuilder_ == null) { + if (sourceCase_ == 6) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.getDefaultInstance(); + } else { + if (sourceCase_ == 6) { + return confluentCloudBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setConfluentCloud( + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud value) { + if (confluentCloudBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + source_ = value; + onChanged(); + } else { + confluentCloudBuilder_.setMessage(value); + } + sourceCase_ = 6; + return this; + } + + /** + * + * + *
+     * Optional. Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setConfluentCloud( + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.Builder builderForValue) { + if (confluentCloudBuilder_ == null) { + source_ = builderForValue.build(); + onChanged(); + } else { + confluentCloudBuilder_.setMessage(builderForValue.build()); + } + sourceCase_ = 6; + return this; + } + + /** + * + * + *
+     * Optional. Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeConfluentCloud( + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud value) { + if (confluentCloudBuilder_ == null) { + if (sourceCase_ == 6 + && source_ + != com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud + .getDefaultInstance()) { + source_ = + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.newBuilder( + (com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) source_) + .mergeFrom(value) + .buildPartial(); + } else { + source_ = value; + } + onChanged(); + } else { + if (sourceCase_ == 6) { + confluentCloudBuilder_.mergeFrom(value); + } else { + confluentCloudBuilder_.setMessage(value); + } + } + sourceCase_ = 6; + return this; + } + + /** + * + * + *
+     * Optional. Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearConfluentCloud() { + if (confluentCloudBuilder_ == null) { + if (sourceCase_ == 6) { + sourceCase_ = 0; + source_ = null; + onChanged(); + } + } else { + if (sourceCase_ == 6) { + sourceCase_ = 0; + source_ = null; + } + confluentCloudBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.Builder + getConfluentCloudBuilder() { + return internalGetConfluentCloudFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloudOrBuilder + getConfluentCloudOrBuilder() { + if ((sourceCase_ == 6) && (confluentCloudBuilder_ != null)) { + return confluentCloudBuilder_.getMessageOrBuilder(); + } else { + if (sourceCase_ == 6) { + return (com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) source_; + } + return com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud, + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloudOrBuilder> + internalGetConfluentCloudFieldBuilder() { + if (confluentCloudBuilder_ == null) { + if (!(sourceCase_ == 6)) { + source_ = + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.getDefaultInstance(); + } + confluentCloudBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud, + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.Builder, + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloudOrBuilder>( + (com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud) source_, + getParentForChildren(), + isClean()); + source_ = null; + } + sourceCase_ = 6; + onChanged(); + return confluentCloudBuilder_; + } + + private com.google.pubsub.v1.PlatformLogsSettings platformLogsSettings_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PlatformLogsSettings, + com.google.pubsub.v1.PlatformLogsSettings.Builder, + com.google.pubsub.v1.PlatformLogsSettingsOrBuilder> + platformLogsSettingsBuilder_; + + /** + * + * + *
+     * Optional. Platform Logs settings. If unset, no Platform Logs will be
+     * generated.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the platformLogsSettings field is set. + */ + public boolean hasPlatformLogsSettings() { + return ((bitField0_ & 0x00000020) != 0); + } + + /** + * + * + *
+     * Optional. Platform Logs settings. If unset, no Platform Logs will be
+     * generated.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The platformLogsSettings. + */ + public com.google.pubsub.v1.PlatformLogsSettings getPlatformLogsSettings() { + if (platformLogsSettingsBuilder_ == null) { + return platformLogsSettings_ == null + ? com.google.pubsub.v1.PlatformLogsSettings.getDefaultInstance() + : platformLogsSettings_; + } else { + return platformLogsSettingsBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. Platform Logs settings. If unset, no Platform Logs will be
+     * generated.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setPlatformLogsSettings(com.google.pubsub.v1.PlatformLogsSettings value) { + if (platformLogsSettingsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + platformLogsSettings_ = value; + } else { + platformLogsSettingsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Platform Logs settings. If unset, no Platform Logs will be
+     * generated.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setPlatformLogsSettings( + com.google.pubsub.v1.PlatformLogsSettings.Builder builderForValue) { + if (platformLogsSettingsBuilder_ == null) { + platformLogsSettings_ = builderForValue.build(); + } else { + platformLogsSettingsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Platform Logs settings. If unset, no Platform Logs will be
+     * generated.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergePlatformLogsSettings(com.google.pubsub.v1.PlatformLogsSettings value) { + if (platformLogsSettingsBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0) + && platformLogsSettings_ != null + && platformLogsSettings_ + != com.google.pubsub.v1.PlatformLogsSettings.getDefaultInstance()) { + getPlatformLogsSettingsBuilder().mergeFrom(value); + } else { + platformLogsSettings_ = value; + } + } else { + platformLogsSettingsBuilder_.mergeFrom(value); + } + if (platformLogsSettings_ != null) { + bitField0_ |= 0x00000020; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. Platform Logs settings. If unset, no Platform Logs will be
+     * generated.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearPlatformLogsSettings() { + bitField0_ = (bitField0_ & ~0x00000020); + platformLogsSettings_ = null; + if (platformLogsSettingsBuilder_ != null) { + platformLogsSettingsBuilder_.dispose(); + platformLogsSettingsBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Platform Logs settings. If unset, no Platform Logs will be
+     * generated.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.PlatformLogsSettings.Builder getPlatformLogsSettingsBuilder() { + bitField0_ |= 0x00000020; + onChanged(); + return internalGetPlatformLogsSettingsFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Platform Logs settings. If unset, no Platform Logs will be
+     * generated.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.PlatformLogsSettingsOrBuilder getPlatformLogsSettingsOrBuilder() { + if (platformLogsSettingsBuilder_ != null) { + return platformLogsSettingsBuilder_.getMessageOrBuilder(); + } else { + return platformLogsSettings_ == null + ? com.google.pubsub.v1.PlatformLogsSettings.getDefaultInstance() + : platformLogsSettings_; + } + } + + /** + * + * + *
+     * Optional. Platform Logs settings. If unset, no Platform Logs will be
+     * generated.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PlatformLogsSettings, + com.google.pubsub.v1.PlatformLogsSettings.Builder, + com.google.pubsub.v1.PlatformLogsSettingsOrBuilder> + internalGetPlatformLogsSettingsFieldBuilder() { + if (platformLogsSettingsBuilder_ == null) { + platformLogsSettingsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PlatformLogsSettings, + com.google.pubsub.v1.PlatformLogsSettings.Builder, + com.google.pubsub.v1.PlatformLogsSettingsOrBuilder>( + getPlatformLogsSettings(), getParentForChildren(), isClean()); + platformLogsSettings_ = null; + } + return platformLogsSettingsBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionDataSourceSettings) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionDataSourceSettings) + private static final com.google.pubsub.v1.IngestionDataSourceSettings DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.IngestionDataSourceSettings(); + } + + public static com.google.pubsub.v1.IngestionDataSourceSettings getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public IngestionDataSourceSettings parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/IngestionDataSourceSettingsOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/IngestionDataSourceSettingsOrBuilder.java new file mode 100644 index 000000000000..9e641bb67302 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/IngestionDataSourceSettingsOrBuilder.java @@ -0,0 +1,293 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface IngestionDataSourceSettingsOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionDataSourceSettings) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. Amazon Kinesis Data Streams.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the awsKinesis field is set. + */ + boolean hasAwsKinesis(); + + /** + * + * + *
+   * Optional. Amazon Kinesis Data Streams.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The awsKinesis. + */ + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis getAwsKinesis(); + + /** + * + * + *
+   * Optional. Amazon Kinesis Data Streams.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsKinesis aws_kinesis = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesisOrBuilder getAwsKinesisOrBuilder(); + + /** + * + * + *
+   * Optional. Cloud Storage.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cloudStorage field is set. + */ + boolean hasCloudStorage(); + + /** + * + * + *
+   * Optional. Cloud Storage.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cloudStorage. + */ + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorage getCloudStorage(); + + /** + * + * + *
+   * Optional. Cloud Storage.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.CloudStorage cloud_storage = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionDataSourceSettings.CloudStorageOrBuilder getCloudStorageOrBuilder(); + + /** + * + * + *
+   * Optional. Azure Event Hubs.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the azureEventHubs field is set. + */ + boolean hasAzureEventHubs(); + + /** + * + * + *
+   * Optional. Azure Event Hubs.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The azureEventHubs. + */ + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs getAzureEventHubs(); + + /** + * + * + *
+   * Optional. Azure Event Hubs.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubs azure_event_hubs = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionDataSourceSettings.AzureEventHubsOrBuilder + getAzureEventHubsOrBuilder(); + + /** + * + * + *
+   * Optional. Amazon MSK.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the awsMsk field is set. + */ + boolean hasAwsMsk(); + + /** + * + * + *
+   * Optional. Amazon MSK.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The awsMsk. + */ + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk getAwsMsk(); + + /** + * + * + *
+   * Optional. Amazon MSK.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.AwsMsk aws_msk = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionDataSourceSettings.AwsMskOrBuilder getAwsMskOrBuilder(); + + /** + * + * + *
+   * Optional. Confluent Cloud.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the confluentCloud field is set. + */ + boolean hasConfluentCloud(); + + /** + * + * + *
+   * Optional. Confluent Cloud.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The confluentCloud. + */ + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud getConfluentCloud(); + + /** + * + * + *
+   * Optional. Confluent Cloud.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud confluent_cloud = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloudOrBuilder + getConfluentCloudOrBuilder(); + + /** + * + * + *
+   * Optional. Platform Logs settings. If unset, no Platform Logs will be
+   * generated.
+   * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the platformLogsSettings field is set. + */ + boolean hasPlatformLogsSettings(); + + /** + * + * + *
+   * Optional. Platform Logs settings. If unset, no Platform Logs will be
+   * generated.
+   * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The platformLogsSettings. + */ + com.google.pubsub.v1.PlatformLogsSettings getPlatformLogsSettings(); + + /** + * + * + *
+   * Optional. Platform Logs settings. If unset, no Platform Logs will be
+   * generated.
+   * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings platform_logs_settings = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.PlatformLogsSettingsOrBuilder getPlatformLogsSettingsOrBuilder(); + + com.google.pubsub.v1.IngestionDataSourceSettings.SourceCase getSourceCase(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/IngestionFailureEvent.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/IngestionFailureEvent.java new file mode 100644 index 000000000000..6fde71fb17c3 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/IngestionFailureEvent.java @@ -0,0 +1,16331 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Payload of the Platform Log entry sent when a failure is encountered while
+ * ingesting.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent} + */ +@com.google.protobuf.Generated +public final class IngestionFailureEvent extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionFailureEvent) + IngestionFailureEventOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "IngestionFailureEvent"); + } + + // Use IngestionFailureEvent.newBuilder() to construct. + private IngestionFailureEvent(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private IngestionFailureEvent() { + topic_ = ""; + errorMessage_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.class, + com.google.pubsub.v1.IngestionFailureEvent.Builder.class); + } + + public interface ApiViolationReasonOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) + com.google.protobuf.MessageOrBuilder {} + + /** + * + * + *
+   * Specifies the reason why some data may have been left out of
+   * the desired Pub/Sub message due to the API message limits
+   * (https://cloud.google.com/pubsub/quotas#resource_limits). For example,
+   * when the number of attributes is larger than 100, the number of
+   * attributes is truncated to 100 to respect the limit on the attribute count.
+   * Other attribute limits are treated similarly. When the size of the desired
+   * message would've been larger than 10MB, the message won't be published at
+   * all, and ingestion of the subsequent messages will proceed as normal.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.ApiViolationReason} + */ + public static final class ApiViolationReason extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) + ApiViolationReasonOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ApiViolationReason"); + } + + // Use ApiViolationReason.newBuilder() to construct. + private ApiViolationReason(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ApiViolationReason() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_ApiViolationReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_ApiViolationReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.class, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder.class); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason other = + (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Specifies the reason why some data may have been left out of
+     * the desired Pub/Sub message due to the API message limits
+     * (https://cloud.google.com/pubsub/quotas#resource_limits). For example,
+     * when the number of attributes is larger than 100, the number of
+     * attributes is truncated to 100 to respect the limit on the attribute count.
+     * Other attribute limits are treated similarly. When the size of the desired
+     * message would've been larger than 10MB, the message won't be published at
+     * all, and ingestion of the subsequent messages will proceed as normal.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.ApiViolationReason} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_ApiViolationReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_ApiViolationReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.class, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder.class); + } + + // Construct using com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_ApiViolationReason_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason build() { + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason buildPartial() { + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason result = + new com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) { + return mergeFrom((com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason other) { + if (other + == com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance()) + return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) + private static final com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason(); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ApiViolationReason parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface AvroFailureReasonOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) + com.google.protobuf.MessageOrBuilder {} + + /** + * + * + *
+   * Set when an Avro file is unsupported or its format is not valid. When this
+   * occurs, one or more Avro objects won't be ingested.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.AvroFailureReason} + */ + public static final class AvroFailureReason extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) + AvroFailureReasonOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AvroFailureReason"); + } + + // Use AvroFailureReason.newBuilder() to construct. + private AvroFailureReason(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AvroFailureReason() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AvroFailureReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AvroFailureReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.class, + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.Builder.class); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason other = + (com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Set when an Avro file is unsupported or its format is not valid. When this
+     * occurs, one or more Avro objects won't be ingested.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.AvroFailureReason} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReasonOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AvroFailureReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AvroFailureReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.class, + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.Builder.class); + } + + // Construct using com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AvroFailureReason_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason build() { + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason buildPartial() { + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason result = + new com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) { + return mergeFrom((com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason other) { + if (other + == com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.getDefaultInstance()) + return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) + private static final com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason(); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AvroFailureReason parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface SchemaViolationReasonOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) + com.google.protobuf.MessageOrBuilder {} + + /** + * + * + *
+   * Set when a Pub/Sub message fails to get published due to a schema
+   * validation violation.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason} + */ + public static final class SchemaViolationReason extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) + SchemaViolationReasonOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SchemaViolationReason"); + } + + // Use SchemaViolationReason.newBuilder() to construct. + private SchemaViolationReason(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private SchemaViolationReason() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_SchemaViolationReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_SchemaViolationReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.class, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder.class); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason other = + (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Set when a Pub/Sub message fails to get published due to a schema
+     * validation violation.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_SchemaViolationReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_SchemaViolationReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.class, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder.class); + } + + // Construct using + // com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_SchemaViolationReason_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason build() { + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason buildPartial() { + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason result = + new com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) { + return mergeFrom( + (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason other) { + if (other + == com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance()) return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) + private static final com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason(); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SchemaViolationReason parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface MessageTransformationFailureReasonOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + com.google.protobuf.MessageOrBuilder {} + + /** + * + * + *
+   * Set when a Pub/Sub message fails to get published due to a message
+   * transformation error.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason} + */ + public static final class MessageTransformationFailureReason + extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + MessageTransformationFailureReasonOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "MessageTransformationFailureReason"); + } + + // Use MessageTransformationFailureReason.newBuilder() to construct. + private MessageTransformationFailureReason( + com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private MessageTransformationFailureReason() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_MessageTransformationFailureReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_MessageTransformationFailureReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.class, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder + .class); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj + instanceof + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason other = + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + parseFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Set when a Pub/Sub message fails to get published due to a message
+     * transformation error.
+     * 
+ * + * Protobuf type {@code + * google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_MessageTransformationFailureReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_MessageTransformationFailureReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.class, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .Builder.class); + } + + // Construct using + // com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_MessageTransformationFailureReason_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason build() { + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + buildPartial() { + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason result = + new com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other + instanceof + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) { + return mergeFrom( + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason other) { + if (other + == com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance()) return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + private static final com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReason + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = + new com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason(); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public MessageTransformationFailureReason parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface CloudStorageFailureOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Optional. Name of the Cloud Storage bucket used for ingestion.
+     * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bucket. + */ + java.lang.String getBucket(); + + /** + * + * + *
+     * Optional. Name of the Cloud Storage bucket used for ingestion.
+     * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for bucket. + */ + com.google.protobuf.ByteString getBucketBytes(); + + /** + * + * + *
+     * Optional. Name of the Cloud Storage object which contained the section
+     * that couldn't be ingested.
+     * 
+ * + * string object_name = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The objectName. + */ + java.lang.String getObjectName(); + + /** + * + * + *
+     * Optional. Name of the Cloud Storage object which contained the section
+     * that couldn't be ingested.
+     * 
+ * + * string object_name = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for objectName. + */ + com.google.protobuf.ByteString getObjectNameBytes(); + + /** + * + * + *
+     * Optional. Generation of the Cloud Storage object which contained the
+     * section that couldn't be ingested.
+     * 
+ * + * int64 object_generation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The objectGeneration. + */ + long getObjectGeneration(); + + /** + * + * + *
+     * Optional. Failure encountered when parsing an Avro file.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the avroFailureReason field is set. + */ + boolean hasAvroFailureReason(); + + /** + * + * + *
+     * Optional. Failure encountered when parsing an Avro file.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The avroFailureReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason getAvroFailureReason(); + + /** + * + * + *
+     * Optional. Failure encountered when parsing an Avro file.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReasonOrBuilder + getAvroFailureReasonOrBuilder(); + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + boolean hasApiViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + boolean hasSchemaViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason getSchemaViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + boolean hasMessageTransformationFailureReason(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder(); + + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.ReasonCase getReasonCase(); + } + + /** + * + * + *
+   * Failure when ingesting from a Cloud Storage source.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure} + */ + public static final class CloudStorageFailure extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) + CloudStorageFailureOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "CloudStorageFailure"); + } + + // Use CloudStorageFailure.newBuilder() to construct. + private CloudStorageFailure(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private CloudStorageFailure() { + bucket_ = ""; + objectName_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_CloudStorageFailure_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_CloudStorageFailure_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.class, + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.Builder.class); + } + + private int reasonCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object reason_; + + public enum ReasonCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + AVRO_FAILURE_REASON(5), + API_VIOLATION_REASON(6), + SCHEMA_VIOLATION_REASON(7), + MESSAGE_TRANSFORMATION_FAILURE_REASON(8), + REASON_NOT_SET(0); + private final int value; + + private ReasonCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ReasonCase valueOf(int value) { + return forNumber(value); + } + + public static ReasonCase forNumber(int value) { + switch (value) { + case 5: + return AVRO_FAILURE_REASON; + case 6: + return API_VIOLATION_REASON; + case 7: + return SCHEMA_VIOLATION_REASON; + case 8: + return MESSAGE_TRANSFORMATION_FAILURE_REASON; + case 0: + return REASON_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public ReasonCase getReasonCase() { + return ReasonCase.forNumber(reasonCase_); + } + + public static final int BUCKET_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object bucket_ = ""; + + /** + * + * + *
+     * Optional. Name of the Cloud Storage bucket used for ingestion.
+     * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bucket. + */ + @java.lang.Override + public java.lang.String getBucket() { + java.lang.Object ref = bucket_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + bucket_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. Name of the Cloud Storage bucket used for ingestion.
+     * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for bucket. + */ + @java.lang.Override + public com.google.protobuf.ByteString getBucketBytes() { + java.lang.Object ref = bucket_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + bucket_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int OBJECT_NAME_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object objectName_ = ""; + + /** + * + * + *
+     * Optional. Name of the Cloud Storage object which contained the section
+     * that couldn't be ingested.
+     * 
+ * + * string object_name = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The objectName. + */ + @java.lang.Override + public java.lang.String getObjectName() { + java.lang.Object ref = objectName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + objectName_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. Name of the Cloud Storage object which contained the section
+     * that couldn't be ingested.
+     * 
+ * + * string object_name = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for objectName. + */ + @java.lang.Override + public com.google.protobuf.ByteString getObjectNameBytes() { + java.lang.Object ref = objectName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + objectName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int OBJECT_GENERATION_FIELD_NUMBER = 3; + private long objectGeneration_ = 0L; + + /** + * + * + *
+     * Optional. Generation of the Cloud Storage object which contained the
+     * section that couldn't be ingested.
+     * 
+ * + * int64 object_generation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The objectGeneration. + */ + @java.lang.Override + public long getObjectGeneration() { + return objectGeneration_; + } + + public static final int AVRO_FAILURE_REASON_FIELD_NUMBER = 5; + + /** + * + * + *
+     * Optional. Failure encountered when parsing an Avro file.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the avroFailureReason field is set. + */ + @java.lang.Override + public boolean hasAvroFailureReason() { + return reasonCase_ == 5; + } + + /** + * + * + *
+     * Optional. Failure encountered when parsing an Avro file.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The avroFailureReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason getAvroFailureReason() { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. Failure encountered when parsing an Avro file.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReasonOrBuilder + getAvroFailureReasonOrBuilder() { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.getDefaultInstance(); + } + + public static final int API_VIOLATION_REASON_FIELD_NUMBER = 6; + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + @java.lang.Override + public boolean hasApiViolationReason() { + return reasonCase_ == 6; + } + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason() { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder() { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + + public static final int SCHEMA_VIOLATION_REASON_FIELD_NUMBER = 7; + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + @java.lang.Override + public boolean hasSchemaViolationReason() { + return reasonCase_ == 7; + } + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + getSchemaViolationReason() { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder() { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.getDefaultInstance(); + } + + public static final int MESSAGE_TRANSFORMATION_FAILURE_REASON_FIELD_NUMBER = 8; + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + @java.lang.Override + public boolean hasMessageTransformationFailureReason() { + return reasonCase_ == 8; + } + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason() { + if (reasonCase_ == 8) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder() { + if (reasonCase_ == 8) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(bucket_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, bucket_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(objectName_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, objectName_); + } + if (objectGeneration_ != 0L) { + output.writeInt64(3, objectGeneration_); + } + if (reasonCase_ == 5) { + output.writeMessage( + 5, (com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) reason_); + } + if (reasonCase_ == 6) { + output.writeMessage( + 6, (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_); + } + if (reasonCase_ == 7) { + output.writeMessage( + 7, (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_); + } + if (reasonCase_ == 8) { + output.writeMessage( + 8, + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(bucket_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, bucket_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(objectName_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, objectName_); + } + if (objectGeneration_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(3, objectGeneration_); + } + if (reasonCase_ == 5) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 5, (com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) reason_); + } + if (reasonCase_ == 6) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 6, (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_); + } + if (reasonCase_ == 7) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 7, (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_); + } + if (reasonCase_ == 8) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 8, + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure other = + (com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) obj; + + if (!getBucket().equals(other.getBucket())) return false; + if (!getObjectName().equals(other.getObjectName())) return false; + if (getObjectGeneration() != other.getObjectGeneration()) return false; + if (!getReasonCase().equals(other.getReasonCase())) return false; + switch (reasonCase_) { + case 5: + if (!getAvroFailureReason().equals(other.getAvroFailureReason())) return false; + break; + case 6: + if (!getApiViolationReason().equals(other.getApiViolationReason())) return false; + break; + case 7: + if (!getSchemaViolationReason().equals(other.getSchemaViolationReason())) return false; + break; + case 8: + if (!getMessageTransformationFailureReason() + .equals(other.getMessageTransformationFailureReason())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + BUCKET_FIELD_NUMBER; + hash = (53 * hash) + getBucket().hashCode(); + hash = (37 * hash) + OBJECT_NAME_FIELD_NUMBER; + hash = (53 * hash) + getObjectName().hashCode(); + hash = (37 * hash) + OBJECT_GENERATION_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getObjectGeneration()); + switch (reasonCase_) { + case 5: + hash = (37 * hash) + AVRO_FAILURE_REASON_FIELD_NUMBER; + hash = (53 * hash) + getAvroFailureReason().hashCode(); + break; + case 6: + hash = (37 * hash) + API_VIOLATION_REASON_FIELD_NUMBER; + hash = (53 * hash) + getApiViolationReason().hashCode(); + break; + case 7: + hash = (37 * hash) + SCHEMA_VIOLATION_REASON_FIELD_NUMBER; + hash = (53 * hash) + getSchemaViolationReason().hashCode(); + break; + case 8: + hash = (37 * hash) + MESSAGE_TRANSFORMATION_FAILURE_REASON_FIELD_NUMBER; + hash = (53 * hash) + getMessageTransformationFailureReason().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Failure when ingesting from a Cloud Storage source.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailureOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_CloudStorageFailure_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_CloudStorageFailure_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.class, + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.Builder.class); + } + + // Construct using com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + bucket_ = ""; + objectName_ = ""; + objectGeneration_ = 0L; + if (avroFailureReasonBuilder_ != null) { + avroFailureReasonBuilder_.clear(); + } + if (apiViolationReasonBuilder_ != null) { + apiViolationReasonBuilder_.clear(); + } + if (schemaViolationReasonBuilder_ != null) { + schemaViolationReasonBuilder_.clear(); + } + if (messageTransformationFailureReasonBuilder_ != null) { + messageTransformationFailureReasonBuilder_.clear(); + } + reasonCase_ = 0; + reason_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_CloudStorageFailure_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure build() { + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure buildPartial() { + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure result = + new com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.bucket_ = bucket_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.objectName_ = objectName_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.objectGeneration_ = objectGeneration_; + } + } + + private void buildPartialOneofs( + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure result) { + result.reasonCase_ = reasonCase_; + result.reason_ = this.reason_; + if (reasonCase_ == 5 && avroFailureReasonBuilder_ != null) { + result.reason_ = avroFailureReasonBuilder_.build(); + } + if (reasonCase_ == 6 && apiViolationReasonBuilder_ != null) { + result.reason_ = apiViolationReasonBuilder_.build(); + } + if (reasonCase_ == 7 && schemaViolationReasonBuilder_ != null) { + result.reason_ = schemaViolationReasonBuilder_.build(); + } + if (reasonCase_ == 8 && messageTransformationFailureReasonBuilder_ != null) { + result.reason_ = messageTransformationFailureReasonBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) { + return mergeFrom((com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure other) { + if (other + == com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.getDefaultInstance()) + return this; + if (!other.getBucket().isEmpty()) { + bucket_ = other.bucket_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getObjectName().isEmpty()) { + objectName_ = other.objectName_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (other.getObjectGeneration() != 0L) { + setObjectGeneration(other.getObjectGeneration()); + } + switch (other.getReasonCase()) { + case AVRO_FAILURE_REASON: + { + mergeAvroFailureReason(other.getAvroFailureReason()); + break; + } + case API_VIOLATION_REASON: + { + mergeApiViolationReason(other.getApiViolationReason()); + break; + } + case SCHEMA_VIOLATION_REASON: + { + mergeSchemaViolationReason(other.getSchemaViolationReason()); + break; + } + case MESSAGE_TRANSFORMATION_FAILURE_REASON: + { + mergeMessageTransformationFailureReason( + other.getMessageTransformationFailureReason()); + break; + } + case REASON_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + bucket_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + objectName_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 24: + { + objectGeneration_ = input.readInt64(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 42: + { + input.readMessage( + internalGetAvroFailureReasonFieldBuilder().getBuilder(), extensionRegistry); + reasonCase_ = 5; + break; + } // case 42 + case 50: + { + input.readMessage( + internalGetApiViolationReasonFieldBuilder().getBuilder(), extensionRegistry); + reasonCase_ = 6; + break; + } // case 50 + case 58: + { + input.readMessage( + internalGetSchemaViolationReasonFieldBuilder().getBuilder(), + extensionRegistry); + reasonCase_ = 7; + break; + } // case 58 + case 66: + { + input.readMessage( + internalGetMessageTransformationFailureReasonFieldBuilder().getBuilder(), + extensionRegistry); + reasonCase_ = 8; + break; + } // case 66 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int reasonCase_ = 0; + private java.lang.Object reason_; + + public ReasonCase getReasonCase() { + return ReasonCase.forNumber(reasonCase_); + } + + public Builder clearReason() { + reasonCase_ = 0; + reason_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private java.lang.Object bucket_ = ""; + + /** + * + * + *
+       * Optional. Name of the Cloud Storage bucket used for ingestion.
+       * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bucket. + */ + public java.lang.String getBucket() { + java.lang.Object ref = bucket_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + bucket_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. Name of the Cloud Storage bucket used for ingestion.
+       * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for bucket. + */ + public com.google.protobuf.ByteString getBucketBytes() { + java.lang.Object ref = bucket_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + bucket_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. Name of the Cloud Storage bucket used for ingestion.
+       * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bucket to set. + * @return This builder for chaining. + */ + public Builder setBucket(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bucket_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Name of the Cloud Storage bucket used for ingestion.
+       * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearBucket() { + bucket_ = getDefaultInstance().getBucket(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Name of the Cloud Storage bucket used for ingestion.
+       * 
+ * + * string bucket = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for bucket to set. + * @return This builder for chaining. + */ + public Builder setBucketBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + bucket_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object objectName_ = ""; + + /** + * + * + *
+       * Optional. Name of the Cloud Storage object which contained the section
+       * that couldn't be ingested.
+       * 
+ * + * string object_name = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The objectName. + */ + public java.lang.String getObjectName() { + java.lang.Object ref = objectName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + objectName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. Name of the Cloud Storage object which contained the section
+       * that couldn't be ingested.
+       * 
+ * + * string object_name = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for objectName. + */ + public com.google.protobuf.ByteString getObjectNameBytes() { + java.lang.Object ref = objectName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + objectName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. Name of the Cloud Storage object which contained the section
+       * that couldn't be ingested.
+       * 
+ * + * string object_name = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The objectName to set. + * @return This builder for chaining. + */ + public Builder setObjectName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + objectName_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Name of the Cloud Storage object which contained the section
+       * that couldn't be ingested.
+       * 
+ * + * string object_name = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearObjectName() { + objectName_ = getDefaultInstance().getObjectName(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Name of the Cloud Storage object which contained the section
+       * that couldn't be ingested.
+       * 
+ * + * string object_name = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for objectName to set. + * @return This builder for chaining. + */ + public Builder setObjectNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + objectName_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private long objectGeneration_; + + /** + * + * + *
+       * Optional. Generation of the Cloud Storage object which contained the
+       * section that couldn't be ingested.
+       * 
+ * + * int64 object_generation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The objectGeneration. + */ + @java.lang.Override + public long getObjectGeneration() { + return objectGeneration_; + } + + /** + * + * + *
+       * Optional. Generation of the Cloud Storage object which contained the
+       * section that couldn't be ingested.
+       * 
+ * + * int64 object_generation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The objectGeneration to set. + * @return This builder for chaining. + */ + public Builder setObjectGeneration(long value) { + + objectGeneration_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Generation of the Cloud Storage object which contained the
+       * section that couldn't be ingested.
+       * 
+ * + * int64 object_generation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearObjectGeneration() { + bitField0_ = (bitField0_ & ~0x00000004); + objectGeneration_ = 0L; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReasonOrBuilder> + avroFailureReasonBuilder_; + + /** + * + * + *
+       * Optional. Failure encountered when parsing an Avro file.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the avroFailureReason field is set. + */ + @java.lang.Override + public boolean hasAvroFailureReason() { + return reasonCase_ == 5; + } + + /** + * + * + *
+       * Optional. Failure encountered when parsing an Avro file.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The avroFailureReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason getAvroFailureReason() { + if (avroFailureReasonBuilder_ == null) { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.getDefaultInstance(); + } else { + if (reasonCase_ == 5) { + return avroFailureReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Failure encountered when parsing an Avro file.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAvroFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason value) { + if (avroFailureReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + avroFailureReasonBuilder_.setMessage(value); + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when parsing an Avro file.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAvroFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.Builder builderForValue) { + if (avroFailureReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + avroFailureReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when parsing an Avro file.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeAvroFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason value) { + if (avroFailureReasonBuilder_ == null) { + if (reasonCase_ == 5 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 5) { + avroFailureReasonBuilder_.mergeFrom(value); + } else { + avroFailureReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when parsing an Avro file.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearAvroFailureReason() { + if (avroFailureReasonBuilder_ == null) { + if (reasonCase_ == 5) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 5) { + reasonCase_ = 0; + reason_ = null; + } + avroFailureReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when parsing an Avro file.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.Builder + getAvroFailureReasonBuilder() { + return internalGetAvroFailureReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. Failure encountered when parsing an Avro file.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReasonOrBuilder + getAvroFailureReasonOrBuilder() { + if ((reasonCase_ == 5) && (avroFailureReasonBuilder_ != null)) { + return avroFailureReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Failure encountered when parsing an Avro file.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AvroFailureReason avro_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReasonOrBuilder> + internalGetAvroFailureReasonFieldBuilder() { + if (avroFailureReasonBuilder_ == null) { + if (!(reasonCase_ == 5)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.getDefaultInstance(); + } + avroFailureReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.AvroFailureReason) reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 5; + onChanged(); + return avroFailureReasonBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder> + apiViolationReasonBuilder_; + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + @java.lang.Override + public boolean hasApiViolationReason() { + return reasonCase_ == 6; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason() { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } else { + if (reasonCase_ == 6) { + return apiViolationReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason value) { + if (apiViolationReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + apiViolationReasonBuilder_.setMessage(value); + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder builderForValue) { + if (apiViolationReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + apiViolationReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason value) { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 6 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 6) { + apiViolationReasonBuilder_.mergeFrom(value); + } else { + apiViolationReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearApiViolationReason() { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 6) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 6) { + reasonCase_ = 0; + reason_ = null; + } + apiViolationReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder + getApiViolationReasonBuilder() { + return internalGetApiViolationReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder() { + if ((reasonCase_ == 6) && (apiViolationReasonBuilder_ != null)) { + return apiViolationReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder> + internalGetApiViolationReasonFieldBuilder() { + if (apiViolationReasonBuilder_ == null) { + if (!(reasonCase_ == 6)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + apiViolationReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 6; + onChanged(); + return apiViolationReasonBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder> + schemaViolationReasonBuilder_; + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + @java.lang.Override + public boolean hasSchemaViolationReason() { + return reasonCase_ == 7; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + getSchemaViolationReason() { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } else { + if (reasonCase_ == 7) { + return schemaViolationReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason value) { + if (schemaViolationReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + schemaViolationReasonBuilder_.setMessage(value); + } + reasonCase_ = 7; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder + builderForValue) { + if (schemaViolationReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + schemaViolationReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 7; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason value) { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 7 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 7) { + schemaViolationReasonBuilder_.mergeFrom(value); + } else { + schemaViolationReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 7; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearSchemaViolationReason() { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 7) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 7) { + reasonCase_ = 0; + reason_ = null; + } + schemaViolationReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder + getSchemaViolationReasonBuilder() { + return internalGetSchemaViolationReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder() { + if ((reasonCase_ == 7) && (schemaViolationReasonBuilder_ != null)) { + return schemaViolationReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder> + internalGetSchemaViolationReasonFieldBuilder() { + if (schemaViolationReasonBuilder_ == null) { + if (!(reasonCase_ == 7)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + schemaViolationReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 7; + onChanged(); + return schemaViolationReasonBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder> + messageTransformationFailureReasonBuilder_; + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + @java.lang.Override + public boolean hasMessageTransformationFailureReason() { + return reasonCase_ == 8; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 8) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } else { + if (reasonCase_ == 8) { + return messageTransformationFailureReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason value) { + if (messageTransformationFailureReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + messageTransformationFailureReasonBuilder_.setMessage(value); + } + reasonCase_ = 8; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder + builderForValue) { + if (messageTransformationFailureReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + messageTransformationFailureReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 8; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason value) { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 8 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReason) + reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 8) { + messageTransformationFailureReasonBuilder_.mergeFrom(value); + } else { + messageTransformationFailureReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 8; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMessageTransformationFailureReason() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 8) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 8) { + reasonCase_ = 0; + reason_ = null; + } + messageTransformationFailureReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder + getMessageTransformationFailureReasonBuilder() { + return internalGetMessageTransformationFailureReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder() { + if ((reasonCase_ == 8) && (messageTransformationFailureReasonBuilder_ != null)) { + return messageTransformationFailureReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 8) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder> + internalGetMessageTransformationFailureReasonFieldBuilder() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (!(reasonCase_ == 8)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + messageTransformationFailureReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 8; + onChanged(); + return messageTransformationFailureReasonBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) + private static final com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure(); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public CloudStorageFailure parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface AwsMskFailureReasonOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Optional. The ARN of the cluster of the topic being ingested from.
+     * 
+ * + * string cluster_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The clusterArn. + */ + java.lang.String getClusterArn(); + + /** + * + * + *
+     * Optional. The ARN of the cluster of the topic being ingested from.
+     * 
+ * + * string cluster_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for clusterArn. + */ + com.google.protobuf.ByteString getClusterArnBytes(); + + /** + * + * + *
+     * Optional. The name of the Kafka topic being ingested from.
+     * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The kafkaTopic. + */ + java.lang.String getKafkaTopic(); + + /** + * + * + *
+     * Optional. The name of the Kafka topic being ingested from.
+     * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for kafkaTopic. + */ + com.google.protobuf.ByteString getKafkaTopicBytes(); + + /** + * + * + *
+     * Optional. The partition ID of the message that failed to be ingested.
+     * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The partitionId. + */ + long getPartitionId(); + + /** + * + * + *
+     * Optional. The offset within the partition of the message that failed to
+     * be ingested.
+     * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The offset. + */ + long getOffset(); + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + boolean hasApiViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + boolean hasSchemaViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason getSchemaViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + boolean hasMessageTransformationFailureReason(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder(); + + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.ReasonCase getReasonCase(); + } + + /** + * + * + *
+   * Failure when ingesting from an Amazon MSK source.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason} + */ + public static final class AwsMskFailureReason extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) + AwsMskFailureReasonOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AwsMskFailureReason"); + } + + // Use AwsMskFailureReason.newBuilder() to construct. + private AwsMskFailureReason(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AwsMskFailureReason() { + clusterArn_ = ""; + kafkaTopic_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AwsMskFailureReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AwsMskFailureReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.class, + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.Builder.class); + } + + private int reasonCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object reason_; + + public enum ReasonCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + API_VIOLATION_REASON(5), + SCHEMA_VIOLATION_REASON(6), + MESSAGE_TRANSFORMATION_FAILURE_REASON(7), + REASON_NOT_SET(0); + private final int value; + + private ReasonCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ReasonCase valueOf(int value) { + return forNumber(value); + } + + public static ReasonCase forNumber(int value) { + switch (value) { + case 5: + return API_VIOLATION_REASON; + case 6: + return SCHEMA_VIOLATION_REASON; + case 7: + return MESSAGE_TRANSFORMATION_FAILURE_REASON; + case 0: + return REASON_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public ReasonCase getReasonCase() { + return ReasonCase.forNumber(reasonCase_); + } + + public static final int CLUSTER_ARN_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object clusterArn_ = ""; + + /** + * + * + *
+     * Optional. The ARN of the cluster of the topic being ingested from.
+     * 
+ * + * string cluster_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The clusterArn. + */ + @java.lang.Override + public java.lang.String getClusterArn() { + java.lang.Object ref = clusterArn_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clusterArn_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The ARN of the cluster of the topic being ingested from.
+     * 
+ * + * string cluster_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for clusterArn. + */ + @java.lang.Override + public com.google.protobuf.ByteString getClusterArnBytes() { + java.lang.Object ref = clusterArn_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clusterArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int KAFKA_TOPIC_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object kafkaTopic_ = ""; + + /** + * + * + *
+     * Optional. The name of the Kafka topic being ingested from.
+     * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The kafkaTopic. + */ + @java.lang.Override + public java.lang.String getKafkaTopic() { + java.lang.Object ref = kafkaTopic_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + kafkaTopic_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The name of the Kafka topic being ingested from.
+     * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for kafkaTopic. + */ + @java.lang.Override + public com.google.protobuf.ByteString getKafkaTopicBytes() { + java.lang.Object ref = kafkaTopic_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + kafkaTopic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PARTITION_ID_FIELD_NUMBER = 3; + private long partitionId_ = 0L; + + /** + * + * + *
+     * Optional. The partition ID of the message that failed to be ingested.
+     * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The partitionId. + */ + @java.lang.Override + public long getPartitionId() { + return partitionId_; + } + + public static final int OFFSET_FIELD_NUMBER = 4; + private long offset_ = 0L; + + /** + * + * + *
+     * Optional. The offset within the partition of the message that failed to
+     * be ingested.
+     * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The offset. + */ + @java.lang.Override + public long getOffset() { + return offset_; + } + + public static final int API_VIOLATION_REASON_FIELD_NUMBER = 5; + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + @java.lang.Override + public boolean hasApiViolationReason() { + return reasonCase_ == 5; + } + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason() { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder() { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + + public static final int SCHEMA_VIOLATION_REASON_FIELD_NUMBER = 6; + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + @java.lang.Override + public boolean hasSchemaViolationReason() { + return reasonCase_ == 6; + } + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + getSchemaViolationReason() { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder() { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.getDefaultInstance(); + } + + public static final int MESSAGE_TRANSFORMATION_FAILURE_REASON_FIELD_NUMBER = 7; + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + @java.lang.Override + public boolean hasMessageTransformationFailureReason() { + return reasonCase_ == 7; + } + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason() { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder() { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clusterArn_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, clusterArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kafkaTopic_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, kafkaTopic_); + } + if (partitionId_ != 0L) { + output.writeInt64(3, partitionId_); + } + if (offset_ != 0L) { + output.writeInt64(4, offset_); + } + if (reasonCase_ == 5) { + output.writeMessage( + 5, (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_); + } + if (reasonCase_ == 6) { + output.writeMessage( + 6, (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_); + } + if (reasonCase_ == 7) { + output.writeMessage( + 7, + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clusterArn_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, clusterArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kafkaTopic_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, kafkaTopic_); + } + if (partitionId_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(3, partitionId_); + } + if (offset_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(4, offset_); + } + if (reasonCase_ == 5) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 5, (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_); + } + if (reasonCase_ == 6) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 6, (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_); + } + if (reasonCase_ == 7) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 7, + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason other = + (com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) obj; + + if (!getClusterArn().equals(other.getClusterArn())) return false; + if (!getKafkaTopic().equals(other.getKafkaTopic())) return false; + if (getPartitionId() != other.getPartitionId()) return false; + if (getOffset() != other.getOffset()) return false; + if (!getReasonCase().equals(other.getReasonCase())) return false; + switch (reasonCase_) { + case 5: + if (!getApiViolationReason().equals(other.getApiViolationReason())) return false; + break; + case 6: + if (!getSchemaViolationReason().equals(other.getSchemaViolationReason())) return false; + break; + case 7: + if (!getMessageTransformationFailureReason() + .equals(other.getMessageTransformationFailureReason())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + CLUSTER_ARN_FIELD_NUMBER; + hash = (53 * hash) + getClusterArn().hashCode(); + hash = (37 * hash) + KAFKA_TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getKafkaTopic().hashCode(); + hash = (37 * hash) + PARTITION_ID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getPartitionId()); + hash = (37 * hash) + OFFSET_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getOffset()); + switch (reasonCase_) { + case 5: + hash = (37 * hash) + API_VIOLATION_REASON_FIELD_NUMBER; + hash = (53 * hash) + getApiViolationReason().hashCode(); + break; + case 6: + hash = (37 * hash) + SCHEMA_VIOLATION_REASON_FIELD_NUMBER; + hash = (53 * hash) + getSchemaViolationReason().hashCode(); + break; + case 7: + hash = (37 * hash) + MESSAGE_TRANSFORMATION_FAILURE_REASON_FIELD_NUMBER; + hash = (53 * hash) + getMessageTransformationFailureReason().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Failure when ingesting from an Amazon MSK source.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReasonOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AwsMskFailureReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AwsMskFailureReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.class, + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.Builder.class); + } + + // Construct using com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + clusterArn_ = ""; + kafkaTopic_ = ""; + partitionId_ = 0L; + offset_ = 0L; + if (apiViolationReasonBuilder_ != null) { + apiViolationReasonBuilder_.clear(); + } + if (schemaViolationReasonBuilder_ != null) { + schemaViolationReasonBuilder_.clear(); + } + if (messageTransformationFailureReasonBuilder_ != null) { + messageTransformationFailureReasonBuilder_.clear(); + } + reasonCase_ = 0; + reason_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AwsMskFailureReason_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason build() { + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason buildPartial() { + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason result = + new com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.clusterArn_ = clusterArn_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.kafkaTopic_ = kafkaTopic_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.partitionId_ = partitionId_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.offset_ = offset_; + } + } + + private void buildPartialOneofs( + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason result) { + result.reasonCase_ = reasonCase_; + result.reason_ = this.reason_; + if (reasonCase_ == 5 && apiViolationReasonBuilder_ != null) { + result.reason_ = apiViolationReasonBuilder_.build(); + } + if (reasonCase_ == 6 && schemaViolationReasonBuilder_ != null) { + result.reason_ = schemaViolationReasonBuilder_.build(); + } + if (reasonCase_ == 7 && messageTransformationFailureReasonBuilder_ != null) { + result.reason_ = messageTransformationFailureReasonBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) { + return mergeFrom((com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason other) { + if (other + == com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.getDefaultInstance()) + return this; + if (!other.getClusterArn().isEmpty()) { + clusterArn_ = other.clusterArn_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getKafkaTopic().isEmpty()) { + kafkaTopic_ = other.kafkaTopic_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (other.getPartitionId() != 0L) { + setPartitionId(other.getPartitionId()); + } + if (other.getOffset() != 0L) { + setOffset(other.getOffset()); + } + switch (other.getReasonCase()) { + case API_VIOLATION_REASON: + { + mergeApiViolationReason(other.getApiViolationReason()); + break; + } + case SCHEMA_VIOLATION_REASON: + { + mergeSchemaViolationReason(other.getSchemaViolationReason()); + break; + } + case MESSAGE_TRANSFORMATION_FAILURE_REASON: + { + mergeMessageTransformationFailureReason( + other.getMessageTransformationFailureReason()); + break; + } + case REASON_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + clusterArn_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + kafkaTopic_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 24: + { + partitionId_ = input.readInt64(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 32: + { + offset_ = input.readInt64(); + bitField0_ |= 0x00000008; + break; + } // case 32 + case 42: + { + input.readMessage( + internalGetApiViolationReasonFieldBuilder().getBuilder(), extensionRegistry); + reasonCase_ = 5; + break; + } // case 42 + case 50: + { + input.readMessage( + internalGetSchemaViolationReasonFieldBuilder().getBuilder(), + extensionRegistry); + reasonCase_ = 6; + break; + } // case 50 + case 58: + { + input.readMessage( + internalGetMessageTransformationFailureReasonFieldBuilder().getBuilder(), + extensionRegistry); + reasonCase_ = 7; + break; + } // case 58 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int reasonCase_ = 0; + private java.lang.Object reason_; + + public ReasonCase getReasonCase() { + return ReasonCase.forNumber(reasonCase_); + } + + public Builder clearReason() { + reasonCase_ = 0; + reason_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private java.lang.Object clusterArn_ = ""; + + /** + * + * + *
+       * Optional. The ARN of the cluster of the topic being ingested from.
+       * 
+ * + * string cluster_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The clusterArn. + */ + public java.lang.String getClusterArn() { + java.lang.Object ref = clusterArn_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clusterArn_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The ARN of the cluster of the topic being ingested from.
+       * 
+ * + * string cluster_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for clusterArn. + */ + public com.google.protobuf.ByteString getClusterArnBytes() { + java.lang.Object ref = clusterArn_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clusterArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The ARN of the cluster of the topic being ingested from.
+       * 
+ * + * string cluster_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The clusterArn to set. + * @return This builder for chaining. + */ + public Builder setClusterArn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + clusterArn_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The ARN of the cluster of the topic being ingested from.
+       * 
+ * + * string cluster_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearClusterArn() { + clusterArn_ = getDefaultInstance().getClusterArn(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The ARN of the cluster of the topic being ingested from.
+       * 
+ * + * string cluster_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for clusterArn to set. + * @return This builder for chaining. + */ + public Builder setClusterArnBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + clusterArn_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object kafkaTopic_ = ""; + + /** + * + * + *
+       * Optional. The name of the Kafka topic being ingested from.
+       * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The kafkaTopic. + */ + public java.lang.String getKafkaTopic() { + java.lang.Object ref = kafkaTopic_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + kafkaTopic_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the Kafka topic being ingested from.
+       * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for kafkaTopic. + */ + public com.google.protobuf.ByteString getKafkaTopicBytes() { + java.lang.Object ref = kafkaTopic_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + kafkaTopic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the Kafka topic being ingested from.
+       * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The kafkaTopic to set. + * @return This builder for chaining. + */ + public Builder setKafkaTopic(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + kafkaTopic_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the Kafka topic being ingested from.
+       * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearKafkaTopic() { + kafkaTopic_ = getDefaultInstance().getKafkaTopic(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the Kafka topic being ingested from.
+       * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for kafkaTopic to set. + * @return This builder for chaining. + */ + public Builder setKafkaTopicBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + kafkaTopic_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private long partitionId_; + + /** + * + * + *
+       * Optional. The partition ID of the message that failed to be ingested.
+       * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The partitionId. + */ + @java.lang.Override + public long getPartitionId() { + return partitionId_; + } + + /** + * + * + *
+       * Optional. The partition ID of the message that failed to be ingested.
+       * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The partitionId to set. + * @return This builder for chaining. + */ + public Builder setPartitionId(long value) { + + partitionId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The partition ID of the message that failed to be ingested.
+       * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPartitionId() { + bitField0_ = (bitField0_ & ~0x00000004); + partitionId_ = 0L; + onChanged(); + return this; + } + + private long offset_; + + /** + * + * + *
+       * Optional. The offset within the partition of the message that failed to
+       * be ingested.
+       * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The offset. + */ + @java.lang.Override + public long getOffset() { + return offset_; + } + + /** + * + * + *
+       * Optional. The offset within the partition of the message that failed to
+       * be ingested.
+       * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The offset to set. + * @return This builder for chaining. + */ + public Builder setOffset(long value) { + + offset_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The offset within the partition of the message that failed to
+       * be ingested.
+       * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearOffset() { + bitField0_ = (bitField0_ & ~0x00000008); + offset_ = 0L; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder> + apiViolationReasonBuilder_; + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + @java.lang.Override + public boolean hasApiViolationReason() { + return reasonCase_ == 5; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason() { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } else { + if (reasonCase_ == 5) { + return apiViolationReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason value) { + if (apiViolationReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + apiViolationReasonBuilder_.setMessage(value); + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder builderForValue) { + if (apiViolationReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + apiViolationReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason value) { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 5 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 5) { + apiViolationReasonBuilder_.mergeFrom(value); + } else { + apiViolationReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearApiViolationReason() { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 5) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 5) { + reasonCase_ = 0; + reason_ = null; + } + apiViolationReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder + getApiViolationReasonBuilder() { + return internalGetApiViolationReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder() { + if ((reasonCase_ == 5) && (apiViolationReasonBuilder_ != null)) { + return apiViolationReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder> + internalGetApiViolationReasonFieldBuilder() { + if (apiViolationReasonBuilder_ == null) { + if (!(reasonCase_ == 5)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + apiViolationReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 5; + onChanged(); + return apiViolationReasonBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder> + schemaViolationReasonBuilder_; + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + @java.lang.Override + public boolean hasSchemaViolationReason() { + return reasonCase_ == 6; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + getSchemaViolationReason() { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } else { + if (reasonCase_ == 6) { + return schemaViolationReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason value) { + if (schemaViolationReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + schemaViolationReasonBuilder_.setMessage(value); + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder + builderForValue) { + if (schemaViolationReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + schemaViolationReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason value) { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 6 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 6) { + schemaViolationReasonBuilder_.mergeFrom(value); + } else { + schemaViolationReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearSchemaViolationReason() { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 6) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 6) { + reasonCase_ = 0; + reason_ = null; + } + schemaViolationReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder + getSchemaViolationReasonBuilder() { + return internalGetSchemaViolationReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder() { + if ((reasonCase_ == 6) && (schemaViolationReasonBuilder_ != null)) { + return schemaViolationReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder> + internalGetSchemaViolationReasonFieldBuilder() { + if (schemaViolationReasonBuilder_ == null) { + if (!(reasonCase_ == 6)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + schemaViolationReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 6; + onChanged(); + return schemaViolationReasonBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder> + messageTransformationFailureReasonBuilder_; + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + @java.lang.Override + public boolean hasMessageTransformationFailureReason() { + return reasonCase_ == 7; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } else { + if (reasonCase_ == 7) { + return messageTransformationFailureReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason value) { + if (messageTransformationFailureReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + messageTransformationFailureReasonBuilder_.setMessage(value); + } + reasonCase_ = 7; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder + builderForValue) { + if (messageTransformationFailureReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + messageTransformationFailureReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 7; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason value) { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 7 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReason) + reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 7) { + messageTransformationFailureReasonBuilder_.mergeFrom(value); + } else { + messageTransformationFailureReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 7; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMessageTransformationFailureReason() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 7) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 7) { + reasonCase_ = 0; + reason_ = null; + } + messageTransformationFailureReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder + getMessageTransformationFailureReasonBuilder() { + return internalGetMessageTransformationFailureReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder() { + if ((reasonCase_ == 7) && (messageTransformationFailureReasonBuilder_ != null)) { + return messageTransformationFailureReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder> + internalGetMessageTransformationFailureReasonFieldBuilder() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (!(reasonCase_ == 7)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + messageTransformationFailureReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 7; + onChanged(); + return messageTransformationFailureReasonBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) + private static final com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason(); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AwsMskFailureReason parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface AzureEventHubsFailureReasonOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Optional. The namespace containing the event hub being ingested from.
+     * 
+ * + * string namespace = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The namespace. + */ + java.lang.String getNamespace(); + + /** + * + * + *
+     * Optional. The namespace containing the event hub being ingested from.
+     * 
+ * + * string namespace = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for namespace. + */ + com.google.protobuf.ByteString getNamespaceBytes(); + + /** + * + * + *
+     * Optional. The name of the event hub being ingested from.
+     * 
+ * + * string event_hub = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The eventHub. + */ + java.lang.String getEventHub(); + + /** + * + * + *
+     * Optional. The name of the event hub being ingested from.
+     * 
+ * + * string event_hub = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for eventHub. + */ + com.google.protobuf.ByteString getEventHubBytes(); + + /** + * + * + *
+     * Optional. The partition ID of the message that failed to be ingested.
+     * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The partitionId. + */ + long getPartitionId(); + + /** + * + * + *
+     * Optional. The offset within the partition of the message that failed to
+     * be ingested.
+     * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The offset. + */ + long getOffset(); + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + boolean hasApiViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + boolean hasSchemaViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason getSchemaViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + boolean hasMessageTransformationFailureReason(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder(); + + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason.ReasonCase + getReasonCase(); + } + + /** + * + * + *
+   * Failure when ingesting from an Azure Event Hubs source.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason} + */ + public static final class AzureEventHubsFailureReason extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) + AzureEventHubsFailureReasonOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AzureEventHubsFailureReason"); + } + + // Use AzureEventHubsFailureReason.newBuilder() to construct. + private AzureEventHubsFailureReason(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AzureEventHubsFailureReason() { + namespace_ = ""; + eventHub_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AzureEventHubsFailureReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AzureEventHubsFailureReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason.class, + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason.Builder.class); + } + + private int reasonCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object reason_; + + public enum ReasonCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + API_VIOLATION_REASON(5), + SCHEMA_VIOLATION_REASON(6), + MESSAGE_TRANSFORMATION_FAILURE_REASON(7), + REASON_NOT_SET(0); + private final int value; + + private ReasonCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ReasonCase valueOf(int value) { + return forNumber(value); + } + + public static ReasonCase forNumber(int value) { + switch (value) { + case 5: + return API_VIOLATION_REASON; + case 6: + return SCHEMA_VIOLATION_REASON; + case 7: + return MESSAGE_TRANSFORMATION_FAILURE_REASON; + case 0: + return REASON_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public ReasonCase getReasonCase() { + return ReasonCase.forNumber(reasonCase_); + } + + public static final int NAMESPACE_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object namespace_ = ""; + + /** + * + * + *
+     * Optional. The namespace containing the event hub being ingested from.
+     * 
+ * + * string namespace = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The namespace. + */ + @java.lang.Override + public java.lang.String getNamespace() { + java.lang.Object ref = namespace_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + namespace_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The namespace containing the event hub being ingested from.
+     * 
+ * + * string namespace = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for namespace. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNamespaceBytes() { + java.lang.Object ref = namespace_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + namespace_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int EVENT_HUB_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object eventHub_ = ""; + + /** + * + * + *
+     * Optional. The name of the event hub being ingested from.
+     * 
+ * + * string event_hub = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The eventHub. + */ + @java.lang.Override + public java.lang.String getEventHub() { + java.lang.Object ref = eventHub_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + eventHub_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The name of the event hub being ingested from.
+     * 
+ * + * string event_hub = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for eventHub. + */ + @java.lang.Override + public com.google.protobuf.ByteString getEventHubBytes() { + java.lang.Object ref = eventHub_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + eventHub_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PARTITION_ID_FIELD_NUMBER = 3; + private long partitionId_ = 0L; + + /** + * + * + *
+     * Optional. The partition ID of the message that failed to be ingested.
+     * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The partitionId. + */ + @java.lang.Override + public long getPartitionId() { + return partitionId_; + } + + public static final int OFFSET_FIELD_NUMBER = 4; + private long offset_ = 0L; + + /** + * + * + *
+     * Optional. The offset within the partition of the message that failed to
+     * be ingested.
+     * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The offset. + */ + @java.lang.Override + public long getOffset() { + return offset_; + } + + public static final int API_VIOLATION_REASON_FIELD_NUMBER = 5; + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + @java.lang.Override + public boolean hasApiViolationReason() { + return reasonCase_ == 5; + } + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason() { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder() { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + + public static final int SCHEMA_VIOLATION_REASON_FIELD_NUMBER = 6; + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + @java.lang.Override + public boolean hasSchemaViolationReason() { + return reasonCase_ == 6; + } + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + getSchemaViolationReason() { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder() { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.getDefaultInstance(); + } + + public static final int MESSAGE_TRANSFORMATION_FAILURE_REASON_FIELD_NUMBER = 7; + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + @java.lang.Override + public boolean hasMessageTransformationFailureReason() { + return reasonCase_ == 7; + } + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason() { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder() { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(namespace_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, namespace_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(eventHub_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, eventHub_); + } + if (partitionId_ != 0L) { + output.writeInt64(3, partitionId_); + } + if (offset_ != 0L) { + output.writeInt64(4, offset_); + } + if (reasonCase_ == 5) { + output.writeMessage( + 5, (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_); + } + if (reasonCase_ == 6) { + output.writeMessage( + 6, (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_); + } + if (reasonCase_ == 7) { + output.writeMessage( + 7, + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(namespace_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, namespace_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(eventHub_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, eventHub_); + } + if (partitionId_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(3, partitionId_); + } + if (offset_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(4, offset_); + } + if (reasonCase_ == 5) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 5, (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_); + } + if (reasonCase_ == 6) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 6, (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_); + } + if (reasonCase_ == 7) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 7, + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj + instanceof com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason other = + (com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) obj; + + if (!getNamespace().equals(other.getNamespace())) return false; + if (!getEventHub().equals(other.getEventHub())) return false; + if (getPartitionId() != other.getPartitionId()) return false; + if (getOffset() != other.getOffset()) return false; + if (!getReasonCase().equals(other.getReasonCase())) return false; + switch (reasonCase_) { + case 5: + if (!getApiViolationReason().equals(other.getApiViolationReason())) return false; + break; + case 6: + if (!getSchemaViolationReason().equals(other.getSchemaViolationReason())) return false; + break; + case 7: + if (!getMessageTransformationFailureReason() + .equals(other.getMessageTransformationFailureReason())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAMESPACE_FIELD_NUMBER; + hash = (53 * hash) + getNamespace().hashCode(); + hash = (37 * hash) + EVENT_HUB_FIELD_NUMBER; + hash = (53 * hash) + getEventHub().hashCode(); + hash = (37 * hash) + PARTITION_ID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getPartitionId()); + hash = (37 * hash) + OFFSET_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getOffset()); + switch (reasonCase_) { + case 5: + hash = (37 * hash) + API_VIOLATION_REASON_FIELD_NUMBER; + hash = (53 * hash) + getApiViolationReason().hashCode(); + break; + case 6: + hash = (37 * hash) + SCHEMA_VIOLATION_REASON_FIELD_NUMBER; + hash = (53 * hash) + getSchemaViolationReason().hashCode(); + break; + case 7: + hash = (37 * hash) + MESSAGE_TRANSFORMATION_FAILURE_REASON_FIELD_NUMBER; + hash = (53 * hash) + getMessageTransformationFailureReason().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Failure when ingesting from an Azure Event Hubs source.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReasonOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AzureEventHubsFailureReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AzureEventHubsFailureReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason.class, + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason.Builder + .class); + } + + // Construct using + // com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + namespace_ = ""; + eventHub_ = ""; + partitionId_ = 0L; + offset_ = 0L; + if (apiViolationReasonBuilder_ != null) { + apiViolationReasonBuilder_.clear(); + } + if (schemaViolationReasonBuilder_ != null) { + schemaViolationReasonBuilder_.clear(); + } + if (messageTransformationFailureReasonBuilder_ != null) { + messageTransformationFailureReasonBuilder_.clear(); + } + reasonCase_ = 0; + reason_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AzureEventHubsFailureReason_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason build() { + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason buildPartial() { + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason result = + new com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.namespace_ = namespace_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.eventHub_ = eventHub_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.partitionId_ = partitionId_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.offset_ = offset_; + } + } + + private void buildPartialOneofs( + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason result) { + result.reasonCase_ = reasonCase_; + result.reason_ = this.reason_; + if (reasonCase_ == 5 && apiViolationReasonBuilder_ != null) { + result.reason_ = apiViolationReasonBuilder_.build(); + } + if (reasonCase_ == 6 && schemaViolationReasonBuilder_ != null) { + result.reason_ = schemaViolationReasonBuilder_.build(); + } + if (reasonCase_ == 7 && messageTransformationFailureReasonBuilder_ != null) { + result.reason_ = messageTransformationFailureReasonBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other + instanceof com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) { + return mergeFrom( + (com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason other) { + if (other + == com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + .getDefaultInstance()) return this; + if (!other.getNamespace().isEmpty()) { + namespace_ = other.namespace_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getEventHub().isEmpty()) { + eventHub_ = other.eventHub_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (other.getPartitionId() != 0L) { + setPartitionId(other.getPartitionId()); + } + if (other.getOffset() != 0L) { + setOffset(other.getOffset()); + } + switch (other.getReasonCase()) { + case API_VIOLATION_REASON: + { + mergeApiViolationReason(other.getApiViolationReason()); + break; + } + case SCHEMA_VIOLATION_REASON: + { + mergeSchemaViolationReason(other.getSchemaViolationReason()); + break; + } + case MESSAGE_TRANSFORMATION_FAILURE_REASON: + { + mergeMessageTransformationFailureReason( + other.getMessageTransformationFailureReason()); + break; + } + case REASON_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + namespace_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + eventHub_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 24: + { + partitionId_ = input.readInt64(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 32: + { + offset_ = input.readInt64(); + bitField0_ |= 0x00000008; + break; + } // case 32 + case 42: + { + input.readMessage( + internalGetApiViolationReasonFieldBuilder().getBuilder(), extensionRegistry); + reasonCase_ = 5; + break; + } // case 42 + case 50: + { + input.readMessage( + internalGetSchemaViolationReasonFieldBuilder().getBuilder(), + extensionRegistry); + reasonCase_ = 6; + break; + } // case 50 + case 58: + { + input.readMessage( + internalGetMessageTransformationFailureReasonFieldBuilder().getBuilder(), + extensionRegistry); + reasonCase_ = 7; + break; + } // case 58 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int reasonCase_ = 0; + private java.lang.Object reason_; + + public ReasonCase getReasonCase() { + return ReasonCase.forNumber(reasonCase_); + } + + public Builder clearReason() { + reasonCase_ = 0; + reason_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private java.lang.Object namespace_ = ""; + + /** + * + * + *
+       * Optional. The namespace containing the event hub being ingested from.
+       * 
+ * + * string namespace = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The namespace. + */ + public java.lang.String getNamespace() { + java.lang.Object ref = namespace_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + namespace_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The namespace containing the event hub being ingested from.
+       * 
+ * + * string namespace = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for namespace. + */ + public com.google.protobuf.ByteString getNamespaceBytes() { + java.lang.Object ref = namespace_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + namespace_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The namespace containing the event hub being ingested from.
+       * 
+ * + * string namespace = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The namespace to set. + * @return This builder for chaining. + */ + public Builder setNamespace(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + namespace_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The namespace containing the event hub being ingested from.
+       * 
+ * + * string namespace = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearNamespace() { + namespace_ = getDefaultInstance().getNamespace(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The namespace containing the event hub being ingested from.
+       * 
+ * + * string namespace = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for namespace to set. + * @return This builder for chaining. + */ + public Builder setNamespaceBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + namespace_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object eventHub_ = ""; + + /** + * + * + *
+       * Optional. The name of the event hub being ingested from.
+       * 
+ * + * string event_hub = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The eventHub. + */ + public java.lang.String getEventHub() { + java.lang.Object ref = eventHub_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + eventHub_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the event hub being ingested from.
+       * 
+ * + * string event_hub = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for eventHub. + */ + public com.google.protobuf.ByteString getEventHubBytes() { + java.lang.Object ref = eventHub_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + eventHub_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the event hub being ingested from.
+       * 
+ * + * string event_hub = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The eventHub to set. + * @return This builder for chaining. + */ + public Builder setEventHub(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + eventHub_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the event hub being ingested from.
+       * 
+ * + * string event_hub = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearEventHub() { + eventHub_ = getDefaultInstance().getEventHub(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the event hub being ingested from.
+       * 
+ * + * string event_hub = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for eventHub to set. + * @return This builder for chaining. + */ + public Builder setEventHubBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + eventHub_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private long partitionId_; + + /** + * + * + *
+       * Optional. The partition ID of the message that failed to be ingested.
+       * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The partitionId. + */ + @java.lang.Override + public long getPartitionId() { + return partitionId_; + } + + /** + * + * + *
+       * Optional. The partition ID of the message that failed to be ingested.
+       * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The partitionId to set. + * @return This builder for chaining. + */ + public Builder setPartitionId(long value) { + + partitionId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The partition ID of the message that failed to be ingested.
+       * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPartitionId() { + bitField0_ = (bitField0_ & ~0x00000004); + partitionId_ = 0L; + onChanged(); + return this; + } + + private long offset_; + + /** + * + * + *
+       * Optional. The offset within the partition of the message that failed to
+       * be ingested.
+       * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The offset. + */ + @java.lang.Override + public long getOffset() { + return offset_; + } + + /** + * + * + *
+       * Optional. The offset within the partition of the message that failed to
+       * be ingested.
+       * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The offset to set. + * @return This builder for chaining. + */ + public Builder setOffset(long value) { + + offset_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The offset within the partition of the message that failed to
+       * be ingested.
+       * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearOffset() { + bitField0_ = (bitField0_ & ~0x00000008); + offset_ = 0L; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder> + apiViolationReasonBuilder_; + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + @java.lang.Override + public boolean hasApiViolationReason() { + return reasonCase_ == 5; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason() { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } else { + if (reasonCase_ == 5) { + return apiViolationReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason value) { + if (apiViolationReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + apiViolationReasonBuilder_.setMessage(value); + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder builderForValue) { + if (apiViolationReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + apiViolationReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason value) { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 5 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 5) { + apiViolationReasonBuilder_.mergeFrom(value); + } else { + apiViolationReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearApiViolationReason() { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 5) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 5) { + reasonCase_ = 0; + reason_ = null; + } + apiViolationReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder + getApiViolationReasonBuilder() { + return internalGetApiViolationReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder() { + if ((reasonCase_ == 5) && (apiViolationReasonBuilder_ != null)) { + return apiViolationReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder> + internalGetApiViolationReasonFieldBuilder() { + if (apiViolationReasonBuilder_ == null) { + if (!(reasonCase_ == 5)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + apiViolationReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 5; + onChanged(); + return apiViolationReasonBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder> + schemaViolationReasonBuilder_; + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + @java.lang.Override + public boolean hasSchemaViolationReason() { + return reasonCase_ == 6; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + getSchemaViolationReason() { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } else { + if (reasonCase_ == 6) { + return schemaViolationReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason value) { + if (schemaViolationReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + schemaViolationReasonBuilder_.setMessage(value); + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder + builderForValue) { + if (schemaViolationReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + schemaViolationReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason value) { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 6 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 6) { + schemaViolationReasonBuilder_.mergeFrom(value); + } else { + schemaViolationReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearSchemaViolationReason() { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 6) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 6) { + reasonCase_ = 0; + reason_ = null; + } + schemaViolationReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder + getSchemaViolationReasonBuilder() { + return internalGetSchemaViolationReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder() { + if ((reasonCase_ == 6) && (schemaViolationReasonBuilder_ != null)) { + return schemaViolationReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder> + internalGetSchemaViolationReasonFieldBuilder() { + if (schemaViolationReasonBuilder_ == null) { + if (!(reasonCase_ == 6)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + schemaViolationReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 6; + onChanged(); + return schemaViolationReasonBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder> + messageTransformationFailureReasonBuilder_; + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + @java.lang.Override + public boolean hasMessageTransformationFailureReason() { + return reasonCase_ == 7; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } else { + if (reasonCase_ == 7) { + return messageTransformationFailureReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason value) { + if (messageTransformationFailureReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + messageTransformationFailureReasonBuilder_.setMessage(value); + } + reasonCase_ = 7; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder + builderForValue) { + if (messageTransformationFailureReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + messageTransformationFailureReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 7; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason value) { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 7 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReason) + reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 7) { + messageTransformationFailureReasonBuilder_.mergeFrom(value); + } else { + messageTransformationFailureReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 7; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMessageTransformationFailureReason() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 7) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 7) { + reasonCase_ = 0; + reason_ = null; + } + messageTransformationFailureReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder + getMessageTransformationFailureReasonBuilder() { + return internalGetMessageTransformationFailureReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder() { + if ((reasonCase_ == 7) && (messageTransformationFailureReasonBuilder_ != null)) { + return messageTransformationFailureReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder> + internalGetMessageTransformationFailureReasonFieldBuilder() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (!(reasonCase_ == 7)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + messageTransformationFailureReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 7; + onChanged(); + return messageTransformationFailureReasonBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) + private static final com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = + new com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason(); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AzureEventHubsFailureReason parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface ConfluentCloudFailureReasonOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Optional. The cluster ID containing the topic being ingested from.
+     * 
+ * + * string cluster_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The clusterId. + */ + java.lang.String getClusterId(); + + /** + * + * + *
+     * Optional. The cluster ID containing the topic being ingested from.
+     * 
+ * + * string cluster_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for clusterId. + */ + com.google.protobuf.ByteString getClusterIdBytes(); + + /** + * + * + *
+     * Optional. The name of the Kafka topic being ingested from.
+     * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The kafkaTopic. + */ + java.lang.String getKafkaTopic(); + + /** + * + * + *
+     * Optional. The name of the Kafka topic being ingested from.
+     * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for kafkaTopic. + */ + com.google.protobuf.ByteString getKafkaTopicBytes(); + + /** + * + * + *
+     * Optional. The partition ID of the message that failed to be ingested.
+     * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The partitionId. + */ + long getPartitionId(); + + /** + * + * + *
+     * Optional. The offset within the partition of the message that failed to
+     * be ingested.
+     * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The offset. + */ + long getOffset(); + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + boolean hasApiViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + boolean hasSchemaViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason getSchemaViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + boolean hasMessageTransformationFailureReason(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder(); + + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason.ReasonCase + getReasonCase(); + } + + /** + * + * + *
+   * Failure when ingesting from a Confluent Cloud source.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason} + */ + public static final class ConfluentCloudFailureReason extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) + ConfluentCloudFailureReasonOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ConfluentCloudFailureReason"); + } + + // Use ConfluentCloudFailureReason.newBuilder() to construct. + private ConfluentCloudFailureReason(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ConfluentCloudFailureReason() { + clusterId_ = ""; + kafkaTopic_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_ConfluentCloudFailureReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_ConfluentCloudFailureReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason.class, + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason.Builder.class); + } + + private int reasonCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object reason_; + + public enum ReasonCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + API_VIOLATION_REASON(5), + SCHEMA_VIOLATION_REASON(6), + MESSAGE_TRANSFORMATION_FAILURE_REASON(7), + REASON_NOT_SET(0); + private final int value; + + private ReasonCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ReasonCase valueOf(int value) { + return forNumber(value); + } + + public static ReasonCase forNumber(int value) { + switch (value) { + case 5: + return API_VIOLATION_REASON; + case 6: + return SCHEMA_VIOLATION_REASON; + case 7: + return MESSAGE_TRANSFORMATION_FAILURE_REASON; + case 0: + return REASON_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public ReasonCase getReasonCase() { + return ReasonCase.forNumber(reasonCase_); + } + + public static final int CLUSTER_ID_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object clusterId_ = ""; + + /** + * + * + *
+     * Optional. The cluster ID containing the topic being ingested from.
+     * 
+ * + * string cluster_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The clusterId. + */ + @java.lang.Override + public java.lang.String getClusterId() { + java.lang.Object ref = clusterId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clusterId_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The cluster ID containing the topic being ingested from.
+     * 
+ * + * string cluster_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for clusterId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getClusterIdBytes() { + java.lang.Object ref = clusterId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clusterId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int KAFKA_TOPIC_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object kafkaTopic_ = ""; + + /** + * + * + *
+     * Optional. The name of the Kafka topic being ingested from.
+     * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The kafkaTopic. + */ + @java.lang.Override + public java.lang.String getKafkaTopic() { + java.lang.Object ref = kafkaTopic_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + kafkaTopic_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The name of the Kafka topic being ingested from.
+     * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for kafkaTopic. + */ + @java.lang.Override + public com.google.protobuf.ByteString getKafkaTopicBytes() { + java.lang.Object ref = kafkaTopic_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + kafkaTopic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PARTITION_ID_FIELD_NUMBER = 3; + private long partitionId_ = 0L; + + /** + * + * + *
+     * Optional. The partition ID of the message that failed to be ingested.
+     * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The partitionId. + */ + @java.lang.Override + public long getPartitionId() { + return partitionId_; + } + + public static final int OFFSET_FIELD_NUMBER = 4; + private long offset_ = 0L; + + /** + * + * + *
+     * Optional. The offset within the partition of the message that failed to
+     * be ingested.
+     * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The offset. + */ + @java.lang.Override + public long getOffset() { + return offset_; + } + + public static final int API_VIOLATION_REASON_FIELD_NUMBER = 5; + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + @java.lang.Override + public boolean hasApiViolationReason() { + return reasonCase_ == 5; + } + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason() { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. The Pub/Sub API limits prevented the desired message from
+     * being published.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder() { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + + public static final int SCHEMA_VIOLATION_REASON_FIELD_NUMBER = 6; + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + @java.lang.Override + public boolean hasSchemaViolationReason() { + return reasonCase_ == 6; + } + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + getSchemaViolationReason() { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder() { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.getDefaultInstance(); + } + + public static final int MESSAGE_TRANSFORMATION_FAILURE_REASON_FIELD_NUMBER = 7; + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + @java.lang.Override + public boolean hasMessageTransformationFailureReason() { + return reasonCase_ == 7; + } + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason() { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder() { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clusterId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, clusterId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kafkaTopic_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, kafkaTopic_); + } + if (partitionId_ != 0L) { + output.writeInt64(3, partitionId_); + } + if (offset_ != 0L) { + output.writeInt64(4, offset_); + } + if (reasonCase_ == 5) { + output.writeMessage( + 5, (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_); + } + if (reasonCase_ == 6) { + output.writeMessage( + 6, (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_); + } + if (reasonCase_ == 7) { + output.writeMessage( + 7, + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clusterId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, clusterId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kafkaTopic_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, kafkaTopic_); + } + if (partitionId_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(3, partitionId_); + } + if (offset_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(4, offset_); + } + if (reasonCase_ == 5) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 5, (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_); + } + if (reasonCase_ == 6) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 6, (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_); + } + if (reasonCase_ == 7) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 7, + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj + instanceof com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason other = + (com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) obj; + + if (!getClusterId().equals(other.getClusterId())) return false; + if (!getKafkaTopic().equals(other.getKafkaTopic())) return false; + if (getPartitionId() != other.getPartitionId()) return false; + if (getOffset() != other.getOffset()) return false; + if (!getReasonCase().equals(other.getReasonCase())) return false; + switch (reasonCase_) { + case 5: + if (!getApiViolationReason().equals(other.getApiViolationReason())) return false; + break; + case 6: + if (!getSchemaViolationReason().equals(other.getSchemaViolationReason())) return false; + break; + case 7: + if (!getMessageTransformationFailureReason() + .equals(other.getMessageTransformationFailureReason())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + CLUSTER_ID_FIELD_NUMBER; + hash = (53 * hash) + getClusterId().hashCode(); + hash = (37 * hash) + KAFKA_TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getKafkaTopic().hashCode(); + hash = (37 * hash) + PARTITION_ID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getPartitionId()); + hash = (37 * hash) + OFFSET_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getOffset()); + switch (reasonCase_) { + case 5: + hash = (37 * hash) + API_VIOLATION_REASON_FIELD_NUMBER; + hash = (53 * hash) + getApiViolationReason().hashCode(); + break; + case 6: + hash = (37 * hash) + SCHEMA_VIOLATION_REASON_FIELD_NUMBER; + hash = (53 * hash) + getSchemaViolationReason().hashCode(); + break; + case 7: + hash = (37 * hash) + MESSAGE_TRANSFORMATION_FAILURE_REASON_FIELD_NUMBER; + hash = (53 * hash) + getMessageTransformationFailureReason().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Failure when ingesting from a Confluent Cloud source.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReasonOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_ConfluentCloudFailureReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_ConfluentCloudFailureReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason.class, + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason.Builder + .class); + } + + // Construct using + // com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + clusterId_ = ""; + kafkaTopic_ = ""; + partitionId_ = 0L; + offset_ = 0L; + if (apiViolationReasonBuilder_ != null) { + apiViolationReasonBuilder_.clear(); + } + if (schemaViolationReasonBuilder_ != null) { + schemaViolationReasonBuilder_.clear(); + } + if (messageTransformationFailureReasonBuilder_ != null) { + messageTransformationFailureReasonBuilder_.clear(); + } + reasonCase_ = 0; + reason_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_ConfluentCloudFailureReason_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason build() { + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason buildPartial() { + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason result = + new com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.clusterId_ = clusterId_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.kafkaTopic_ = kafkaTopic_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.partitionId_ = partitionId_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.offset_ = offset_; + } + } + + private void buildPartialOneofs( + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason result) { + result.reasonCase_ = reasonCase_; + result.reason_ = this.reason_; + if (reasonCase_ == 5 && apiViolationReasonBuilder_ != null) { + result.reason_ = apiViolationReasonBuilder_.build(); + } + if (reasonCase_ == 6 && schemaViolationReasonBuilder_ != null) { + result.reason_ = schemaViolationReasonBuilder_.build(); + } + if (reasonCase_ == 7 && messageTransformationFailureReasonBuilder_ != null) { + result.reason_ = messageTransformationFailureReasonBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other + instanceof com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) { + return mergeFrom( + (com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason other) { + if (other + == com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + .getDefaultInstance()) return this; + if (!other.getClusterId().isEmpty()) { + clusterId_ = other.clusterId_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getKafkaTopic().isEmpty()) { + kafkaTopic_ = other.kafkaTopic_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (other.getPartitionId() != 0L) { + setPartitionId(other.getPartitionId()); + } + if (other.getOffset() != 0L) { + setOffset(other.getOffset()); + } + switch (other.getReasonCase()) { + case API_VIOLATION_REASON: + { + mergeApiViolationReason(other.getApiViolationReason()); + break; + } + case SCHEMA_VIOLATION_REASON: + { + mergeSchemaViolationReason(other.getSchemaViolationReason()); + break; + } + case MESSAGE_TRANSFORMATION_FAILURE_REASON: + { + mergeMessageTransformationFailureReason( + other.getMessageTransformationFailureReason()); + break; + } + case REASON_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + clusterId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + kafkaTopic_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 24: + { + partitionId_ = input.readInt64(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 32: + { + offset_ = input.readInt64(); + bitField0_ |= 0x00000008; + break; + } // case 32 + case 42: + { + input.readMessage( + internalGetApiViolationReasonFieldBuilder().getBuilder(), extensionRegistry); + reasonCase_ = 5; + break; + } // case 42 + case 50: + { + input.readMessage( + internalGetSchemaViolationReasonFieldBuilder().getBuilder(), + extensionRegistry); + reasonCase_ = 6; + break; + } // case 50 + case 58: + { + input.readMessage( + internalGetMessageTransformationFailureReasonFieldBuilder().getBuilder(), + extensionRegistry); + reasonCase_ = 7; + break; + } // case 58 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int reasonCase_ = 0; + private java.lang.Object reason_; + + public ReasonCase getReasonCase() { + return ReasonCase.forNumber(reasonCase_); + } + + public Builder clearReason() { + reasonCase_ = 0; + reason_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private java.lang.Object clusterId_ = ""; + + /** + * + * + *
+       * Optional. The cluster ID containing the topic being ingested from.
+       * 
+ * + * string cluster_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The clusterId. + */ + public java.lang.String getClusterId() { + java.lang.Object ref = clusterId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clusterId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The cluster ID containing the topic being ingested from.
+       * 
+ * + * string cluster_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for clusterId. + */ + public com.google.protobuf.ByteString getClusterIdBytes() { + java.lang.Object ref = clusterId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clusterId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The cluster ID containing the topic being ingested from.
+       * 
+ * + * string cluster_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The clusterId to set. + * @return This builder for chaining. + */ + public Builder setClusterId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + clusterId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The cluster ID containing the topic being ingested from.
+       * 
+ * + * string cluster_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearClusterId() { + clusterId_ = getDefaultInstance().getClusterId(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The cluster ID containing the topic being ingested from.
+       * 
+ * + * string cluster_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for clusterId to set. + * @return This builder for chaining. + */ + public Builder setClusterIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + clusterId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object kafkaTopic_ = ""; + + /** + * + * + *
+       * Optional. The name of the Kafka topic being ingested from.
+       * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The kafkaTopic. + */ + public java.lang.String getKafkaTopic() { + java.lang.Object ref = kafkaTopic_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + kafkaTopic_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the Kafka topic being ingested from.
+       * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for kafkaTopic. + */ + public com.google.protobuf.ByteString getKafkaTopicBytes() { + java.lang.Object ref = kafkaTopic_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + kafkaTopic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the Kafka topic being ingested from.
+       * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The kafkaTopic to set. + * @return This builder for chaining. + */ + public Builder setKafkaTopic(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + kafkaTopic_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the Kafka topic being ingested from.
+       * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearKafkaTopic() { + kafkaTopic_ = getDefaultInstance().getKafkaTopic(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the Kafka topic being ingested from.
+       * 
+ * + * string kafka_topic = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for kafkaTopic to set. + * @return This builder for chaining. + */ + public Builder setKafkaTopicBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + kafkaTopic_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private long partitionId_; + + /** + * + * + *
+       * Optional. The partition ID of the message that failed to be ingested.
+       * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The partitionId. + */ + @java.lang.Override + public long getPartitionId() { + return partitionId_; + } + + /** + * + * + *
+       * Optional. The partition ID of the message that failed to be ingested.
+       * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The partitionId to set. + * @return This builder for chaining. + */ + public Builder setPartitionId(long value) { + + partitionId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The partition ID of the message that failed to be ingested.
+       * 
+ * + * int64 partition_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPartitionId() { + bitField0_ = (bitField0_ & ~0x00000004); + partitionId_ = 0L; + onChanged(); + return this; + } + + private long offset_; + + /** + * + * + *
+       * Optional. The offset within the partition of the message that failed to
+       * be ingested.
+       * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The offset. + */ + @java.lang.Override + public long getOffset() { + return offset_; + } + + /** + * + * + *
+       * Optional. The offset within the partition of the message that failed to
+       * be ingested.
+       * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The offset to set. + * @return This builder for chaining. + */ + public Builder setOffset(long value) { + + offset_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The offset within the partition of the message that failed to
+       * be ingested.
+       * 
+ * + * int64 offset = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearOffset() { + bitField0_ = (bitField0_ & ~0x00000008); + offset_ = 0L; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder> + apiViolationReasonBuilder_; + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + @java.lang.Override + public boolean hasApiViolationReason() { + return reasonCase_ == 5; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason() { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } else { + if (reasonCase_ == 5) { + return apiViolationReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason value) { + if (apiViolationReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + apiViolationReasonBuilder_.setMessage(value); + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder builderForValue) { + if (apiViolationReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + apiViolationReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason value) { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 5 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 5) { + apiViolationReasonBuilder_.mergeFrom(value); + } else { + apiViolationReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearApiViolationReason() { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 5) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 5) { + reasonCase_ = 0; + reason_ = null; + } + apiViolationReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder + getApiViolationReasonBuilder() { + return internalGetApiViolationReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder() { + if ((reasonCase_ == 5) && (apiViolationReasonBuilder_ != null)) { + return apiViolationReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub API limits prevented the desired message from
+       * being published.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder> + internalGetApiViolationReasonFieldBuilder() { + if (apiViolationReasonBuilder_ == null) { + if (!(reasonCase_ == 5)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + apiViolationReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 5; + onChanged(); + return apiViolationReasonBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder> + schemaViolationReasonBuilder_; + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + @java.lang.Override + public boolean hasSchemaViolationReason() { + return reasonCase_ == 6; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + getSchemaViolationReason() { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } else { + if (reasonCase_ == 6) { + return schemaViolationReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason value) { + if (schemaViolationReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + schemaViolationReasonBuilder_.setMessage(value); + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder + builderForValue) { + if (schemaViolationReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + schemaViolationReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason value) { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 6 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 6) { + schemaViolationReasonBuilder_.mergeFrom(value); + } else { + schemaViolationReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearSchemaViolationReason() { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 6) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 6) { + reasonCase_ = 0; + reason_ = null; + } + schemaViolationReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder + getSchemaViolationReasonBuilder() { + return internalGetSchemaViolationReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder() { + if ((reasonCase_ == 6) && (schemaViolationReasonBuilder_ != null)) { + return schemaViolationReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder> + internalGetSchemaViolationReasonFieldBuilder() { + if (schemaViolationReasonBuilder_ == null) { + if (!(reasonCase_ == 6)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + schemaViolationReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 6; + onChanged(); + return schemaViolationReasonBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder> + messageTransformationFailureReasonBuilder_; + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + @java.lang.Override + public boolean hasMessageTransformationFailureReason() { + return reasonCase_ == 7; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } else { + if (reasonCase_ == 7) { + return messageTransformationFailureReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason value) { + if (messageTransformationFailureReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + messageTransformationFailureReasonBuilder_.setMessage(value); + } + reasonCase_ = 7; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder + builderForValue) { + if (messageTransformationFailureReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + messageTransformationFailureReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 7; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason value) { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 7 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReason) + reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 7) { + messageTransformationFailureReasonBuilder_.mergeFrom(value); + } else { + messageTransformationFailureReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 7; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMessageTransformationFailureReason() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 7) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 7) { + reasonCase_ = 0; + reason_ = null; + } + messageTransformationFailureReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder + getMessageTransformationFailureReasonBuilder() { + return internalGetMessageTransformationFailureReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder() { + if ((reasonCase_ == 7) && (messageTransformationFailureReasonBuilder_ != null)) { + return messageTransformationFailureReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder> + internalGetMessageTransformationFailureReasonFieldBuilder() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (!(reasonCase_ == 7)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + messageTransformationFailureReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 7; + onChanged(); + return messageTransformationFailureReasonBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) + private static final com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = + new com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason(); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ConfluentCloudFailureReason parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface AwsKinesisFailureReasonOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Optional. The stream ARN of the Kinesis stream being ingested from.
+     * 
+ * + * string stream_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The streamArn. + */ + java.lang.String getStreamArn(); + + /** + * + * + *
+     * Optional. The stream ARN of the Kinesis stream being ingested from.
+     * 
+ * + * string stream_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for streamArn. + */ + com.google.protobuf.ByteString getStreamArnBytes(); + + /** + * + * + *
+     * Optional. The partition key of the message that failed to be ingested.
+     * 
+ * + * string partition_key = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The partitionKey. + */ + java.lang.String getPartitionKey(); + + /** + * + * + *
+     * Optional. The partition key of the message that failed to be ingested.
+     * 
+ * + * string partition_key = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for partitionKey. + */ + com.google.protobuf.ByteString getPartitionKeyBytes(); + + /** + * + * + *
+     * Optional. The sequence number of the message that failed to be ingested.
+     * 
+ * + * string sequence_number = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The sequenceNumber. + */ + java.lang.String getSequenceNumber(); + + /** + * + * + *
+     * Optional. The sequence number of the message that failed to be ingested.
+     * 
+ * + * string sequence_number = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for sequenceNumber. + */ + com.google.protobuf.ByteString getSequenceNumberBytes(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + boolean hasSchemaViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason getSchemaViolationReason(); + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + boolean hasMessageTransformationFailureReason(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason(); + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder(); + + /** + * + * + *
+     * Optional. The message failed to be published due to an API violation.
+     * This is only set when the size of the data field of the Kinesis record
+     * is zero.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + boolean hasApiViolationReason(); + + /** + * + * + *
+     * Optional. The message failed to be published due to an API violation.
+     * This is only set when the size of the data field of the Kinesis record
+     * is zero.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason(); + + /** + * + * + *
+     * Optional. The message failed to be published due to an API violation.
+     * This is only set when the size of the data field of the Kinesis record
+     * is zero.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder(); + + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.ReasonCase getReasonCase(); + } + + /** + * + * + *
+   * Failure when ingesting from an AWS Kinesis source.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason} + */ + public static final class AwsKinesisFailureReason extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) + AwsKinesisFailureReasonOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AwsKinesisFailureReason"); + } + + // Use AwsKinesisFailureReason.newBuilder() to construct. + private AwsKinesisFailureReason(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AwsKinesisFailureReason() { + streamArn_ = ""; + partitionKey_ = ""; + sequenceNumber_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AwsKinesisFailureReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AwsKinesisFailureReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.class, + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.Builder.class); + } + + private int reasonCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object reason_; + + public enum ReasonCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + SCHEMA_VIOLATION_REASON(4), + MESSAGE_TRANSFORMATION_FAILURE_REASON(5), + API_VIOLATION_REASON(6), + REASON_NOT_SET(0); + private final int value; + + private ReasonCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ReasonCase valueOf(int value) { + return forNumber(value); + } + + public static ReasonCase forNumber(int value) { + switch (value) { + case 4: + return SCHEMA_VIOLATION_REASON; + case 5: + return MESSAGE_TRANSFORMATION_FAILURE_REASON; + case 6: + return API_VIOLATION_REASON; + case 0: + return REASON_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public ReasonCase getReasonCase() { + return ReasonCase.forNumber(reasonCase_); + } + + public static final int STREAM_ARN_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object streamArn_ = ""; + + /** + * + * + *
+     * Optional. The stream ARN of the Kinesis stream being ingested from.
+     * 
+ * + * string stream_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The streamArn. + */ + @java.lang.Override + public java.lang.String getStreamArn() { + java.lang.Object ref = streamArn_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + streamArn_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The stream ARN of the Kinesis stream being ingested from.
+     * 
+ * + * string stream_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for streamArn. + */ + @java.lang.Override + public com.google.protobuf.ByteString getStreamArnBytes() { + java.lang.Object ref = streamArn_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + streamArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PARTITION_KEY_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object partitionKey_ = ""; + + /** + * + * + *
+     * Optional. The partition key of the message that failed to be ingested.
+     * 
+ * + * string partition_key = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The partitionKey. + */ + @java.lang.Override + public java.lang.String getPartitionKey() { + java.lang.Object ref = partitionKey_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + partitionKey_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The partition key of the message that failed to be ingested.
+     * 
+ * + * string partition_key = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for partitionKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPartitionKeyBytes() { + java.lang.Object ref = partitionKey_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + partitionKey_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SEQUENCE_NUMBER_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object sequenceNumber_ = ""; + + /** + * + * + *
+     * Optional. The sequence number of the message that failed to be ingested.
+     * 
+ * + * string sequence_number = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The sequenceNumber. + */ + @java.lang.Override + public java.lang.String getSequenceNumber() { + java.lang.Object ref = sequenceNumber_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + sequenceNumber_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The sequence number of the message that failed to be ingested.
+     * 
+ * + * string sequence_number = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for sequenceNumber. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSequenceNumberBytes() { + java.lang.Object ref = sequenceNumber_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + sequenceNumber_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SCHEMA_VIOLATION_REASON_FIELD_NUMBER = 4; + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + @java.lang.Override + public boolean hasSchemaViolationReason() { + return reasonCase_ == 4; + } + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + getSchemaViolationReason() { + if (reasonCase_ == 4) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. The Pub/Sub message failed schema validation.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder() { + if (reasonCase_ == 4) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.getDefaultInstance(); + } + + public static final int MESSAGE_TRANSFORMATION_FAILURE_REASON_FIELD_NUMBER = 5; + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + @java.lang.Override + public boolean hasMessageTransformationFailureReason() { + return reasonCase_ == 5; + } + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason() { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. Failure encountered when applying a message transformation to
+     * the Pub/Sub message.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder() { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + + public static final int API_VIOLATION_REASON_FIELD_NUMBER = 6; + + /** + * + * + *
+     * Optional. The message failed to be published due to an API violation.
+     * This is only set when the size of the data field of the Kinesis record
+     * is zero.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + @java.lang.Override + public boolean hasApiViolationReason() { + return reasonCase_ == 6; + } + + /** + * + * + *
+     * Optional. The message failed to be published due to an API violation.
+     * This is only set when the size of the data field of the Kinesis record
+     * is zero.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason() { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + + /** + * + * + *
+     * Optional. The message failed to be published due to an API violation.
+     * This is only set when the size of the data field of the Kinesis record
+     * is zero.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder() { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(streamArn_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, streamArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(partitionKey_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, partitionKey_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sequenceNumber_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, sequenceNumber_); + } + if (reasonCase_ == 4) { + output.writeMessage( + 4, (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_); + } + if (reasonCase_ == 5) { + output.writeMessage( + 5, + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_); + } + if (reasonCase_ == 6) { + output.writeMessage( + 6, (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(streamArn_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, streamArn_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(partitionKey_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, partitionKey_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(sequenceNumber_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, sequenceNumber_); + } + if (reasonCase_ == 4) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 4, (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_); + } + if (reasonCase_ == 5) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 5, + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_); + } + if (reasonCase_ == 6) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 6, (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason other = + (com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) obj; + + if (!getStreamArn().equals(other.getStreamArn())) return false; + if (!getPartitionKey().equals(other.getPartitionKey())) return false; + if (!getSequenceNumber().equals(other.getSequenceNumber())) return false; + if (!getReasonCase().equals(other.getReasonCase())) return false; + switch (reasonCase_) { + case 4: + if (!getSchemaViolationReason().equals(other.getSchemaViolationReason())) return false; + break; + case 5: + if (!getMessageTransformationFailureReason() + .equals(other.getMessageTransformationFailureReason())) return false; + break; + case 6: + if (!getApiViolationReason().equals(other.getApiViolationReason())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + STREAM_ARN_FIELD_NUMBER; + hash = (53 * hash) + getStreamArn().hashCode(); + hash = (37 * hash) + PARTITION_KEY_FIELD_NUMBER; + hash = (53 * hash) + getPartitionKey().hashCode(); + hash = (37 * hash) + SEQUENCE_NUMBER_FIELD_NUMBER; + hash = (53 * hash) + getSequenceNumber().hashCode(); + switch (reasonCase_) { + case 4: + hash = (37 * hash) + SCHEMA_VIOLATION_REASON_FIELD_NUMBER; + hash = (53 * hash) + getSchemaViolationReason().hashCode(); + break; + case 5: + hash = (37 * hash) + MESSAGE_TRANSFORMATION_FAILURE_REASON_FIELD_NUMBER; + hash = (53 * hash) + getMessageTransformationFailureReason().hashCode(); + break; + case 6: + hash = (37 * hash) + API_VIOLATION_REASON_FIELD_NUMBER; + hash = (53 * hash) + getApiViolationReason().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Failure when ingesting from an AWS Kinesis source.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReasonOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AwsKinesisFailureReason_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AwsKinesisFailureReason_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.class, + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.Builder.class); + } + + // Construct using + // com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + streamArn_ = ""; + partitionKey_ = ""; + sequenceNumber_ = ""; + if (schemaViolationReasonBuilder_ != null) { + schemaViolationReasonBuilder_.clear(); + } + if (messageTransformationFailureReasonBuilder_ != null) { + messageTransformationFailureReasonBuilder_.clear(); + } + if (apiViolationReasonBuilder_ != null) { + apiViolationReasonBuilder_.clear(); + } + reasonCase_ = 0; + reason_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_AwsKinesisFailureReason_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason build() { + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason buildPartial() { + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason result = + new com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.streamArn_ = streamArn_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.partitionKey_ = partitionKey_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.sequenceNumber_ = sequenceNumber_; + } + } + + private void buildPartialOneofs( + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason result) { + result.reasonCase_ = reasonCase_; + result.reason_ = this.reason_; + if (reasonCase_ == 4 && schemaViolationReasonBuilder_ != null) { + result.reason_ = schemaViolationReasonBuilder_.build(); + } + if (reasonCase_ == 5 && messageTransformationFailureReasonBuilder_ != null) { + result.reason_ = messageTransformationFailureReasonBuilder_.build(); + } + if (reasonCase_ == 6 && apiViolationReasonBuilder_ != null) { + result.reason_ = apiViolationReasonBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) { + return mergeFrom( + (com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason other) { + if (other + == com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + .getDefaultInstance()) return this; + if (!other.getStreamArn().isEmpty()) { + streamArn_ = other.streamArn_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getPartitionKey().isEmpty()) { + partitionKey_ = other.partitionKey_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getSequenceNumber().isEmpty()) { + sequenceNumber_ = other.sequenceNumber_; + bitField0_ |= 0x00000004; + onChanged(); + } + switch (other.getReasonCase()) { + case SCHEMA_VIOLATION_REASON: + { + mergeSchemaViolationReason(other.getSchemaViolationReason()); + break; + } + case MESSAGE_TRANSFORMATION_FAILURE_REASON: + { + mergeMessageTransformationFailureReason( + other.getMessageTransformationFailureReason()); + break; + } + case API_VIOLATION_REASON: + { + mergeApiViolationReason(other.getApiViolationReason()); + break; + } + case REASON_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + streamArn_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + partitionKey_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + sequenceNumber_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + input.readMessage( + internalGetSchemaViolationReasonFieldBuilder().getBuilder(), + extensionRegistry); + reasonCase_ = 4; + break; + } // case 34 + case 42: + { + input.readMessage( + internalGetMessageTransformationFailureReasonFieldBuilder().getBuilder(), + extensionRegistry); + reasonCase_ = 5; + break; + } // case 42 + case 50: + { + input.readMessage( + internalGetApiViolationReasonFieldBuilder().getBuilder(), extensionRegistry); + reasonCase_ = 6; + break; + } // case 50 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int reasonCase_ = 0; + private java.lang.Object reason_; + + public ReasonCase getReasonCase() { + return ReasonCase.forNumber(reasonCase_); + } + + public Builder clearReason() { + reasonCase_ = 0; + reason_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private java.lang.Object streamArn_ = ""; + + /** + * + * + *
+       * Optional. The stream ARN of the Kinesis stream being ingested from.
+       * 
+ * + * string stream_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The streamArn. + */ + public java.lang.String getStreamArn() { + java.lang.Object ref = streamArn_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + streamArn_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The stream ARN of the Kinesis stream being ingested from.
+       * 
+ * + * string stream_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for streamArn. + */ + public com.google.protobuf.ByteString getStreamArnBytes() { + java.lang.Object ref = streamArn_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + streamArn_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The stream ARN of the Kinesis stream being ingested from.
+       * 
+ * + * string stream_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The streamArn to set. + * @return This builder for chaining. + */ + public Builder setStreamArn(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + streamArn_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The stream ARN of the Kinesis stream being ingested from.
+       * 
+ * + * string stream_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearStreamArn() { + streamArn_ = getDefaultInstance().getStreamArn(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The stream ARN of the Kinesis stream being ingested from.
+       * 
+ * + * string stream_arn = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for streamArn to set. + * @return This builder for chaining. + */ + public Builder setStreamArnBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + streamArn_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object partitionKey_ = ""; + + /** + * + * + *
+       * Optional. The partition key of the message that failed to be ingested.
+       * 
+ * + * string partition_key = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The partitionKey. + */ + public java.lang.String getPartitionKey() { + java.lang.Object ref = partitionKey_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + partitionKey_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The partition key of the message that failed to be ingested.
+       * 
+ * + * string partition_key = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for partitionKey. + */ + public com.google.protobuf.ByteString getPartitionKeyBytes() { + java.lang.Object ref = partitionKey_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + partitionKey_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The partition key of the message that failed to be ingested.
+       * 
+ * + * string partition_key = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The partitionKey to set. + * @return This builder for chaining. + */ + public Builder setPartitionKey(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + partitionKey_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The partition key of the message that failed to be ingested.
+       * 
+ * + * string partition_key = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPartitionKey() { + partitionKey_ = getDefaultInstance().getPartitionKey(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The partition key of the message that failed to be ingested.
+       * 
+ * + * string partition_key = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for partitionKey to set. + * @return This builder for chaining. + */ + public Builder setPartitionKeyBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + partitionKey_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object sequenceNumber_ = ""; + + /** + * + * + *
+       * Optional. The sequence number of the message that failed to be ingested.
+       * 
+ * + * string sequence_number = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The sequenceNumber. + */ + public java.lang.String getSequenceNumber() { + java.lang.Object ref = sequenceNumber_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + sequenceNumber_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The sequence number of the message that failed to be ingested.
+       * 
+ * + * string sequence_number = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for sequenceNumber. + */ + public com.google.protobuf.ByteString getSequenceNumberBytes() { + java.lang.Object ref = sequenceNumber_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + sequenceNumber_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The sequence number of the message that failed to be ingested.
+       * 
+ * + * string sequence_number = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The sequenceNumber to set. + * @return This builder for chaining. + */ + public Builder setSequenceNumber(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + sequenceNumber_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The sequence number of the message that failed to be ingested.
+       * 
+ * + * string sequence_number = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearSequenceNumber() { + sequenceNumber_ = getDefaultInstance().getSequenceNumber(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The sequence number of the message that failed to be ingested.
+       * 
+ * + * string sequence_number = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for sequenceNumber to set. + * @return This builder for chaining. + */ + public Builder setSequenceNumberBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + sequenceNumber_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder> + schemaViolationReasonBuilder_; + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaViolationReason field is set. + */ + @java.lang.Override + public boolean hasSchemaViolationReason() { + return reasonCase_ == 4; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + getSchemaViolationReason() { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 4) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } else { + if (reasonCase_ == 4) { + return schemaViolationReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason value) { + if (schemaViolationReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + schemaViolationReasonBuilder_.setMessage(value); + } + reasonCase_ = 4; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder + builderForValue) { + if (schemaViolationReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + schemaViolationReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 4; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeSchemaViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason value) { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 4 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 4) { + schemaViolationReasonBuilder_.mergeFrom(value); + } else { + schemaViolationReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 4; + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearSchemaViolationReason() { + if (schemaViolationReasonBuilder_ == null) { + if (reasonCase_ == 4) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 4) { + reasonCase_ = 0; + reason_ = null; + } + schemaViolationReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder + getSchemaViolationReasonBuilder() { + return internalGetSchemaViolationReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder + getSchemaViolationReasonOrBuilder() { + if ((reasonCase_ == 4) && (schemaViolationReasonBuilder_ != null)) { + return schemaViolationReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 4) { + return (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The Pub/Sub message failed schema validation.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason schema_violation_reason = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder> + internalGetSchemaViolationReasonFieldBuilder() { + if (schemaViolationReasonBuilder_ == null) { + if (!(reasonCase_ == 4)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason + .getDefaultInstance(); + } + schemaViolationReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReason) reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 4; + onChanged(); + return schemaViolationReasonBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder> + messageTransformationFailureReasonBuilder_; + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageTransformationFailureReason field is set. + */ + @java.lang.Override + public boolean hasMessageTransformationFailureReason() { + return reasonCase_ == 5; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageTransformationFailureReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + getMessageTransformationFailureReason() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } else { + if (reasonCase_ == 5) { + return messageTransformationFailureReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason value) { + if (messageTransformationFailureReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + messageTransformationFailureReasonBuilder_.setMessage(value); + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder + builderForValue) { + if (messageTransformationFailureReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + messageTransformationFailureReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeMessageTransformationFailureReason( + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason value) { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 5 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReason) + reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 5) { + messageTransformationFailureReasonBuilder_.mergeFrom(value); + } else { + messageTransformationFailureReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 5; + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMessageTransformationFailureReason() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (reasonCase_ == 5) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 5) { + reasonCase_ = 0; + reason_ = null; + } + messageTransformationFailureReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder + getMessageTransformationFailureReasonBuilder() { + return internalGetMessageTransformationFailureReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonOrBuilder + getMessageTransformationFailureReasonOrBuilder() { + if ((reasonCase_ == 5) && (messageTransformationFailureReasonBuilder_ != null)) { + return messageTransformationFailureReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. Failure encountered when applying a message transformation to
+       * the Pub/Sub message.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason message_transformation_failure_reason = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder> + internalGetMessageTransformationFailureReasonFieldBuilder() { + if (messageTransformationFailureReasonBuilder_ == null) { + if (!(reasonCase_ == 5)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .getDefaultInstance(); + } + messageTransformationFailureReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason + .Builder, + com.google.pubsub.v1.IngestionFailureEvent + .MessageTransformationFailureReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.MessageTransformationFailureReason) + reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 5; + onChanged(); + return messageTransformationFailureReasonBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder> + apiViolationReasonBuilder_; + + /** + * + * + *
+       * Optional. The message failed to be published due to an API violation.
+       * This is only set when the size of the data field of the Kinesis record
+       * is zero.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the apiViolationReason field is set. + */ + @java.lang.Override + public boolean hasApiViolationReason() { + return reasonCase_ == 6; + } + + /** + * + * + *
+       * Optional. The message failed to be published due to an API violation.
+       * This is only set when the size of the data field of the Kinesis record
+       * is zero.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The apiViolationReason. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason getApiViolationReason() { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } else { + if (reasonCase_ == 6) { + return apiViolationReasonBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The message failed to be published due to an API violation.
+       * This is only set when the size of the data field of the Kinesis record
+       * is zero.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason value) { + if (apiViolationReasonBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + reason_ = value; + onChanged(); + } else { + apiViolationReasonBuilder_.setMessage(value); + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The message failed to be published due to an API violation.
+       * This is only set when the size of the data field of the Kinesis record
+       * is zero.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder builderForValue) { + if (apiViolationReasonBuilder_ == null) { + reason_ = builderForValue.build(); + onChanged(); + } else { + apiViolationReasonBuilder_.setMessage(builderForValue.build()); + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The message failed to be published due to an API violation.
+       * This is only set when the size of the data field of the Kinesis record
+       * is zero.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeApiViolationReason( + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason value) { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 6 + && reason_ + != com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason + .getDefaultInstance()) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_) + .mergeFrom(value) + .buildPartial(); + } else { + reason_ = value; + } + onChanged(); + } else { + if (reasonCase_ == 6) { + apiViolationReasonBuilder_.mergeFrom(value); + } else { + apiViolationReasonBuilder_.setMessage(value); + } + } + reasonCase_ = 6; + return this; + } + + /** + * + * + *
+       * Optional. The message failed to be published due to an API violation.
+       * This is only set when the size of the data field of the Kinesis record
+       * is zero.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearApiViolationReason() { + if (apiViolationReasonBuilder_ == null) { + if (reasonCase_ == 6) { + reasonCase_ = 0; + reason_ = null; + onChanged(); + } + } else { + if (reasonCase_ == 6) { + reasonCase_ = 0; + reason_ = null; + } + apiViolationReasonBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+       * Optional. The message failed to be published due to an API violation.
+       * This is only set when the size of the data field of the Kinesis record
+       * is zero.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder + getApiViolationReasonBuilder() { + return internalGetApiViolationReasonFieldBuilder().getBuilder(); + } + + /** + * + * + *
+       * Optional. The message failed to be published due to an API violation.
+       * This is only set when the size of the data field of the Kinesis record
+       * is zero.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder + getApiViolationReasonOrBuilder() { + if ((reasonCase_ == 6) && (apiViolationReasonBuilder_ != null)) { + return apiViolationReasonBuilder_.getMessageOrBuilder(); + } else { + if (reasonCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + } + + /** + * + * + *
+       * Optional. The message failed to be published due to an API violation.
+       * This is only set when the size of the data field of the Kinesis record
+       * is zero.
+       * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ApiViolationReason api_violation_reason = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder> + internalGetApiViolationReasonFieldBuilder() { + if (apiViolationReasonBuilder_ == null) { + if (!(reasonCase_ == 6)) { + reason_ = + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.getDefaultInstance(); + } + apiViolationReasonBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.ApiViolationReason) reason_, + getParentForChildren(), + isClean()); + reason_ = null; + } + reasonCase_ = 6; + onChanged(); + return apiViolationReasonBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) + private static final com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason(); + } + + public static com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AwsKinesisFailureReason parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int failureCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object failure_; + + public enum FailureCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + CLOUD_STORAGE_FAILURE(3), + AWS_MSK_FAILURE(4), + AZURE_EVENT_HUBS_FAILURE(5), + CONFLUENT_CLOUD_FAILURE(6), + AWS_KINESIS_FAILURE(7), + FAILURE_NOT_SET(0); + private final int value; + + private FailureCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static FailureCase valueOf(int value) { + return forNumber(value); + } + + public static FailureCase forNumber(int value) { + switch (value) { + case 3: + return CLOUD_STORAGE_FAILURE; + case 4: + return AWS_MSK_FAILURE; + case 5: + return AZURE_EVENT_HUBS_FAILURE; + case 6: + return CONFLUENT_CLOUD_FAILURE; + case 7: + return AWS_KINESIS_FAILURE; + case 0: + return FAILURE_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public FailureCase getFailureCase() { + return FailureCase.forNumber(failureCase_); + } + + public static final int TOPIC_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object topic_ = ""; + + /** + * + * + *
+   * Required. Name of the import topic. Format is:
+   * projects/{project_name}/topics/{topic_name}.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + @java.lang.Override + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. Name of the import topic. Format is:
+   * projects/{project_name}/topics/{topic_name}.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ERROR_MESSAGE_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object errorMessage_ = ""; + + /** + * + * + *
+   * Required. Error details explaining why ingestion to Pub/Sub has failed.
+   * 
+ * + * string error_message = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The errorMessage. + */ + @java.lang.Override + public java.lang.String getErrorMessage() { + java.lang.Object ref = errorMessage_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + errorMessage_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. Error details explaining why ingestion to Pub/Sub has failed.
+   * 
+ * + * string error_message = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for errorMessage. + */ + @java.lang.Override + public com.google.protobuf.ByteString getErrorMessageBytes() { + java.lang.Object ref = errorMessage_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + errorMessage_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int CLOUD_STORAGE_FAILURE_FIELD_NUMBER = 3; + + /** + * + * + *
+   * Optional. Failure when ingesting from Cloud Storage.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cloudStorageFailure field is set. + */ + @java.lang.Override + public boolean hasCloudStorageFailure() { + return failureCase_ == 3; + } + + /** + * + * + *
+   * Optional. Failure when ingesting from Cloud Storage.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cloudStorageFailure. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure getCloudStorageFailure() { + if (failureCase_ == 3) { + return (com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. Failure when ingesting from Cloud Storage.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailureOrBuilder + getCloudStorageFailureOrBuilder() { + if (failureCase_ == 3) { + return (com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.getDefaultInstance(); + } + + public static final int AWS_MSK_FAILURE_FIELD_NUMBER = 4; + + /** + * + * + *
+   * Optional. Failure when ingesting from Amazon MSK.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the awsMskFailure field is set. + */ + @java.lang.Override + public boolean hasAwsMskFailure() { + return failureCase_ == 4; + } + + /** + * + * + *
+   * Optional. Failure when ingesting from Amazon MSK.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The awsMskFailure. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason getAwsMskFailure() { + if (failureCase_ == 4) { + return (com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. Failure when ingesting from Amazon MSK.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReasonOrBuilder + getAwsMskFailureOrBuilder() { + if (failureCase_ == 4) { + return (com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.getDefaultInstance(); + } + + public static final int AZURE_EVENT_HUBS_FAILURE_FIELD_NUMBER = 5; + + /** + * + * + *
+   * Optional. Failure when ingesting from Azure Event Hubs.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the azureEventHubsFailure field is set. + */ + @java.lang.Override + public boolean hasAzureEventHubsFailure() { + return failureCase_ == 5; + } + + /** + * + * + *
+   * Optional. Failure when ingesting from Azure Event Hubs.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The azureEventHubsFailure. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + getAzureEventHubsFailure() { + if (failureCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + .getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. Failure when ingesting from Azure Event Hubs.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReasonOrBuilder + getAzureEventHubsFailureOrBuilder() { + if (failureCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + .getDefaultInstance(); + } + + public static final int CONFLUENT_CLOUD_FAILURE_FIELD_NUMBER = 6; + + /** + * + * + *
+   * Optional. Failure when ingesting from Confluent Cloud.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the confluentCloudFailure field is set. + */ + @java.lang.Override + public boolean hasConfluentCloudFailure() { + return failureCase_ == 6; + } + + /** + * + * + *
+   * Optional. Failure when ingesting from Confluent Cloud.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The confluentCloudFailure. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + getConfluentCloudFailure() { + if (failureCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + .getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. Failure when ingesting from Confluent Cloud.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReasonOrBuilder + getConfluentCloudFailureOrBuilder() { + if (failureCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + .getDefaultInstance(); + } + + public static final int AWS_KINESIS_FAILURE_FIELD_NUMBER = 7; + + /** + * + * + *
+   * Optional. Failure when ingesting from AWS Kinesis.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the awsKinesisFailure field is set. + */ + @java.lang.Override + public boolean hasAwsKinesisFailure() { + return failureCase_ == 7; + } + + /** + * + * + *
+   * Optional. Failure when ingesting from AWS Kinesis.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The awsKinesisFailure. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason getAwsKinesisFailure() { + if (failureCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. Failure when ingesting from AWS Kinesis.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReasonOrBuilder + getAwsKinesisFailureOrBuilder() { + if (failureCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.getDefaultInstance(); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, topic_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(errorMessage_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, errorMessage_); + } + if (failureCase_ == 3) { + output.writeMessage( + 3, (com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) failure_); + } + if (failureCase_ == 4) { + output.writeMessage( + 4, (com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) failure_); + } + if (failureCase_ == 5) { + output.writeMessage( + 5, (com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) failure_); + } + if (failureCase_ == 6) { + output.writeMessage( + 6, (com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) failure_); + } + if (failureCase_ == 7) { + output.writeMessage( + 7, (com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) failure_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, topic_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(errorMessage_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, errorMessage_); + } + if (failureCase_ == 3) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 3, (com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) failure_); + } + if (failureCase_ == 4) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 4, (com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) failure_); + } + if (failureCase_ == 5) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 5, (com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) failure_); + } + if (failureCase_ == 6) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 6, (com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) failure_); + } + if (failureCase_ == 7) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 7, (com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) failure_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.IngestionFailureEvent)) { + return super.equals(obj); + } + com.google.pubsub.v1.IngestionFailureEvent other = + (com.google.pubsub.v1.IngestionFailureEvent) obj; + + if (!getTopic().equals(other.getTopic())) return false; + if (!getErrorMessage().equals(other.getErrorMessage())) return false; + if (!getFailureCase().equals(other.getFailureCase())) return false; + switch (failureCase_) { + case 3: + if (!getCloudStorageFailure().equals(other.getCloudStorageFailure())) return false; + break; + case 4: + if (!getAwsMskFailure().equals(other.getAwsMskFailure())) return false; + break; + case 5: + if (!getAzureEventHubsFailure().equals(other.getAzureEventHubsFailure())) return false; + break; + case 6: + if (!getConfluentCloudFailure().equals(other.getConfluentCloudFailure())) return false; + break; + case 7: + if (!getAwsKinesisFailure().equals(other.getAwsKinesisFailure())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getTopic().hashCode(); + hash = (37 * hash) + ERROR_MESSAGE_FIELD_NUMBER; + hash = (53 * hash) + getErrorMessage().hashCode(); + switch (failureCase_) { + case 3: + hash = (37 * hash) + CLOUD_STORAGE_FAILURE_FIELD_NUMBER; + hash = (53 * hash) + getCloudStorageFailure().hashCode(); + break; + case 4: + hash = (37 * hash) + AWS_MSK_FAILURE_FIELD_NUMBER; + hash = (53 * hash) + getAwsMskFailure().hashCode(); + break; + case 5: + hash = (37 * hash) + AZURE_EVENT_HUBS_FAILURE_FIELD_NUMBER; + hash = (53 * hash) + getAzureEventHubsFailure().hashCode(); + break; + case 6: + hash = (37 * hash) + CONFLUENT_CLOUD_FAILURE_FIELD_NUMBER; + hash = (53 * hash) + getConfluentCloudFailure().hashCode(); + break; + case 7: + hash = (37 * hash) + AWS_KINESIS_FAILURE_FIELD_NUMBER; + hash = (53 * hash) + getAwsKinesisFailure().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.IngestionFailureEvent parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.IngestionFailureEvent parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.IngestionFailureEvent parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.IngestionFailureEvent parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.IngestionFailureEvent prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Payload of the Platform Log entry sent when a failure is encountered while
+   * ingesting.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.IngestionFailureEvent} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.IngestionFailureEvent) + com.google.pubsub.v1.IngestionFailureEventOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.IngestionFailureEvent.class, + com.google.pubsub.v1.IngestionFailureEvent.Builder.class); + } + + // Construct using com.google.pubsub.v1.IngestionFailureEvent.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + topic_ = ""; + errorMessage_ = ""; + if (cloudStorageFailureBuilder_ != null) { + cloudStorageFailureBuilder_.clear(); + } + if (awsMskFailureBuilder_ != null) { + awsMskFailureBuilder_.clear(); + } + if (azureEventHubsFailureBuilder_ != null) { + azureEventHubsFailureBuilder_.clear(); + } + if (confluentCloudFailureBuilder_ != null) { + confluentCloudFailureBuilder_.clear(); + } + if (awsKinesisFailureBuilder_ != null) { + awsKinesisFailureBuilder_.clear(); + } + failureCase_ = 0; + failure_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent getDefaultInstanceForType() { + return com.google.pubsub.v1.IngestionFailureEvent.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent build() { + com.google.pubsub.v1.IngestionFailureEvent result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent buildPartial() { + com.google.pubsub.v1.IngestionFailureEvent result = + new com.google.pubsub.v1.IngestionFailureEvent(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.IngestionFailureEvent result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.topic_ = topic_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.errorMessage_ = errorMessage_; + } + } + + private void buildPartialOneofs(com.google.pubsub.v1.IngestionFailureEvent result) { + result.failureCase_ = failureCase_; + result.failure_ = this.failure_; + if (failureCase_ == 3 && cloudStorageFailureBuilder_ != null) { + result.failure_ = cloudStorageFailureBuilder_.build(); + } + if (failureCase_ == 4 && awsMskFailureBuilder_ != null) { + result.failure_ = awsMskFailureBuilder_.build(); + } + if (failureCase_ == 5 && azureEventHubsFailureBuilder_ != null) { + result.failure_ = azureEventHubsFailureBuilder_.build(); + } + if (failureCase_ == 6 && confluentCloudFailureBuilder_ != null) { + result.failure_ = confluentCloudFailureBuilder_.build(); + } + if (failureCase_ == 7 && awsKinesisFailureBuilder_ != null) { + result.failure_ = awsKinesisFailureBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.IngestionFailureEvent) { + return mergeFrom((com.google.pubsub.v1.IngestionFailureEvent) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.IngestionFailureEvent other) { + if (other == com.google.pubsub.v1.IngestionFailureEvent.getDefaultInstance()) return this; + if (!other.getTopic().isEmpty()) { + topic_ = other.topic_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getErrorMessage().isEmpty()) { + errorMessage_ = other.errorMessage_; + bitField0_ |= 0x00000002; + onChanged(); + } + switch (other.getFailureCase()) { + case CLOUD_STORAGE_FAILURE: + { + mergeCloudStorageFailure(other.getCloudStorageFailure()); + break; + } + case AWS_MSK_FAILURE: + { + mergeAwsMskFailure(other.getAwsMskFailure()); + break; + } + case AZURE_EVENT_HUBS_FAILURE: + { + mergeAzureEventHubsFailure(other.getAzureEventHubsFailure()); + break; + } + case CONFLUENT_CLOUD_FAILURE: + { + mergeConfluentCloudFailure(other.getConfluentCloudFailure()); + break; + } + case AWS_KINESIS_FAILURE: + { + mergeAwsKinesisFailure(other.getAwsKinesisFailure()); + break; + } + case FAILURE_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + topic_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + errorMessage_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + input.readMessage( + internalGetCloudStorageFailureFieldBuilder().getBuilder(), extensionRegistry); + failureCase_ = 3; + break; + } // case 26 + case 34: + { + input.readMessage( + internalGetAwsMskFailureFieldBuilder().getBuilder(), extensionRegistry); + failureCase_ = 4; + break; + } // case 34 + case 42: + { + input.readMessage( + internalGetAzureEventHubsFailureFieldBuilder().getBuilder(), extensionRegistry); + failureCase_ = 5; + break; + } // case 42 + case 50: + { + input.readMessage( + internalGetConfluentCloudFailureFieldBuilder().getBuilder(), extensionRegistry); + failureCase_ = 6; + break; + } // case 50 + case 58: + { + input.readMessage( + internalGetAwsKinesisFailureFieldBuilder().getBuilder(), extensionRegistry); + failureCase_ = 7; + break; + } // case 58 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int failureCase_ = 0; + private java.lang.Object failure_; + + public FailureCase getFailureCase() { + return FailureCase.forNumber(failureCase_); + } + + public Builder clearFailure() { + failureCase_ = 0; + failure_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private java.lang.Object topic_ = ""; + + /** + * + * + *
+     * Required. Name of the import topic. Format is:
+     * projects/{project_name}/topics/{topic_name}.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. Name of the import topic. Format is:
+     * projects/{project_name}/topics/{topic_name}.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. Name of the import topic. Format is:
+     * projects/{project_name}/topics/{topic_name}.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The topic to set. + * @return This builder for chaining. + */ + public Builder setTopic(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + topic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Name of the import topic. Format is:
+     * projects/{project_name}/topics/{topic_name}.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearTopic() { + topic_ = getDefaultInstance().getTopic(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Name of the import topic. Format is:
+     * projects/{project_name}/topics/{topic_name}.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for topic to set. + * @return This builder for chaining. + */ + public Builder setTopicBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + topic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object errorMessage_ = ""; + + /** + * + * + *
+     * Required. Error details explaining why ingestion to Pub/Sub has failed.
+     * 
+ * + * string error_message = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The errorMessage. + */ + public java.lang.String getErrorMessage() { + java.lang.Object ref = errorMessage_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + errorMessage_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. Error details explaining why ingestion to Pub/Sub has failed.
+     * 
+ * + * string error_message = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for errorMessage. + */ + public com.google.protobuf.ByteString getErrorMessageBytes() { + java.lang.Object ref = errorMessage_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + errorMessage_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. Error details explaining why ingestion to Pub/Sub has failed.
+     * 
+ * + * string error_message = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The errorMessage to set. + * @return This builder for chaining. + */ + public Builder setErrorMessage(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + errorMessage_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Error details explaining why ingestion to Pub/Sub has failed.
+     * 
+ * + * string error_message = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearErrorMessage() { + errorMessage_ = getDefaultInstance().getErrorMessage(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Error details explaining why ingestion to Pub/Sub has failed.
+     * 
+ * + * string error_message = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for errorMessage to set. + * @return This builder for chaining. + */ + public Builder setErrorMessageBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + errorMessage_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure, + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.Builder, + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailureOrBuilder> + cloudStorageFailureBuilder_; + + /** + * + * + *
+     * Optional. Failure when ingesting from Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cloudStorageFailure field is set. + */ + @java.lang.Override + public boolean hasCloudStorageFailure() { + return failureCase_ == 3; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cloudStorageFailure. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure getCloudStorageFailure() { + if (cloudStorageFailureBuilder_ == null) { + if (failureCase_ == 3) { + return (com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.getDefaultInstance(); + } else { + if (failureCase_ == 3) { + return cloudStorageFailureBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCloudStorageFailure( + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure value) { + if (cloudStorageFailureBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + failure_ = value; + onChanged(); + } else { + cloudStorageFailureBuilder_.setMessage(value); + } + failureCase_ = 3; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCloudStorageFailure( + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.Builder builderForValue) { + if (cloudStorageFailureBuilder_ == null) { + failure_ = builderForValue.build(); + onChanged(); + } else { + cloudStorageFailureBuilder_.setMessage(builderForValue.build()); + } + failureCase_ = 3; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeCloudStorageFailure( + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure value) { + if (cloudStorageFailureBuilder_ == null) { + if (failureCase_ == 3 + && failure_ + != com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure + .getDefaultInstance()) { + failure_ = + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) failure_) + .mergeFrom(value) + .buildPartial(); + } else { + failure_ = value; + } + onChanged(); + } else { + if (failureCase_ == 3) { + cloudStorageFailureBuilder_.mergeFrom(value); + } else { + cloudStorageFailureBuilder_.setMessage(value); + } + } + failureCase_ = 3; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearCloudStorageFailure() { + if (cloudStorageFailureBuilder_ == null) { + if (failureCase_ == 3) { + failureCase_ = 0; + failure_ = null; + onChanged(); + } + } else { + if (failureCase_ == 3) { + failureCase_ = 0; + failure_ = null; + } + cloudStorageFailureBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.Builder + getCloudStorageFailureBuilder() { + return internalGetCloudStorageFailureFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailureOrBuilder + getCloudStorageFailureOrBuilder() { + if ((failureCase_ == 3) && (cloudStorageFailureBuilder_ != null)) { + return cloudStorageFailureBuilder_.getMessageOrBuilder(); + } else { + if (failureCase_ == 3) { + return (com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Cloud Storage.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure, + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.Builder, + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailureOrBuilder> + internalGetCloudStorageFailureFieldBuilder() { + if (cloudStorageFailureBuilder_ == null) { + if (!(failureCase_ == 3)) { + failure_ = + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.getDefaultInstance(); + } + cloudStorageFailureBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure, + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure.Builder, + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailureOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure) failure_, + getParentForChildren(), + isClean()); + failure_ = null; + } + failureCase_ = 3; + onChanged(); + return cloudStorageFailureBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReasonOrBuilder> + awsMskFailureBuilder_; + + /** + * + * + *
+     * Optional. Failure when ingesting from Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the awsMskFailure field is set. + */ + @java.lang.Override + public boolean hasAwsMskFailure() { + return failureCase_ == 4; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The awsMskFailure. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason getAwsMskFailure() { + if (awsMskFailureBuilder_ == null) { + if (failureCase_ == 4) { + return (com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.getDefaultInstance(); + } else { + if (failureCase_ == 4) { + return awsMskFailureBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAwsMskFailure( + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason value) { + if (awsMskFailureBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + failure_ = value; + onChanged(); + } else { + awsMskFailureBuilder_.setMessage(value); + } + failureCase_ = 4; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAwsMskFailure( + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.Builder builderForValue) { + if (awsMskFailureBuilder_ == null) { + failure_ = builderForValue.build(); + onChanged(); + } else { + awsMskFailureBuilder_.setMessage(builderForValue.build()); + } + failureCase_ = 4; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeAwsMskFailure( + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason value) { + if (awsMskFailureBuilder_ == null) { + if (failureCase_ == 4 + && failure_ + != com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason + .getDefaultInstance()) { + failure_ = + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) failure_) + .mergeFrom(value) + .buildPartial(); + } else { + failure_ = value; + } + onChanged(); + } else { + if (failureCase_ == 4) { + awsMskFailureBuilder_.mergeFrom(value); + } else { + awsMskFailureBuilder_.setMessage(value); + } + } + failureCase_ = 4; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearAwsMskFailure() { + if (awsMskFailureBuilder_ == null) { + if (failureCase_ == 4) { + failureCase_ = 0; + failure_ = null; + onChanged(); + } + } else { + if (failureCase_ == 4) { + failureCase_ = 0; + failure_ = null; + } + awsMskFailureBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.Builder + getAwsMskFailureBuilder() { + return internalGetAwsMskFailureFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReasonOrBuilder + getAwsMskFailureOrBuilder() { + if ((failureCase_ == 4) && (awsMskFailureBuilder_ != null)) { + return awsMskFailureBuilder_.getMessageOrBuilder(); + } else { + if (failureCase_ == 4) { + return (com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Amazon MSK.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReasonOrBuilder> + internalGetAwsMskFailureFieldBuilder() { + if (awsMskFailureBuilder_ == null) { + if (!(failureCase_ == 4)) { + failure_ = + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.getDefaultInstance(); + } + awsMskFailureBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason) failure_, + getParentForChildren(), + isClean()); + failure_ = null; + } + failureCase_ = 4; + onChanged(); + return awsMskFailureBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReasonOrBuilder> + azureEventHubsFailureBuilder_; + + /** + * + * + *
+     * Optional. Failure when ingesting from Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the azureEventHubsFailure field is set. + */ + @java.lang.Override + public boolean hasAzureEventHubsFailure() { + return failureCase_ == 5; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The azureEventHubsFailure. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + getAzureEventHubsFailure() { + if (azureEventHubsFailureBuilder_ == null) { + if (failureCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + .getDefaultInstance(); + } else { + if (failureCase_ == 5) { + return azureEventHubsFailureBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAzureEventHubsFailure( + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason value) { + if (azureEventHubsFailureBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + failure_ = value; + onChanged(); + } else { + azureEventHubsFailureBuilder_.setMessage(value); + } + failureCase_ = 5; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAzureEventHubsFailure( + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason.Builder + builderForValue) { + if (azureEventHubsFailureBuilder_ == null) { + failure_ = builderForValue.build(); + onChanged(); + } else { + azureEventHubsFailureBuilder_.setMessage(builderForValue.build()); + } + failureCase_ = 5; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeAzureEventHubsFailure( + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason value) { + if (azureEventHubsFailureBuilder_ == null) { + if (failureCase_ == 5 + && failure_ + != com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + .getDefaultInstance()) { + failure_ = + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) + failure_) + .mergeFrom(value) + .buildPartial(); + } else { + failure_ = value; + } + onChanged(); + } else { + if (failureCase_ == 5) { + azureEventHubsFailureBuilder_.mergeFrom(value); + } else { + azureEventHubsFailureBuilder_.setMessage(value); + } + } + failureCase_ = 5; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearAzureEventHubsFailure() { + if (azureEventHubsFailureBuilder_ == null) { + if (failureCase_ == 5) { + failureCase_ = 0; + failure_ = null; + onChanged(); + } + } else { + if (failureCase_ == 5) { + failureCase_ = 0; + failure_ = null; + } + azureEventHubsFailureBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason.Builder + getAzureEventHubsFailureBuilder() { + return internalGetAzureEventHubsFailureFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReasonOrBuilder + getAzureEventHubsFailureOrBuilder() { + if ((failureCase_ == 5) && (azureEventHubsFailureBuilder_ != null)) { + return azureEventHubsFailureBuilder_.getMessageOrBuilder(); + } else { + if (failureCase_ == 5) { + return (com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Azure Event Hubs.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReasonOrBuilder> + internalGetAzureEventHubsFailureFieldBuilder() { + if (azureEventHubsFailureBuilder_ == null) { + if (!(failureCase_ == 5)) { + failure_ = + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason + .getDefaultInstance(); + } + azureEventHubsFailureBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason) failure_, + getParentForChildren(), + isClean()); + failure_ = null; + } + failureCase_ = 5; + onChanged(); + return azureEventHubsFailureBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReasonOrBuilder> + confluentCloudFailureBuilder_; + + /** + * + * + *
+     * Optional. Failure when ingesting from Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the confluentCloudFailure field is set. + */ + @java.lang.Override + public boolean hasConfluentCloudFailure() { + return failureCase_ == 6; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The confluentCloudFailure. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + getConfluentCloudFailure() { + if (confluentCloudFailureBuilder_ == null) { + if (failureCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + .getDefaultInstance(); + } else { + if (failureCase_ == 6) { + return confluentCloudFailureBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setConfluentCloudFailure( + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason value) { + if (confluentCloudFailureBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + failure_ = value; + onChanged(); + } else { + confluentCloudFailureBuilder_.setMessage(value); + } + failureCase_ = 6; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setConfluentCloudFailure( + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason.Builder + builderForValue) { + if (confluentCloudFailureBuilder_ == null) { + failure_ = builderForValue.build(); + onChanged(); + } else { + confluentCloudFailureBuilder_.setMessage(builderForValue.build()); + } + failureCase_ = 6; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeConfluentCloudFailure( + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason value) { + if (confluentCloudFailureBuilder_ == null) { + if (failureCase_ == 6 + && failure_ + != com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + .getDefaultInstance()) { + failure_ = + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) + failure_) + .mergeFrom(value) + .buildPartial(); + } else { + failure_ = value; + } + onChanged(); + } else { + if (failureCase_ == 6) { + confluentCloudFailureBuilder_.mergeFrom(value); + } else { + confluentCloudFailureBuilder_.setMessage(value); + } + } + failureCase_ = 6; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearConfluentCloudFailure() { + if (confluentCloudFailureBuilder_ == null) { + if (failureCase_ == 6) { + failureCase_ = 0; + failure_ = null; + onChanged(); + } + } else { + if (failureCase_ == 6) { + failureCase_ = 0; + failure_ = null; + } + confluentCloudFailureBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason.Builder + getConfluentCloudFailureBuilder() { + return internalGetConfluentCloudFailureFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReasonOrBuilder + getConfluentCloudFailureOrBuilder() { + if ((failureCase_ == 6) && (confluentCloudFailureBuilder_ != null)) { + return confluentCloudFailureBuilder_.getMessageOrBuilder(); + } else { + if (failureCase_ == 6) { + return (com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Failure when ingesting from Confluent Cloud.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReasonOrBuilder> + internalGetConfluentCloudFailureFieldBuilder() { + if (confluentCloudFailureBuilder_ == null) { + if (!(failureCase_ == 6)) { + failure_ = + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason + .getDefaultInstance(); + } + confluentCloudFailureBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason) failure_, + getParentForChildren(), + isClean()); + failure_ = null; + } + failureCase_ = 6; + onChanged(); + return confluentCloudFailureBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReasonOrBuilder> + awsKinesisFailureBuilder_; + + /** + * + * + *
+     * Optional. Failure when ingesting from AWS Kinesis.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the awsKinesisFailure field is set. + */ + @java.lang.Override + public boolean hasAwsKinesisFailure() { + return failureCase_ == 7; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from AWS Kinesis.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The awsKinesisFailure. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + getAwsKinesisFailure() { + if (awsKinesisFailureBuilder_ == null) { + if (failureCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + .getDefaultInstance(); + } else { + if (failureCase_ == 7) { + return awsKinesisFailureBuilder_.getMessage(); + } + return com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Failure when ingesting from AWS Kinesis.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAwsKinesisFailure( + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason value) { + if (awsKinesisFailureBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + failure_ = value; + onChanged(); + } else { + awsKinesisFailureBuilder_.setMessage(value); + } + failureCase_ = 7; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from AWS Kinesis.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAwsKinesisFailure( + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.Builder + builderForValue) { + if (awsKinesisFailureBuilder_ == null) { + failure_ = builderForValue.build(); + onChanged(); + } else { + awsKinesisFailureBuilder_.setMessage(builderForValue.build()); + } + failureCase_ = 7; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from AWS Kinesis.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeAwsKinesisFailure( + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason value) { + if (awsKinesisFailureBuilder_ == null) { + if (failureCase_ == 7 + && failure_ + != com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + .getDefaultInstance()) { + failure_ = + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.newBuilder( + (com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) failure_) + .mergeFrom(value) + .buildPartial(); + } else { + failure_ = value; + } + onChanged(); + } else { + if (failureCase_ == 7) { + awsKinesisFailureBuilder_.mergeFrom(value); + } else { + awsKinesisFailureBuilder_.setMessage(value); + } + } + failureCase_ = 7; + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from AWS Kinesis.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearAwsKinesisFailure() { + if (awsKinesisFailureBuilder_ == null) { + if (failureCase_ == 7) { + failureCase_ = 0; + failure_ = null; + onChanged(); + } + } else { + if (failureCase_ == 7) { + failureCase_ = 0; + failure_ = null; + } + awsKinesisFailureBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Failure when ingesting from AWS Kinesis.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.Builder + getAwsKinesisFailureBuilder() { + return internalGetAwsKinesisFailureFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Failure when ingesting from AWS Kinesis.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReasonOrBuilder + getAwsKinesisFailureOrBuilder() { + if ((failureCase_ == 7) && (awsKinesisFailureBuilder_ != null)) { + return awsKinesisFailureBuilder_.getMessageOrBuilder(); + } else { + if (failureCase_ == 7) { + return (com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) failure_; + } + return com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + .getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. Failure when ingesting from AWS Kinesis.
+     * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReasonOrBuilder> + internalGetAwsKinesisFailureFieldBuilder() { + if (awsKinesisFailureBuilder_ == null) { + if (!(failureCase_ == 7)) { + failure_ = + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason + .getDefaultInstance(); + } + awsKinesisFailureBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason, + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason.Builder, + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReasonOrBuilder>( + (com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason) failure_, + getParentForChildren(), + isClean()); + failure_ = null; + } + failureCase_ = 7; + onChanged(); + return awsKinesisFailureBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.IngestionFailureEvent) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.IngestionFailureEvent) + private static final com.google.pubsub.v1.IngestionFailureEvent DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.IngestionFailureEvent(); + } + + public static com.google.pubsub.v1.IngestionFailureEvent getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public IngestionFailureEvent parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.IngestionFailureEvent getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/IngestionFailureEventOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/IngestionFailureEventOrBuilder.java new file mode 100644 index 000000000000..3fe15ccd9b04 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/IngestionFailureEventOrBuilder.java @@ -0,0 +1,308 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface IngestionFailureEventOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.IngestionFailureEvent) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. Name of the import topic. Format is:
+   * projects/{project_name}/topics/{topic_name}.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + java.lang.String getTopic(); + + /** + * + * + *
+   * Required. Name of the import topic. Format is:
+   * projects/{project_name}/topics/{topic_name}.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + com.google.protobuf.ByteString getTopicBytes(); + + /** + * + * + *
+   * Required. Error details explaining why ingestion to Pub/Sub has failed.
+   * 
+ * + * string error_message = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The errorMessage. + */ + java.lang.String getErrorMessage(); + + /** + * + * + *
+   * Required. Error details explaining why ingestion to Pub/Sub has failed.
+   * 
+ * + * string error_message = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for errorMessage. + */ + com.google.protobuf.ByteString getErrorMessageBytes(); + + /** + * + * + *
+   * Optional. Failure when ingesting from Cloud Storage.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cloudStorageFailure field is set. + */ + boolean hasCloudStorageFailure(); + + /** + * + * + *
+   * Optional. Failure when ingesting from Cloud Storage.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cloudStorageFailure. + */ + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure getCloudStorageFailure(); + + /** + * + * + *
+   * Optional. Failure when ingesting from Cloud Storage.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.CloudStorageFailure cloud_storage_failure = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.CloudStorageFailureOrBuilder + getCloudStorageFailureOrBuilder(); + + /** + * + * + *
+   * Optional. Failure when ingesting from Amazon MSK.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the awsMskFailure field is set. + */ + boolean hasAwsMskFailure(); + + /** + * + * + *
+   * Optional. Failure when ingesting from Amazon MSK.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The awsMskFailure. + */ + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason getAwsMskFailure(); + + /** + * + * + *
+   * Optional. Failure when ingesting from Amazon MSK.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReason aws_msk_failure = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.AwsMskFailureReasonOrBuilder + getAwsMskFailureOrBuilder(); + + /** + * + * + *
+   * Optional. Failure when ingesting from Azure Event Hubs.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the azureEventHubsFailure field is set. + */ + boolean hasAzureEventHubsFailure(); + + /** + * + * + *
+   * Optional. Failure when ingesting from Azure Event Hubs.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The azureEventHubsFailure. + */ + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason getAzureEventHubsFailure(); + + /** + * + * + *
+   * Optional. Failure when ingesting from Azure Event Hubs.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReason azure_event_hubs_failure = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.AzureEventHubsFailureReasonOrBuilder + getAzureEventHubsFailureOrBuilder(); + + /** + * + * + *
+   * Optional. Failure when ingesting from Confluent Cloud.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the confluentCloudFailure field is set. + */ + boolean hasConfluentCloudFailure(); + + /** + * + * + *
+   * Optional. Failure when ingesting from Confluent Cloud.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The confluentCloudFailure. + */ + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason getConfluentCloudFailure(); + + /** + * + * + *
+   * Optional. Failure when ingesting from Confluent Cloud.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReason confluent_cloud_failure = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.ConfluentCloudFailureReasonOrBuilder + getConfluentCloudFailureOrBuilder(); + + /** + * + * + *
+   * Optional. Failure when ingesting from AWS Kinesis.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the awsKinesisFailure field is set. + */ + boolean hasAwsKinesisFailure(); + + /** + * + * + *
+   * Optional. Failure when ingesting from AWS Kinesis.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The awsKinesisFailure. + */ + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason getAwsKinesisFailure(); + + /** + * + * + *
+   * Optional. Failure when ingesting from AWS Kinesis.
+   * 
+ * + * + * .google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReason aws_kinesis_failure = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReasonOrBuilder + getAwsKinesisFailureOrBuilder(); + + com.google.pubsub.v1.IngestionFailureEvent.FailureCase getFailureCase(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/JavaScriptUDF.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/JavaScriptUDF.java new file mode 100644 index 000000000000..18ac95eb0449 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/JavaScriptUDF.java @@ -0,0 +1,993 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * User-defined JavaScript function that can transform or filter a Pub/Sub
+ * message.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.JavaScriptUDF} + */ +@com.google.protobuf.Generated +public final class JavaScriptUDF extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.JavaScriptUDF) + JavaScriptUDFOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "JavaScriptUDF"); + } + + // Use JavaScriptUDF.newBuilder() to construct. + private JavaScriptUDF(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private JavaScriptUDF() { + functionName_ = ""; + code_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_JavaScriptUDF_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_JavaScriptUDF_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.JavaScriptUDF.class, + com.google.pubsub.v1.JavaScriptUDF.Builder.class); + } + + public static final int FUNCTION_NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object functionName_ = ""; + + /** + * + * + *
+   * Required. Name of the JavasScript function that should applied to Pub/Sub
+   * messages.
+   * 
+ * + * string function_name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The functionName. + */ + @java.lang.Override + public java.lang.String getFunctionName() { + java.lang.Object ref = functionName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + functionName_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. Name of the JavasScript function that should applied to Pub/Sub
+   * messages.
+   * 
+ * + * string function_name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for functionName. + */ + @java.lang.Override + public com.google.protobuf.ByteString getFunctionNameBytes() { + java.lang.Object ref = functionName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + functionName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int CODE_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object code_ = ""; + + /** + * + * + *
+   * Required. JavaScript code that contains a function `function_name` with the
+   * below signature:
+   *
+   * ```
+   * /**
+   * * Transforms a Pub/Sub message.
+   *
+   * * @return {(Object<string, (string | Object<string, string>)>|null)} - To
+   * * filter a message, return `null`. To transform a message return a map
+   * * with the following keys:
+   * *   - (required) 'data' : {string}
+   * *   - (optional) 'attributes' : {Object<string, string>}
+   * * Returning empty `attributes` will remove all attributes from the
+   * * message.
+   * *
+   * * @param  {(Object<string, (string | Object<string, string>)>} Pub/Sub
+   * * message. Keys:
+   * *   - (required) 'data' : {string}
+   * *   - (required) 'attributes' : {Object<string, string>}
+   * *
+   * * @param  {Object<string, any>} metadata - Pub/Sub message metadata.
+   * * Keys:
+   * *   - (optional) 'message_id'  : {string}
+   * *   - (optional) 'publish_time': {string} YYYY-MM-DDTHH:MM:SSZ format
+   * *   - (optional) 'ordering_key': {string}
+   * */
+   *
+   * function <function_name>(message, metadata) {
+   * }
+   * ```
+   * 
+ * + * string code = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The code. + */ + @java.lang.Override + public java.lang.String getCode() { + java.lang.Object ref = code_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + code_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. JavaScript code that contains a function `function_name` with the
+   * below signature:
+   *
+   * ```
+   * /**
+   * * Transforms a Pub/Sub message.
+   *
+   * * @return {(Object<string, (string | Object<string, string>)>|null)} - To
+   * * filter a message, return `null`. To transform a message return a map
+   * * with the following keys:
+   * *   - (required) 'data' : {string}
+   * *   - (optional) 'attributes' : {Object<string, string>}
+   * * Returning empty `attributes` will remove all attributes from the
+   * * message.
+   * *
+   * * @param  {(Object<string, (string | Object<string, string>)>} Pub/Sub
+   * * message. Keys:
+   * *   - (required) 'data' : {string}
+   * *   - (required) 'attributes' : {Object<string, string>}
+   * *
+   * * @param  {Object<string, any>} metadata - Pub/Sub message metadata.
+   * * Keys:
+   * *   - (optional) 'message_id'  : {string}
+   * *   - (optional) 'publish_time': {string} YYYY-MM-DDTHH:MM:SSZ format
+   * *   - (optional) 'ordering_key': {string}
+   * */
+   *
+   * function <function_name>(message, metadata) {
+   * }
+   * ```
+   * 
+ * + * string code = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for code. + */ + @java.lang.Override + public com.google.protobuf.ByteString getCodeBytes() { + java.lang.Object ref = code_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + code_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(functionName_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, functionName_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(code_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, code_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(functionName_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, functionName_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(code_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, code_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.JavaScriptUDF)) { + return super.equals(obj); + } + com.google.pubsub.v1.JavaScriptUDF other = (com.google.pubsub.v1.JavaScriptUDF) obj; + + if (!getFunctionName().equals(other.getFunctionName())) return false; + if (!getCode().equals(other.getCode())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + FUNCTION_NAME_FIELD_NUMBER; + hash = (53 * hash) + getFunctionName().hashCode(); + hash = (37 * hash) + CODE_FIELD_NUMBER; + hash = (53 * hash) + getCode().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.JavaScriptUDF parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.JavaScriptUDF parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.JavaScriptUDF parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.JavaScriptUDF parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.JavaScriptUDF parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.JavaScriptUDF parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.JavaScriptUDF parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.JavaScriptUDF parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.JavaScriptUDF parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.JavaScriptUDF parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.JavaScriptUDF parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.JavaScriptUDF parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.JavaScriptUDF prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * User-defined JavaScript function that can transform or filter a Pub/Sub
+   * message.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.JavaScriptUDF} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.JavaScriptUDF) + com.google.pubsub.v1.JavaScriptUDFOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_JavaScriptUDF_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_JavaScriptUDF_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.JavaScriptUDF.class, + com.google.pubsub.v1.JavaScriptUDF.Builder.class); + } + + // Construct using com.google.pubsub.v1.JavaScriptUDF.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + functionName_ = ""; + code_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_JavaScriptUDF_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.JavaScriptUDF getDefaultInstanceForType() { + return com.google.pubsub.v1.JavaScriptUDF.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.JavaScriptUDF build() { + com.google.pubsub.v1.JavaScriptUDF result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.JavaScriptUDF buildPartial() { + com.google.pubsub.v1.JavaScriptUDF result = new com.google.pubsub.v1.JavaScriptUDF(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.JavaScriptUDF result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.functionName_ = functionName_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.code_ = code_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.JavaScriptUDF) { + return mergeFrom((com.google.pubsub.v1.JavaScriptUDF) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.JavaScriptUDF other) { + if (other == com.google.pubsub.v1.JavaScriptUDF.getDefaultInstance()) return this; + if (!other.getFunctionName().isEmpty()) { + functionName_ = other.functionName_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getCode().isEmpty()) { + code_ = other.code_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + functionName_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + code_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object functionName_ = ""; + + /** + * + * + *
+     * Required. Name of the JavasScript function that should applied to Pub/Sub
+     * messages.
+     * 
+ * + * string function_name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The functionName. + */ + public java.lang.String getFunctionName() { + java.lang.Object ref = functionName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + functionName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. Name of the JavasScript function that should applied to Pub/Sub
+     * messages.
+     * 
+ * + * string function_name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for functionName. + */ + public com.google.protobuf.ByteString getFunctionNameBytes() { + java.lang.Object ref = functionName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + functionName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. Name of the JavasScript function that should applied to Pub/Sub
+     * messages.
+     * 
+ * + * string function_name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The functionName to set. + * @return This builder for chaining. + */ + public Builder setFunctionName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + functionName_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Name of the JavasScript function that should applied to Pub/Sub
+     * messages.
+     * 
+ * + * string function_name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearFunctionName() { + functionName_ = getDefaultInstance().getFunctionName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Name of the JavasScript function that should applied to Pub/Sub
+     * messages.
+     * 
+ * + * string function_name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for functionName to set. + * @return This builder for chaining. + */ + public Builder setFunctionNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + functionName_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object code_ = ""; + + /** + * + * + *
+     * Required. JavaScript code that contains a function `function_name` with the
+     * below signature:
+     *
+     * ```
+     * /**
+     * * Transforms a Pub/Sub message.
+     *
+     * * @return {(Object<string, (string | Object<string, string>)>|null)} - To
+     * * filter a message, return `null`. To transform a message return a map
+     * * with the following keys:
+     * *   - (required) 'data' : {string}
+     * *   - (optional) 'attributes' : {Object<string, string>}
+     * * Returning empty `attributes` will remove all attributes from the
+     * * message.
+     * *
+     * * @param  {(Object<string, (string | Object<string, string>)>} Pub/Sub
+     * * message. Keys:
+     * *   - (required) 'data' : {string}
+     * *   - (required) 'attributes' : {Object<string, string>}
+     * *
+     * * @param  {Object<string, any>} metadata - Pub/Sub message metadata.
+     * * Keys:
+     * *   - (optional) 'message_id'  : {string}
+     * *   - (optional) 'publish_time': {string} YYYY-MM-DDTHH:MM:SSZ format
+     * *   - (optional) 'ordering_key': {string}
+     * */
+     *
+     * function <function_name>(message, metadata) {
+     * }
+     * ```
+     * 
+ * + * string code = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The code. + */ + public java.lang.String getCode() { + java.lang.Object ref = code_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + code_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. JavaScript code that contains a function `function_name` with the
+     * below signature:
+     *
+     * ```
+     * /**
+     * * Transforms a Pub/Sub message.
+     *
+     * * @return {(Object<string, (string | Object<string, string>)>|null)} - To
+     * * filter a message, return `null`. To transform a message return a map
+     * * with the following keys:
+     * *   - (required) 'data' : {string}
+     * *   - (optional) 'attributes' : {Object<string, string>}
+     * * Returning empty `attributes` will remove all attributes from the
+     * * message.
+     * *
+     * * @param  {(Object<string, (string | Object<string, string>)>} Pub/Sub
+     * * message. Keys:
+     * *   - (required) 'data' : {string}
+     * *   - (required) 'attributes' : {Object<string, string>}
+     * *
+     * * @param  {Object<string, any>} metadata - Pub/Sub message metadata.
+     * * Keys:
+     * *   - (optional) 'message_id'  : {string}
+     * *   - (optional) 'publish_time': {string} YYYY-MM-DDTHH:MM:SSZ format
+     * *   - (optional) 'ordering_key': {string}
+     * */
+     *
+     * function <function_name>(message, metadata) {
+     * }
+     * ```
+     * 
+ * + * string code = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for code. + */ + public com.google.protobuf.ByteString getCodeBytes() { + java.lang.Object ref = code_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + code_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. JavaScript code that contains a function `function_name` with the
+     * below signature:
+     *
+     * ```
+     * /**
+     * * Transforms a Pub/Sub message.
+     *
+     * * @return {(Object<string, (string | Object<string, string>)>|null)} - To
+     * * filter a message, return `null`. To transform a message return a map
+     * * with the following keys:
+     * *   - (required) 'data' : {string}
+     * *   - (optional) 'attributes' : {Object<string, string>}
+     * * Returning empty `attributes` will remove all attributes from the
+     * * message.
+     * *
+     * * @param  {(Object<string, (string | Object<string, string>)>} Pub/Sub
+     * * message. Keys:
+     * *   - (required) 'data' : {string}
+     * *   - (required) 'attributes' : {Object<string, string>}
+     * *
+     * * @param  {Object<string, any>} metadata - Pub/Sub message metadata.
+     * * Keys:
+     * *   - (optional) 'message_id'  : {string}
+     * *   - (optional) 'publish_time': {string} YYYY-MM-DDTHH:MM:SSZ format
+     * *   - (optional) 'ordering_key': {string}
+     * */
+     *
+     * function <function_name>(message, metadata) {
+     * }
+     * ```
+     * 
+ * + * string code = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The code to set. + * @return This builder for chaining. + */ + public Builder setCode(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + code_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. JavaScript code that contains a function `function_name` with the
+     * below signature:
+     *
+     * ```
+     * /**
+     * * Transforms a Pub/Sub message.
+     *
+     * * @return {(Object<string, (string | Object<string, string>)>|null)} - To
+     * * filter a message, return `null`. To transform a message return a map
+     * * with the following keys:
+     * *   - (required) 'data' : {string}
+     * *   - (optional) 'attributes' : {Object<string, string>}
+     * * Returning empty `attributes` will remove all attributes from the
+     * * message.
+     * *
+     * * @param  {(Object<string, (string | Object<string, string>)>} Pub/Sub
+     * * message. Keys:
+     * *   - (required) 'data' : {string}
+     * *   - (required) 'attributes' : {Object<string, string>}
+     * *
+     * * @param  {Object<string, any>} metadata - Pub/Sub message metadata.
+     * * Keys:
+     * *   - (optional) 'message_id'  : {string}
+     * *   - (optional) 'publish_time': {string} YYYY-MM-DDTHH:MM:SSZ format
+     * *   - (optional) 'ordering_key': {string}
+     * */
+     *
+     * function <function_name>(message, metadata) {
+     * }
+     * ```
+     * 
+ * + * string code = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearCode() { + code_ = getDefaultInstance().getCode(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. JavaScript code that contains a function `function_name` with the
+     * below signature:
+     *
+     * ```
+     * /**
+     * * Transforms a Pub/Sub message.
+     *
+     * * @return {(Object<string, (string | Object<string, string>)>|null)} - To
+     * * filter a message, return `null`. To transform a message return a map
+     * * with the following keys:
+     * *   - (required) 'data' : {string}
+     * *   - (optional) 'attributes' : {Object<string, string>}
+     * * Returning empty `attributes` will remove all attributes from the
+     * * message.
+     * *
+     * * @param  {(Object<string, (string | Object<string, string>)>} Pub/Sub
+     * * message. Keys:
+     * *   - (required) 'data' : {string}
+     * *   - (required) 'attributes' : {Object<string, string>}
+     * *
+     * * @param  {Object<string, any>} metadata - Pub/Sub message metadata.
+     * * Keys:
+     * *   - (optional) 'message_id'  : {string}
+     * *   - (optional) 'publish_time': {string} YYYY-MM-DDTHH:MM:SSZ format
+     * *   - (optional) 'ordering_key': {string}
+     * */
+     *
+     * function <function_name>(message, metadata) {
+     * }
+     * ```
+     * 
+ * + * string code = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for code to set. + * @return This builder for chaining. + */ + public Builder setCodeBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + code_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.JavaScriptUDF) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.JavaScriptUDF) + private static final com.google.pubsub.v1.JavaScriptUDF DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.JavaScriptUDF(); + } + + public static com.google.pubsub.v1.JavaScriptUDF getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public JavaScriptUDF parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.JavaScriptUDF getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/JavaScriptUDFOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/JavaScriptUDFOrBuilder.java new file mode 100644 index 000000000000..9e60471bffdb --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/JavaScriptUDFOrBuilder.java @@ -0,0 +1,140 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface JavaScriptUDFOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.JavaScriptUDF) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. Name of the JavasScript function that should applied to Pub/Sub
+   * messages.
+   * 
+ * + * string function_name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The functionName. + */ + java.lang.String getFunctionName(); + + /** + * + * + *
+   * Required. Name of the JavasScript function that should applied to Pub/Sub
+   * messages.
+   * 
+ * + * string function_name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for functionName. + */ + com.google.protobuf.ByteString getFunctionNameBytes(); + + /** + * + * + *
+   * Required. JavaScript code that contains a function `function_name` with the
+   * below signature:
+   *
+   * ```
+   * /**
+   * * Transforms a Pub/Sub message.
+   *
+   * * @return {(Object<string, (string | Object<string, string>)>|null)} - To
+   * * filter a message, return `null`. To transform a message return a map
+   * * with the following keys:
+   * *   - (required) 'data' : {string}
+   * *   - (optional) 'attributes' : {Object<string, string>}
+   * * Returning empty `attributes` will remove all attributes from the
+   * * message.
+   * *
+   * * @param  {(Object<string, (string | Object<string, string>)>} Pub/Sub
+   * * message. Keys:
+   * *   - (required) 'data' : {string}
+   * *   - (required) 'attributes' : {Object<string, string>}
+   * *
+   * * @param  {Object<string, any>} metadata - Pub/Sub message metadata.
+   * * Keys:
+   * *   - (optional) 'message_id'  : {string}
+   * *   - (optional) 'publish_time': {string} YYYY-MM-DDTHH:MM:SSZ format
+   * *   - (optional) 'ordering_key': {string}
+   * */
+   *
+   * function <function_name>(message, metadata) {
+   * }
+   * ```
+   * 
+ * + * string code = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The code. + */ + java.lang.String getCode(); + + /** + * + * + *
+   * Required. JavaScript code that contains a function `function_name` with the
+   * below signature:
+   *
+   * ```
+   * /**
+   * * Transforms a Pub/Sub message.
+   *
+   * * @return {(Object<string, (string | Object<string, string>)>|null)} - To
+   * * filter a message, return `null`. To transform a message return a map
+   * * with the following keys:
+   * *   - (required) 'data' : {string}
+   * *   - (optional) 'attributes' : {Object<string, string>}
+   * * Returning empty `attributes` will remove all attributes from the
+   * * message.
+   * *
+   * * @param  {(Object<string, (string | Object<string, string>)>} Pub/Sub
+   * * message. Keys:
+   * *   - (required) 'data' : {string}
+   * *   - (required) 'attributes' : {Object<string, string>}
+   * *
+   * * @param  {Object<string, any>} metadata - Pub/Sub message metadata.
+   * * Keys:
+   * *   - (optional) 'message_id'  : {string}
+   * *   - (optional) 'publish_time': {string} YYYY-MM-DDTHH:MM:SSZ format
+   * *   - (optional) 'ordering_key': {string}
+   * */
+   *
+   * function <function_name>(message, metadata) {
+   * }
+   * ```
+   * 
+ * + * string code = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for code. + */ + com.google.protobuf.ByteString getCodeBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemaRevisionsRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemaRevisionsRequest.java new file mode 100644 index 000000000000..f2a56f7b8bfc --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemaRevisionsRequest.java @@ -0,0 +1,1070 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `ListSchemaRevisions` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSchemaRevisionsRequest} + */ +@com.google.protobuf.Generated +public final class ListSchemaRevisionsRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListSchemaRevisionsRequest) + ListSchemaRevisionsRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListSchemaRevisionsRequest"); + } + + // Use ListSchemaRevisionsRequest.newBuilder() to construct. + private ListSchemaRevisionsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListSchemaRevisionsRequest() { + name_ = ""; + view_ = 0; + pageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemaRevisionsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemaRevisionsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSchemaRevisionsRequest.class, + com.google.pubsub.v1.ListSchemaRevisionsRequest.Builder.class); + } + + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
+   * Required. The name of the schema to list revisions for.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the schema to list revisions for.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int VIEW_FIELD_NUMBER = 2; + private int view_ = 0; + + /** + * + * + *
+   * The set of Schema fields to return in the response. If not set, returns
+   * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+   * retrieve all fields.
+   * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The enum numeric value on the wire for view. + */ + @java.lang.Override + public int getViewValue() { + return view_; + } + + /** + * + * + *
+   * The set of Schema fields to return in the response. If not set, returns
+   * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+   * retrieve all fields.
+   * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The view. + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaView getView() { + com.google.pubsub.v1.SchemaView result = com.google.pubsub.v1.SchemaView.forNumber(view_); + return result == null ? com.google.pubsub.v1.SchemaView.UNRECOGNIZED : result; + } + + public static final int PAGE_SIZE_FIELD_NUMBER = 3; + private int pageSize_ = 0; + + /** + * + * + *
+   * The maximum number of revisions to return per page.
+   * 
+ * + * int32 page_size = 3; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + public static final int PAGE_TOKEN_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private volatile java.lang.Object pageToken_ = ""; + + /** + * + * + *
+   * The page token, received from a previous ListSchemaRevisions call.
+   * Provide this to retrieve the subsequent page.
+   * 
+ * + * string page_token = 4; + * + * @return The pageToken. + */ + @java.lang.Override + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * The page token, received from a previous ListSchemaRevisions call.
+   * Provide this to retrieve the subsequent page.
+   * 
+ * + * string page_token = 4; + * + * @return The bytes for pageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); + } + if (view_ != com.google.pubsub.v1.SchemaView.SCHEMA_VIEW_UNSPECIFIED.getNumber()) { + output.writeEnum(2, view_); + } + if (pageSize_ != 0) { + output.writeInt32(3, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, pageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); + } + if (view_ != com.google.pubsub.v1.SchemaView.SCHEMA_VIEW_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, view_); + } + if (pageSize_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, pageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListSchemaRevisionsRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListSchemaRevisionsRequest other = + (com.google.pubsub.v1.ListSchemaRevisionsRequest) obj; + + if (!getName().equals(other.getName())) return false; + if (view_ != other.view_) return false; + if (getPageSize() != other.getPageSize()) return false; + if (!getPageToken().equals(other.getPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + VIEW_FIELD_NUMBER; + hash = (53 * hash) + view_; + hash = (37 * hash) + PAGE_SIZE_FIELD_NUMBER; + hash = (53 * hash) + getPageSize(); + hash = (37 * hash) + PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListSchemaRevisionsRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListSchemaRevisionsRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `ListSchemaRevisions` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSchemaRevisionsRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListSchemaRevisionsRequest) + com.google.pubsub.v1.ListSchemaRevisionsRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemaRevisionsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemaRevisionsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSchemaRevisionsRequest.class, + com.google.pubsub.v1.ListSchemaRevisionsRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListSchemaRevisionsRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + view_ = 0; + pageSize_ = 0; + pageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemaRevisionsRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemaRevisionsRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.ListSchemaRevisionsRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemaRevisionsRequest build() { + com.google.pubsub.v1.ListSchemaRevisionsRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemaRevisionsRequest buildPartial() { + com.google.pubsub.v1.ListSchemaRevisionsRequest result = + new com.google.pubsub.v1.ListSchemaRevisionsRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ListSchemaRevisionsRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.view_ = view_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.pageSize_ = pageSize_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.pageToken_ = pageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListSchemaRevisionsRequest) { + return mergeFrom((com.google.pubsub.v1.ListSchemaRevisionsRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListSchemaRevisionsRequest other) { + if (other == com.google.pubsub.v1.ListSchemaRevisionsRequest.getDefaultInstance()) + return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.view_ != 0) { + setViewValue(other.getViewValue()); + } + if (other.getPageSize() != 0) { + setPageSize(other.getPageSize()); + } + if (!other.getPageToken().isEmpty()) { + pageToken_ = other.pageToken_; + bitField0_ |= 0x00000008; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + view_ = input.readEnum(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: + { + pageSize_ = input.readInt32(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 34: + { + pageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 34 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object name_ = ""; + + /** + * + * + *
+     * Required. The name of the schema to list revisions for.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the schema to list revisions for.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the schema to list revisions for.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the schema to list revisions for.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the schema to list revisions for.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private int view_ = 0; + + /** + * + * + *
+     * The set of Schema fields to return in the response. If not set, returns
+     * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+     * retrieve all fields.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The enum numeric value on the wire for view. + */ + @java.lang.Override + public int getViewValue() { + return view_; + } + + /** + * + * + *
+     * The set of Schema fields to return in the response. If not set, returns
+     * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+     * retrieve all fields.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @param value The enum numeric value on the wire for view to set. + * @return This builder for chaining. + */ + public Builder setViewValue(int value) { + view_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * The set of Schema fields to return in the response. If not set, returns
+     * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+     * retrieve all fields.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The view. + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaView getView() { + com.google.pubsub.v1.SchemaView result = com.google.pubsub.v1.SchemaView.forNumber(view_); + return result == null ? com.google.pubsub.v1.SchemaView.UNRECOGNIZED : result; + } + + /** + * + * + *
+     * The set of Schema fields to return in the response. If not set, returns
+     * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+     * retrieve all fields.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @param value The view to set. + * @return This builder for chaining. + */ + public Builder setView(com.google.pubsub.v1.SchemaView value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + view_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * The set of Schema fields to return in the response. If not set, returns
+     * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+     * retrieve all fields.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return This builder for chaining. + */ + public Builder clearView() { + bitField0_ = (bitField0_ & ~0x00000002); + view_ = 0; + onChanged(); + return this; + } + + private int pageSize_; + + /** + * + * + *
+     * The maximum number of revisions to return per page.
+     * 
+ * + * int32 page_size = 3; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + /** + * + * + *
+     * The maximum number of revisions to return per page.
+     * 
+ * + * int32 page_size = 3; + * + * @param value The pageSize to set. + * @return This builder for chaining. + */ + public Builder setPageSize(int value) { + + pageSize_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * The maximum number of revisions to return per page.
+     * 
+ * + * int32 page_size = 3; + * + * @return This builder for chaining. + */ + public Builder clearPageSize() { + bitField0_ = (bitField0_ & ~0x00000004); + pageSize_ = 0; + onChanged(); + return this; + } + + private java.lang.Object pageToken_ = ""; + + /** + * + * + *
+     * The page token, received from a previous ListSchemaRevisions call.
+     * Provide this to retrieve the subsequent page.
+     * 
+ * + * string page_token = 4; + * + * @return The pageToken. + */ + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * The page token, received from a previous ListSchemaRevisions call.
+     * Provide this to retrieve the subsequent page.
+     * 
+ * + * string page_token = 4; + * + * @return The bytes for pageToken. + */ + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * The page token, received from a previous ListSchemaRevisions call.
+     * Provide this to retrieve the subsequent page.
+     * 
+ * + * string page_token = 4; + * + * @param value The pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + pageToken_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * The page token, received from a previous ListSchemaRevisions call.
+     * Provide this to retrieve the subsequent page.
+     * 
+ * + * string page_token = 4; + * + * @return This builder for chaining. + */ + public Builder clearPageToken() { + pageToken_ = getDefaultInstance().getPageToken(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + + /** + * + * + *
+     * The page token, received from a previous ListSchemaRevisions call.
+     * Provide this to retrieve the subsequent page.
+     * 
+ * + * string page_token = 4; + * + * @param value The bytes for pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + pageToken_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListSchemaRevisionsRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListSchemaRevisionsRequest) + private static final com.google.pubsub.v1.ListSchemaRevisionsRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListSchemaRevisionsRequest(); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListSchemaRevisionsRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemaRevisionsRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemaRevisionsRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemaRevisionsRequestOrBuilder.java new file mode 100644 index 000000000000..5145cce90b7c --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemaRevisionsRequestOrBuilder.java @@ -0,0 +1,129 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListSchemaRevisionsRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListSchemaRevisionsRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the schema to list revisions for.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Required. The name of the schema to list revisions for.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * + * + *
+   * The set of Schema fields to return in the response. If not set, returns
+   * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+   * retrieve all fields.
+   * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The enum numeric value on the wire for view. + */ + int getViewValue(); + + /** + * + * + *
+   * The set of Schema fields to return in the response. If not set, returns
+   * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+   * retrieve all fields.
+   * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The view. + */ + com.google.pubsub.v1.SchemaView getView(); + + /** + * + * + *
+   * The maximum number of revisions to return per page.
+   * 
+ * + * int32 page_size = 3; + * + * @return The pageSize. + */ + int getPageSize(); + + /** + * + * + *
+   * The page token, received from a previous ListSchemaRevisions call.
+   * Provide this to retrieve the subsequent page.
+   * 
+ * + * string page_token = 4; + * + * @return The pageToken. + */ + java.lang.String getPageToken(); + + /** + * + * + *
+   * The page token, received from a previous ListSchemaRevisions call.
+   * Provide this to retrieve the subsequent page.
+   * 
+ * + * string page_token = 4; + * + * @return The bytes for pageToken. + */ + com.google.protobuf.ByteString getPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemaRevisionsResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemaRevisionsResponse.java new file mode 100644 index 000000000000..c9bda70eecb8 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemaRevisionsResponse.java @@ -0,0 +1,1112 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the `ListSchemaRevisions` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSchemaRevisionsResponse} + */ +@com.google.protobuf.Generated +public final class ListSchemaRevisionsResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListSchemaRevisionsResponse) + ListSchemaRevisionsResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListSchemaRevisionsResponse"); + } + + // Use ListSchemaRevisionsResponse.newBuilder() to construct. + private ListSchemaRevisionsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListSchemaRevisionsResponse() { + schemas_ = java.util.Collections.emptyList(); + nextPageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemaRevisionsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemaRevisionsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSchemaRevisionsResponse.class, + com.google.pubsub.v1.ListSchemaRevisionsResponse.Builder.class); + } + + public static final int SCHEMAS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private java.util.List schemas_; + + /** + * + * + *
+   * The revisions of the schema.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + @java.lang.Override + public java.util.List getSchemasList() { + return schemas_; + } + + /** + * + * + *
+   * The revisions of the schema.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + @java.lang.Override + public java.util.List getSchemasOrBuilderList() { + return schemas_; + } + + /** + * + * + *
+   * The revisions of the schema.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + @java.lang.Override + public int getSchemasCount() { + return schemas_.size(); + } + + /** + * + * + *
+   * The revisions of the schema.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + @java.lang.Override + public com.google.pubsub.v1.Schema getSchemas(int index) { + return schemas_.get(index); + } + + /** + * + * + *
+   * The revisions of the schema.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaOrBuilder getSchemasOrBuilder(int index) { + return schemas_.get(index); + } + + public static final int NEXT_PAGE_TOKEN_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+   * A token that can be sent as `page_token` to retrieve the next page.
+   * If this field is empty, there are no subsequent pages.
+   * 
+ * + * string next_page_token = 2; + * + * @return The nextPageToken. + */ + @java.lang.Override + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * A token that can be sent as `page_token` to retrieve the next page.
+   * If this field is empty, there are no subsequent pages.
+   * 
+ * + * string next_page_token = 2; + * + * @return The bytes for nextPageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < schemas_.size(); i++) { + output.writeMessage(1, schemas_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < schemas_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, schemas_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListSchemaRevisionsResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListSchemaRevisionsResponse other = + (com.google.pubsub.v1.ListSchemaRevisionsResponse) obj; + + if (!getSchemasList().equals(other.getSchemasList())) return false; + if (!getNextPageToken().equals(other.getNextPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getSchemasCount() > 0) { + hash = (37 * hash) + SCHEMAS_FIELD_NUMBER; + hash = (53 * hash) + getSchemasList().hashCode(); + } + hash = (37 * hash) + NEXT_PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getNextPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListSchemaRevisionsResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsResponse parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListSchemaRevisionsResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the `ListSchemaRevisions` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSchemaRevisionsResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListSchemaRevisionsResponse) + com.google.pubsub.v1.ListSchemaRevisionsResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemaRevisionsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemaRevisionsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSchemaRevisionsResponse.class, + com.google.pubsub.v1.ListSchemaRevisionsResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListSchemaRevisionsResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (schemasBuilder_ == null) { + schemas_ = java.util.Collections.emptyList(); + } else { + schemas_ = null; + schemasBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + nextPageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemaRevisionsResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemaRevisionsResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.ListSchemaRevisionsResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemaRevisionsResponse build() { + com.google.pubsub.v1.ListSchemaRevisionsResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemaRevisionsResponse buildPartial() { + com.google.pubsub.v1.ListSchemaRevisionsResponse result = + new com.google.pubsub.v1.ListSchemaRevisionsResponse(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields( + com.google.pubsub.v1.ListSchemaRevisionsResponse result) { + if (schemasBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + schemas_ = java.util.Collections.unmodifiableList(schemas_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.schemas_ = schemas_; + } else { + result.schemas_ = schemasBuilder_.build(); + } + } + + private void buildPartial0(com.google.pubsub.v1.ListSchemaRevisionsResponse result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.nextPageToken_ = nextPageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListSchemaRevisionsResponse) { + return mergeFrom((com.google.pubsub.v1.ListSchemaRevisionsResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListSchemaRevisionsResponse other) { + if (other == com.google.pubsub.v1.ListSchemaRevisionsResponse.getDefaultInstance()) + return this; + if (schemasBuilder_ == null) { + if (!other.schemas_.isEmpty()) { + if (schemas_.isEmpty()) { + schemas_ = other.schemas_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureSchemasIsMutable(); + schemas_.addAll(other.schemas_); + } + onChanged(); + } + } else { + if (!other.schemas_.isEmpty()) { + if (schemasBuilder_.isEmpty()) { + schemasBuilder_.dispose(); + schemasBuilder_ = null; + schemas_ = other.schemas_; + bitField0_ = (bitField0_ & ~0x00000001); + schemasBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetSchemasFieldBuilder() + : null; + } else { + schemasBuilder_.addAllMessages(other.schemas_); + } + } + } + if (!other.getNextPageToken().isEmpty()) { + nextPageToken_ = other.nextPageToken_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + com.google.pubsub.v1.Schema m = + input.readMessage(com.google.pubsub.v1.Schema.parser(), extensionRegistry); + if (schemasBuilder_ == null) { + ensureSchemasIsMutable(); + schemas_.add(m); + } else { + schemasBuilder_.addMessage(m); + } + break; + } // case 10 + case 18: + { + nextPageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.util.List schemas_ = + java.util.Collections.emptyList(); + + private void ensureSchemasIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + schemas_ = new java.util.ArrayList(schemas_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder> + schemasBuilder_; + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public java.util.List getSchemasList() { + if (schemasBuilder_ == null) { + return java.util.Collections.unmodifiableList(schemas_); + } else { + return schemasBuilder_.getMessageList(); + } + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public int getSchemasCount() { + if (schemasBuilder_ == null) { + return schemas_.size(); + } else { + return schemasBuilder_.getCount(); + } + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public com.google.pubsub.v1.Schema getSchemas(int index) { + if (schemasBuilder_ == null) { + return schemas_.get(index); + } else { + return schemasBuilder_.getMessage(index); + } + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder setSchemas(int index, com.google.pubsub.v1.Schema value) { + if (schemasBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSchemasIsMutable(); + schemas_.set(index, value); + onChanged(); + } else { + schemasBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder setSchemas(int index, com.google.pubsub.v1.Schema.Builder builderForValue) { + if (schemasBuilder_ == null) { + ensureSchemasIsMutable(); + schemas_.set(index, builderForValue.build()); + onChanged(); + } else { + schemasBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder addSchemas(com.google.pubsub.v1.Schema value) { + if (schemasBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSchemasIsMutable(); + schemas_.add(value); + onChanged(); + } else { + schemasBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder addSchemas(int index, com.google.pubsub.v1.Schema value) { + if (schemasBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSchemasIsMutable(); + schemas_.add(index, value); + onChanged(); + } else { + schemasBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder addSchemas(com.google.pubsub.v1.Schema.Builder builderForValue) { + if (schemasBuilder_ == null) { + ensureSchemasIsMutable(); + schemas_.add(builderForValue.build()); + onChanged(); + } else { + schemasBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder addSchemas(int index, com.google.pubsub.v1.Schema.Builder builderForValue) { + if (schemasBuilder_ == null) { + ensureSchemasIsMutable(); + schemas_.add(index, builderForValue.build()); + onChanged(); + } else { + schemasBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder addAllSchemas(java.lang.Iterable values) { + if (schemasBuilder_ == null) { + ensureSchemasIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, schemas_); + onChanged(); + } else { + schemasBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder clearSchemas() { + if (schemasBuilder_ == null) { + schemas_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + schemasBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder removeSchemas(int index) { + if (schemasBuilder_ == null) { + ensureSchemasIsMutable(); + schemas_.remove(index); + onChanged(); + } else { + schemasBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public com.google.pubsub.v1.Schema.Builder getSchemasBuilder(int index) { + return internalGetSchemasFieldBuilder().getBuilder(index); + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public com.google.pubsub.v1.SchemaOrBuilder getSchemasOrBuilder(int index) { + if (schemasBuilder_ == null) { + return schemas_.get(index); + } else { + return schemasBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public java.util.List + getSchemasOrBuilderList() { + if (schemasBuilder_ != null) { + return schemasBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(schemas_); + } + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public com.google.pubsub.v1.Schema.Builder addSchemasBuilder() { + return internalGetSchemasFieldBuilder() + .addBuilder(com.google.pubsub.v1.Schema.getDefaultInstance()); + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public com.google.pubsub.v1.Schema.Builder addSchemasBuilder(int index) { + return internalGetSchemasFieldBuilder() + .addBuilder(index, com.google.pubsub.v1.Schema.getDefaultInstance()); + } + + /** + * + * + *
+     * The revisions of the schema.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public java.util.List getSchemasBuilderList() { + return internalGetSchemasFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder> + internalGetSchemasFieldBuilder() { + if (schemasBuilder_ == null) { + schemasBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder>( + schemas_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean()); + schemas_ = null; + } + return schemasBuilder_; + } + + private java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+     * A token that can be sent as `page_token` to retrieve the next page.
+     * If this field is empty, there are no subsequent pages.
+     * 
+ * + * string next_page_token = 2; + * + * @return The nextPageToken. + */ + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * A token that can be sent as `page_token` to retrieve the next page.
+     * If this field is empty, there are no subsequent pages.
+     * 
+ * + * string next_page_token = 2; + * + * @return The bytes for nextPageToken. + */ + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * A token that can be sent as `page_token` to retrieve the next page.
+     * If this field is empty, there are no subsequent pages.
+     * 
+ * + * string next_page_token = 2; + * + * @param value The nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * A token that can be sent as `page_token` to retrieve the next page.
+     * If this field is empty, there are no subsequent pages.
+     * 
+ * + * string next_page_token = 2; + * + * @return This builder for chaining. + */ + public Builder clearNextPageToken() { + nextPageToken_ = getDefaultInstance().getNextPageToken(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * A token that can be sent as `page_token` to retrieve the next page.
+     * If this field is empty, there are no subsequent pages.
+     * 
+ * + * string next_page_token = 2; + * + * @param value The bytes for nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListSchemaRevisionsResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListSchemaRevisionsResponse) + private static final com.google.pubsub.v1.ListSchemaRevisionsResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListSchemaRevisionsResponse(); + } + + public static com.google.pubsub.v1.ListSchemaRevisionsResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListSchemaRevisionsResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemaRevisionsResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemaRevisionsResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemaRevisionsResponseOrBuilder.java new file mode 100644 index 000000000000..5e423029e431 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemaRevisionsResponseOrBuilder.java @@ -0,0 +1,111 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListSchemaRevisionsResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListSchemaRevisionsResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * The revisions of the schema.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + java.util.List getSchemasList(); + + /** + * + * + *
+   * The revisions of the schema.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + com.google.pubsub.v1.Schema getSchemas(int index); + + /** + * + * + *
+   * The revisions of the schema.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + int getSchemasCount(); + + /** + * + * + *
+   * The revisions of the schema.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + java.util.List getSchemasOrBuilderList(); + + /** + * + * + *
+   * The revisions of the schema.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + com.google.pubsub.v1.SchemaOrBuilder getSchemasOrBuilder(int index); + + /** + * + * + *
+   * A token that can be sent as `page_token` to retrieve the next page.
+   * If this field is empty, there are no subsequent pages.
+   * 
+ * + * string next_page_token = 2; + * + * @return The nextPageToken. + */ + java.lang.String getNextPageToken(); + + /** + * + * + *
+   * A token that can be sent as `page_token` to retrieve the next page.
+   * If this field is empty, there are no subsequent pages.
+   * 
+ * + * string next_page_token = 2; + * + * @return The bytes for nextPageToken. + */ + com.google.protobuf.ByteString getNextPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemasRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemasRequest.java new file mode 100644 index 000000000000..20c5c2c1d21b --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemasRequest.java @@ -0,0 +1,1082 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `ListSchemas` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSchemasRequest} + */ +@com.google.protobuf.Generated +public final class ListSchemasRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListSchemasRequest) + ListSchemasRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListSchemasRequest"); + } + + // Use ListSchemasRequest.newBuilder() to construct. + private ListSchemasRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListSchemasRequest() { + parent_ = ""; + view_ = 0; + pageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemasRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemasRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSchemasRequest.class, + com.google.pubsub.v1.ListSchemasRequest.Builder.class); + } + + public static final int PARENT_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object parent_ = ""; + + /** + * + * + *
+   * Required. The name of the project in which to list schemas.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + @java.lang.Override + public java.lang.String getParent() { + java.lang.Object ref = parent_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parent_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the project in which to list schemas.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + @java.lang.Override + public com.google.protobuf.ByteString getParentBytes() { + java.lang.Object ref = parent_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + parent_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int VIEW_FIELD_NUMBER = 2; + private int view_ = 0; + + /** + * + * + *
+   * The set of Schema fields to return in the response. If not set, returns
+   * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+   * retrieve all fields.
+   * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The enum numeric value on the wire for view. + */ + @java.lang.Override + public int getViewValue() { + return view_; + } + + /** + * + * + *
+   * The set of Schema fields to return in the response. If not set, returns
+   * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+   * retrieve all fields.
+   * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The view. + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaView getView() { + com.google.pubsub.v1.SchemaView result = com.google.pubsub.v1.SchemaView.forNumber(view_); + return result == null ? com.google.pubsub.v1.SchemaView.UNRECOGNIZED : result; + } + + public static final int PAGE_SIZE_FIELD_NUMBER = 3; + private int pageSize_ = 0; + + /** + * + * + *
+   * Maximum number of schemas to return.
+   * 
+ * + * int32 page_size = 3; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + public static final int PAGE_TOKEN_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private volatile java.lang.Object pageToken_ = ""; + + /** + * + * + *
+   * The value returned by the last `ListSchemasResponse`; indicates that
+   * this is a continuation of a prior `ListSchemas` call, and that the
+   * system should return the next page of data.
+   * 
+ * + * string page_token = 4; + * + * @return The pageToken. + */ + @java.lang.Override + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * The value returned by the last `ListSchemasResponse`; indicates that
+   * this is a continuation of a prior `ListSchemas` call, and that the
+   * system should return the next page of data.
+   * 
+ * + * string page_token = 4; + * + * @return The bytes for pageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); + } + if (view_ != com.google.pubsub.v1.SchemaView.SCHEMA_VIEW_UNSPECIFIED.getNumber()) { + output.writeEnum(2, view_); + } + if (pageSize_ != 0) { + output.writeInt32(3, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, pageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); + } + if (view_ != com.google.pubsub.v1.SchemaView.SCHEMA_VIEW_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, view_); + } + if (pageSize_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, pageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListSchemasRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListSchemasRequest other = (com.google.pubsub.v1.ListSchemasRequest) obj; + + if (!getParent().equals(other.getParent())) return false; + if (view_ != other.view_) return false; + if (getPageSize() != other.getPageSize()) return false; + if (!getPageToken().equals(other.getPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PARENT_FIELD_NUMBER; + hash = (53 * hash) + getParent().hashCode(); + hash = (37 * hash) + VIEW_FIELD_NUMBER; + hash = (53 * hash) + view_; + hash = (37 * hash) + PAGE_SIZE_FIELD_NUMBER; + hash = (53 * hash) + getPageSize(); + hash = (37 * hash) + PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListSchemasRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSchemasRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemasRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSchemasRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemasRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSchemasRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemasRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSchemasRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemasRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSchemasRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemasRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSchemasRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListSchemasRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `ListSchemas` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSchemasRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListSchemasRequest) + com.google.pubsub.v1.ListSchemasRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemasRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemasRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSchemasRequest.class, + com.google.pubsub.v1.ListSchemasRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListSchemasRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + parent_ = ""; + view_ = 0; + pageSize_ = 0; + pageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemasRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemasRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.ListSchemasRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemasRequest build() { + com.google.pubsub.v1.ListSchemasRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemasRequest buildPartial() { + com.google.pubsub.v1.ListSchemasRequest result = + new com.google.pubsub.v1.ListSchemasRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ListSchemasRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.parent_ = parent_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.view_ = view_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.pageSize_ = pageSize_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.pageToken_ = pageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListSchemasRequest) { + return mergeFrom((com.google.pubsub.v1.ListSchemasRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListSchemasRequest other) { + if (other == com.google.pubsub.v1.ListSchemasRequest.getDefaultInstance()) return this; + if (!other.getParent().isEmpty()) { + parent_ = other.parent_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.view_ != 0) { + setViewValue(other.getViewValue()); + } + if (other.getPageSize() != 0) { + setPageSize(other.getPageSize()); + } + if (!other.getPageToken().isEmpty()) { + pageToken_ = other.pageToken_; + bitField0_ |= 0x00000008; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + parent_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + view_ = input.readEnum(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: + { + pageSize_ = input.readInt32(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 34: + { + pageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 34 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object parent_ = ""; + + /** + * + * + *
+     * Required. The name of the project in which to list schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + public java.lang.String getParent() { + java.lang.Object ref = parent_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parent_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to list schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + public com.google.protobuf.ByteString getParentBytes() { + java.lang.Object ref = parent_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + parent_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to list schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The parent to set. + * @return This builder for chaining. + */ + public Builder setParent(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + parent_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to list schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearParent() { + parent_ = getDefaultInstance().getParent(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to list schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for parent to set. + * @return This builder for chaining. + */ + public Builder setParentBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + parent_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private int view_ = 0; + + /** + * + * + *
+     * The set of Schema fields to return in the response. If not set, returns
+     * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+     * retrieve all fields.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The enum numeric value on the wire for view. + */ + @java.lang.Override + public int getViewValue() { + return view_; + } + + /** + * + * + *
+     * The set of Schema fields to return in the response. If not set, returns
+     * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+     * retrieve all fields.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @param value The enum numeric value on the wire for view to set. + * @return This builder for chaining. + */ + public Builder setViewValue(int value) { + view_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * The set of Schema fields to return in the response. If not set, returns
+     * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+     * retrieve all fields.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The view. + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaView getView() { + com.google.pubsub.v1.SchemaView result = com.google.pubsub.v1.SchemaView.forNumber(view_); + return result == null ? com.google.pubsub.v1.SchemaView.UNRECOGNIZED : result; + } + + /** + * + * + *
+     * The set of Schema fields to return in the response. If not set, returns
+     * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+     * retrieve all fields.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @param value The view to set. + * @return This builder for chaining. + */ + public Builder setView(com.google.pubsub.v1.SchemaView value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + view_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * The set of Schema fields to return in the response. If not set, returns
+     * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+     * retrieve all fields.
+     * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return This builder for chaining. + */ + public Builder clearView() { + bitField0_ = (bitField0_ & ~0x00000002); + view_ = 0; + onChanged(); + return this; + } + + private int pageSize_; + + /** + * + * + *
+     * Maximum number of schemas to return.
+     * 
+ * + * int32 page_size = 3; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + /** + * + * + *
+     * Maximum number of schemas to return.
+     * 
+ * + * int32 page_size = 3; + * + * @param value The pageSize to set. + * @return This builder for chaining. + */ + public Builder setPageSize(int value) { + + pageSize_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Maximum number of schemas to return.
+     * 
+ * + * int32 page_size = 3; + * + * @return This builder for chaining. + */ + public Builder clearPageSize() { + bitField0_ = (bitField0_ & ~0x00000004); + pageSize_ = 0; + onChanged(); + return this; + } + + private java.lang.Object pageToken_ = ""; + + /** + * + * + *
+     * The value returned by the last `ListSchemasResponse`; indicates that
+     * this is a continuation of a prior `ListSchemas` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 4; + * + * @return The pageToken. + */ + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * The value returned by the last `ListSchemasResponse`; indicates that
+     * this is a continuation of a prior `ListSchemas` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 4; + * + * @return The bytes for pageToken. + */ + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * The value returned by the last `ListSchemasResponse`; indicates that
+     * this is a continuation of a prior `ListSchemas` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 4; + * + * @param value The pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + pageToken_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * The value returned by the last `ListSchemasResponse`; indicates that
+     * this is a continuation of a prior `ListSchemas` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 4; + * + * @return This builder for chaining. + */ + public Builder clearPageToken() { + pageToken_ = getDefaultInstance().getPageToken(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + + /** + * + * + *
+     * The value returned by the last `ListSchemasResponse`; indicates that
+     * this is a continuation of a prior `ListSchemas` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 4; + * + * @param value The bytes for pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + pageToken_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListSchemasRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListSchemasRequest) + private static final com.google.pubsub.v1.ListSchemasRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListSchemasRequest(); + } + + public static com.google.pubsub.v1.ListSchemasRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListSchemasRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemasRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemasRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemasRequestOrBuilder.java new file mode 100644 index 000000000000..ae335367a0bb --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemasRequestOrBuilder.java @@ -0,0 +1,133 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListSchemasRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListSchemasRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the project in which to list schemas.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + java.lang.String getParent(); + + /** + * + * + *
+   * Required. The name of the project in which to list schemas.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + com.google.protobuf.ByteString getParentBytes(); + + /** + * + * + *
+   * The set of Schema fields to return in the response. If not set, returns
+   * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+   * retrieve all fields.
+   * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The enum numeric value on the wire for view. + */ + int getViewValue(); + + /** + * + * + *
+   * The set of Schema fields to return in the response. If not set, returns
+   * Schemas with `name` and `type`, but not `definition`. Set to `FULL` to
+   * retrieve all fields.
+   * 
+ * + * .google.pubsub.v1.SchemaView view = 2; + * + * @return The view. + */ + com.google.pubsub.v1.SchemaView getView(); + + /** + * + * + *
+   * Maximum number of schemas to return.
+   * 
+ * + * int32 page_size = 3; + * + * @return The pageSize. + */ + int getPageSize(); + + /** + * + * + *
+   * The value returned by the last `ListSchemasResponse`; indicates that
+   * this is a continuation of a prior `ListSchemas` call, and that the
+   * system should return the next page of data.
+   * 
+ * + * string page_token = 4; + * + * @return The pageToken. + */ + java.lang.String getPageToken(); + + /** + * + * + *
+   * The value returned by the last `ListSchemasResponse`; indicates that
+   * this is a continuation of a prior `ListSchemas` call, and that the
+   * system should return the next page of data.
+   * 
+ * + * string page_token = 4; + * + * @return The bytes for pageToken. + */ + com.google.protobuf.ByteString getPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemasResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemasResponse.java new file mode 100644 index 000000000000..1b34d265179f --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemasResponse.java @@ -0,0 +1,1109 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the `ListSchemas` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSchemasResponse} + */ +@com.google.protobuf.Generated +public final class ListSchemasResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListSchemasResponse) + ListSchemasResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListSchemasResponse"); + } + + // Use ListSchemasResponse.newBuilder() to construct. + private ListSchemasResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListSchemasResponse() { + schemas_ = java.util.Collections.emptyList(); + nextPageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemasResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemasResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSchemasResponse.class, + com.google.pubsub.v1.ListSchemasResponse.Builder.class); + } + + public static final int SCHEMAS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private java.util.List schemas_; + + /** + * + * + *
+   * The resulting schemas.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + @java.lang.Override + public java.util.List getSchemasList() { + return schemas_; + } + + /** + * + * + *
+   * The resulting schemas.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + @java.lang.Override + public java.util.List getSchemasOrBuilderList() { + return schemas_; + } + + /** + * + * + *
+   * The resulting schemas.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + @java.lang.Override + public int getSchemasCount() { + return schemas_.size(); + } + + /** + * + * + *
+   * The resulting schemas.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + @java.lang.Override + public com.google.pubsub.v1.Schema getSchemas(int index) { + return schemas_.get(index); + } + + /** + * + * + *
+   * The resulting schemas.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaOrBuilder getSchemasOrBuilder(int index) { + return schemas_.get(index); + } + + public static final int NEXT_PAGE_TOKEN_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+   * If not empty, indicates that there may be more schemas that match the
+   * request; this value should be passed in a new `ListSchemasRequest`.
+   * 
+ * + * string next_page_token = 2; + * + * @return The nextPageToken. + */ + @java.lang.Override + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * If not empty, indicates that there may be more schemas that match the
+   * request; this value should be passed in a new `ListSchemasRequest`.
+   * 
+ * + * string next_page_token = 2; + * + * @return The bytes for nextPageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < schemas_.size(); i++) { + output.writeMessage(1, schemas_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < schemas_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, schemas_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListSchemasResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListSchemasResponse other = (com.google.pubsub.v1.ListSchemasResponse) obj; + + if (!getSchemasList().equals(other.getSchemasList())) return false; + if (!getNextPageToken().equals(other.getNextPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getSchemasCount() > 0) { + hash = (37 * hash) + SCHEMAS_FIELD_NUMBER; + hash = (53 * hash) + getSchemasList().hashCode(); + } + hash = (37 * hash) + NEXT_PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getNextPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListSchemasResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSchemasResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemasResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSchemasResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemasResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSchemasResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemasResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSchemasResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemasResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSchemasResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSchemasResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSchemasResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListSchemasResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the `ListSchemas` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSchemasResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListSchemasResponse) + com.google.pubsub.v1.ListSchemasResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemasResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemasResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSchemasResponse.class, + com.google.pubsub.v1.ListSchemasResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListSchemasResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (schemasBuilder_ == null) { + schemas_ = java.util.Collections.emptyList(); + } else { + schemas_ = null; + schemasBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + nextPageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ListSchemasResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemasResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.ListSchemasResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemasResponse build() { + com.google.pubsub.v1.ListSchemasResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemasResponse buildPartial() { + com.google.pubsub.v1.ListSchemasResponse result = + new com.google.pubsub.v1.ListSchemasResponse(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.pubsub.v1.ListSchemasResponse result) { + if (schemasBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + schemas_ = java.util.Collections.unmodifiableList(schemas_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.schemas_ = schemas_; + } else { + result.schemas_ = schemasBuilder_.build(); + } + } + + private void buildPartial0(com.google.pubsub.v1.ListSchemasResponse result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.nextPageToken_ = nextPageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListSchemasResponse) { + return mergeFrom((com.google.pubsub.v1.ListSchemasResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListSchemasResponse other) { + if (other == com.google.pubsub.v1.ListSchemasResponse.getDefaultInstance()) return this; + if (schemasBuilder_ == null) { + if (!other.schemas_.isEmpty()) { + if (schemas_.isEmpty()) { + schemas_ = other.schemas_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureSchemasIsMutable(); + schemas_.addAll(other.schemas_); + } + onChanged(); + } + } else { + if (!other.schemas_.isEmpty()) { + if (schemasBuilder_.isEmpty()) { + schemasBuilder_.dispose(); + schemasBuilder_ = null; + schemas_ = other.schemas_; + bitField0_ = (bitField0_ & ~0x00000001); + schemasBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetSchemasFieldBuilder() + : null; + } else { + schemasBuilder_.addAllMessages(other.schemas_); + } + } + } + if (!other.getNextPageToken().isEmpty()) { + nextPageToken_ = other.nextPageToken_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + com.google.pubsub.v1.Schema m = + input.readMessage(com.google.pubsub.v1.Schema.parser(), extensionRegistry); + if (schemasBuilder_ == null) { + ensureSchemasIsMutable(); + schemas_.add(m); + } else { + schemasBuilder_.addMessage(m); + } + break; + } // case 10 + case 18: + { + nextPageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.util.List schemas_ = + java.util.Collections.emptyList(); + + private void ensureSchemasIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + schemas_ = new java.util.ArrayList(schemas_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder> + schemasBuilder_; + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public java.util.List getSchemasList() { + if (schemasBuilder_ == null) { + return java.util.Collections.unmodifiableList(schemas_); + } else { + return schemasBuilder_.getMessageList(); + } + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public int getSchemasCount() { + if (schemasBuilder_ == null) { + return schemas_.size(); + } else { + return schemasBuilder_.getCount(); + } + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public com.google.pubsub.v1.Schema getSchemas(int index) { + if (schemasBuilder_ == null) { + return schemas_.get(index); + } else { + return schemasBuilder_.getMessage(index); + } + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder setSchemas(int index, com.google.pubsub.v1.Schema value) { + if (schemasBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSchemasIsMutable(); + schemas_.set(index, value); + onChanged(); + } else { + schemasBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder setSchemas(int index, com.google.pubsub.v1.Schema.Builder builderForValue) { + if (schemasBuilder_ == null) { + ensureSchemasIsMutable(); + schemas_.set(index, builderForValue.build()); + onChanged(); + } else { + schemasBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder addSchemas(com.google.pubsub.v1.Schema value) { + if (schemasBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSchemasIsMutable(); + schemas_.add(value); + onChanged(); + } else { + schemasBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder addSchemas(int index, com.google.pubsub.v1.Schema value) { + if (schemasBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSchemasIsMutable(); + schemas_.add(index, value); + onChanged(); + } else { + schemasBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder addSchemas(com.google.pubsub.v1.Schema.Builder builderForValue) { + if (schemasBuilder_ == null) { + ensureSchemasIsMutable(); + schemas_.add(builderForValue.build()); + onChanged(); + } else { + schemasBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder addSchemas(int index, com.google.pubsub.v1.Schema.Builder builderForValue) { + if (schemasBuilder_ == null) { + ensureSchemasIsMutable(); + schemas_.add(index, builderForValue.build()); + onChanged(); + } else { + schemasBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder addAllSchemas(java.lang.Iterable values) { + if (schemasBuilder_ == null) { + ensureSchemasIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, schemas_); + onChanged(); + } else { + schemasBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder clearSchemas() { + if (schemasBuilder_ == null) { + schemas_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + schemasBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public Builder removeSchemas(int index) { + if (schemasBuilder_ == null) { + ensureSchemasIsMutable(); + schemas_.remove(index); + onChanged(); + } else { + schemasBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public com.google.pubsub.v1.Schema.Builder getSchemasBuilder(int index) { + return internalGetSchemasFieldBuilder().getBuilder(index); + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public com.google.pubsub.v1.SchemaOrBuilder getSchemasOrBuilder(int index) { + if (schemasBuilder_ == null) { + return schemas_.get(index); + } else { + return schemasBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public java.util.List + getSchemasOrBuilderList() { + if (schemasBuilder_ != null) { + return schemasBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(schemas_); + } + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public com.google.pubsub.v1.Schema.Builder addSchemasBuilder() { + return internalGetSchemasFieldBuilder() + .addBuilder(com.google.pubsub.v1.Schema.getDefaultInstance()); + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public com.google.pubsub.v1.Schema.Builder addSchemasBuilder(int index) { + return internalGetSchemasFieldBuilder() + .addBuilder(index, com.google.pubsub.v1.Schema.getDefaultInstance()); + } + + /** + * + * + *
+     * The resulting schemas.
+     * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + public java.util.List getSchemasBuilderList() { + return internalGetSchemasFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder> + internalGetSchemasFieldBuilder() { + if (schemasBuilder_ == null) { + schemasBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder>( + schemas_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean()); + schemas_ = null; + } + return schemasBuilder_; + } + + private java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+     * If not empty, indicates that there may be more schemas that match the
+     * request; this value should be passed in a new `ListSchemasRequest`.
+     * 
+ * + * string next_page_token = 2; + * + * @return The nextPageToken. + */ + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * If not empty, indicates that there may be more schemas that match the
+     * request; this value should be passed in a new `ListSchemasRequest`.
+     * 
+ * + * string next_page_token = 2; + * + * @return The bytes for nextPageToken. + */ + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * If not empty, indicates that there may be more schemas that match the
+     * request; this value should be passed in a new `ListSchemasRequest`.
+     * 
+ * + * string next_page_token = 2; + * + * @param value The nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * If not empty, indicates that there may be more schemas that match the
+     * request; this value should be passed in a new `ListSchemasRequest`.
+     * 
+ * + * string next_page_token = 2; + * + * @return This builder for chaining. + */ + public Builder clearNextPageToken() { + nextPageToken_ = getDefaultInstance().getNextPageToken(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * If not empty, indicates that there may be more schemas that match the
+     * request; this value should be passed in a new `ListSchemasRequest`.
+     * 
+ * + * string next_page_token = 2; + * + * @param value The bytes for nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListSchemasResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListSchemasResponse) + private static final com.google.pubsub.v1.ListSchemasResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListSchemasResponse(); + } + + public static com.google.pubsub.v1.ListSchemasResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListSchemasResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSchemasResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemasResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemasResponseOrBuilder.java new file mode 100644 index 000000000000..5631cbf6ed5d --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSchemasResponseOrBuilder.java @@ -0,0 +1,111 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListSchemasResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListSchemasResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * The resulting schemas.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + java.util.List getSchemasList(); + + /** + * + * + *
+   * The resulting schemas.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + com.google.pubsub.v1.Schema getSchemas(int index); + + /** + * + * + *
+   * The resulting schemas.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + int getSchemasCount(); + + /** + * + * + *
+   * The resulting schemas.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + java.util.List getSchemasOrBuilderList(); + + /** + * + * + *
+   * The resulting schemas.
+   * 
+ * + * repeated .google.pubsub.v1.Schema schemas = 1; + */ + com.google.pubsub.v1.SchemaOrBuilder getSchemasOrBuilder(int index); + + /** + * + * + *
+   * If not empty, indicates that there may be more schemas that match the
+   * request; this value should be passed in a new `ListSchemasRequest`.
+   * 
+ * + * string next_page_token = 2; + * + * @return The nextPageToken. + */ + java.lang.String getNextPageToken(); + + /** + * + * + *
+   * If not empty, indicates that there may be more schemas that match the
+   * request; this value should be passed in a new `ListSchemasRequest`.
+   * 
+ * + * string next_page_token = 2; + * + * @return The bytes for nextPageToken. + */ + com.google.protobuf.ByteString getNextPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSnapshotsRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSnapshotsRequest.java new file mode 100644 index 000000000000..f25cd5e2ee8f --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSnapshotsRequest.java @@ -0,0 +1,916 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `ListSnapshots` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSnapshotsRequest} + */ +@com.google.protobuf.Generated +public final class ListSnapshotsRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListSnapshotsRequest) + ListSnapshotsRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListSnapshotsRequest"); + } + + // Use ListSnapshotsRequest.newBuilder() to construct. + private ListSnapshotsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListSnapshotsRequest() { + project_ = ""; + pageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSnapshotsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSnapshotsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSnapshotsRequest.class, + com.google.pubsub.v1.ListSnapshotsRequest.Builder.class); + } + + public static final int PROJECT_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object project_ = ""; + + /** + * + * + *
+   * Required. The name of the project in which to list snapshots.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The project. + */ + @java.lang.Override + public java.lang.String getProject() { + java.lang.Object ref = project_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + project_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the project in which to list snapshots.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for project. + */ + @java.lang.Override + public com.google.protobuf.ByteString getProjectBytes() { + java.lang.Object ref = project_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + project_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PAGE_SIZE_FIELD_NUMBER = 2; + private int pageSize_ = 0; + + /** + * + * + *
+   * Optional. Maximum number of snapshots to return.
+   * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + public static final int PAGE_TOKEN_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object pageToken_ = ""; + + /** + * + * + *
+   * Optional. The value returned by the last `ListSnapshotsResponse`; indicates
+   * that this is a continuation of a prior `ListSnapshots` call, and that the
+   * system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + @java.lang.Override + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The value returned by the last `ListSnapshotsResponse`; indicates
+   * that this is a continuation of a prior `ListSnapshots` call, and that the
+   * system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(project_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, project_); + } + if (pageSize_ != 0) { + output.writeInt32(2, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, pageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(project_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, project_); + } + if (pageSize_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, pageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListSnapshotsRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListSnapshotsRequest other = + (com.google.pubsub.v1.ListSnapshotsRequest) obj; + + if (!getProject().equals(other.getProject())) return false; + if (getPageSize() != other.getPageSize()) return false; + if (!getPageToken().equals(other.getPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PROJECT_FIELD_NUMBER; + hash = (53 * hash) + getProject().hashCode(); + hash = (37 * hash) + PAGE_SIZE_FIELD_NUMBER; + hash = (53 * hash) + getPageSize(); + hash = (37 * hash) + PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListSnapshotsRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSnapshotsRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSnapshotsRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSnapshotsRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSnapshotsRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSnapshotsRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSnapshotsRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSnapshotsRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSnapshotsRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSnapshotsRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSnapshotsRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSnapshotsRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListSnapshotsRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `ListSnapshots` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSnapshotsRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListSnapshotsRequest) + com.google.pubsub.v1.ListSnapshotsRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSnapshotsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSnapshotsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSnapshotsRequest.class, + com.google.pubsub.v1.ListSnapshotsRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListSnapshotsRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + project_ = ""; + pageSize_ = 0; + pageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSnapshotsRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSnapshotsRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.ListSnapshotsRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListSnapshotsRequest build() { + com.google.pubsub.v1.ListSnapshotsRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSnapshotsRequest buildPartial() { + com.google.pubsub.v1.ListSnapshotsRequest result = + new com.google.pubsub.v1.ListSnapshotsRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ListSnapshotsRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.project_ = project_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.pageSize_ = pageSize_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.pageToken_ = pageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListSnapshotsRequest) { + return mergeFrom((com.google.pubsub.v1.ListSnapshotsRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListSnapshotsRequest other) { + if (other == com.google.pubsub.v1.ListSnapshotsRequest.getDefaultInstance()) return this; + if (!other.getProject().isEmpty()) { + project_ = other.project_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.getPageSize() != 0) { + setPageSize(other.getPageSize()); + } + if (!other.getPageToken().isEmpty()) { + pageToken_ = other.pageToken_; + bitField0_ |= 0x00000004; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + project_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + pageSize_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 26: + { + pageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object project_ = ""; + + /** + * + * + *
+     * Required. The name of the project in which to list snapshots.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The project. + */ + public java.lang.String getProject() { + java.lang.Object ref = project_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + project_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to list snapshots.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for project. + */ + public com.google.protobuf.ByteString getProjectBytes() { + java.lang.Object ref = project_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + project_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to list snapshots.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The project to set. + * @return This builder for chaining. + */ + public Builder setProject(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + project_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to list snapshots.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearProject() { + project_ = getDefaultInstance().getProject(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to list snapshots.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for project to set. + * @return This builder for chaining. + */ + public Builder setProjectBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + project_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private int pageSize_; + + /** + * + * + *
+     * Optional. Maximum number of snapshots to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + /** + * + * + *
+     * Optional. Maximum number of snapshots to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The pageSize to set. + * @return This builder for chaining. + */ + public Builder setPageSize(int value) { + + pageSize_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Maximum number of snapshots to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPageSize() { + bitField0_ = (bitField0_ & ~0x00000002); + pageSize_ = 0; + onChanged(); + return this; + } + + private java.lang.Object pageToken_ = ""; + + /** + * + * + *
+     * Optional. The value returned by the last `ListSnapshotsResponse`; indicates
+     * that this is a continuation of a prior `ListSnapshots` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListSnapshotsResponse`; indicates
+     * that this is a continuation of a prior `ListSnapshots` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListSnapshotsResponse`; indicates
+     * that this is a continuation of a prior `ListSnapshots` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + pageToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListSnapshotsResponse`; indicates
+     * that this is a continuation of a prior `ListSnapshots` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPageToken() { + pageToken_ = getDefaultInstance().getPageToken(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListSnapshotsResponse`; indicates
+     * that this is a continuation of a prior `ListSnapshots` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + pageToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListSnapshotsRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListSnapshotsRequest) + private static final com.google.pubsub.v1.ListSnapshotsRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListSnapshotsRequest(); + } + + public static com.google.pubsub.v1.ListSnapshotsRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListSnapshotsRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSnapshotsRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSnapshotsRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSnapshotsRequestOrBuilder.java new file mode 100644 index 000000000000..b51ea89abdec --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSnapshotsRequestOrBuilder.java @@ -0,0 +1,103 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListSnapshotsRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListSnapshotsRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the project in which to list snapshots.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The project. + */ + java.lang.String getProject(); + + /** + * + * + *
+   * Required. The name of the project in which to list snapshots.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for project. + */ + com.google.protobuf.ByteString getProjectBytes(); + + /** + * + * + *
+   * Optional. Maximum number of snapshots to return.
+   * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + int getPageSize(); + + /** + * + * + *
+   * Optional. The value returned by the last `ListSnapshotsResponse`; indicates
+   * that this is a continuation of a prior `ListSnapshots` call, and that the
+   * system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + java.lang.String getPageToken(); + + /** + * + * + *
+   * Optional. The value returned by the last `ListSnapshotsResponse`; indicates
+   * that this is a continuation of a prior `ListSnapshots` call, and that the
+   * system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + com.google.protobuf.ByteString getPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSnapshotsResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSnapshotsResponse.java new file mode 100644 index 000000000000..5c4719949f50 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSnapshotsResponse.java @@ -0,0 +1,1165 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the `ListSnapshots` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSnapshotsResponse} + */ +@com.google.protobuf.Generated +public final class ListSnapshotsResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListSnapshotsResponse) + ListSnapshotsResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListSnapshotsResponse"); + } + + // Use ListSnapshotsResponse.newBuilder() to construct. + private ListSnapshotsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListSnapshotsResponse() { + snapshots_ = java.util.Collections.emptyList(); + nextPageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSnapshotsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSnapshotsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSnapshotsResponse.class, + com.google.pubsub.v1.ListSnapshotsResponse.Builder.class); + } + + public static final int SNAPSHOTS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private java.util.List snapshots_; + + /** + * + * + *
+   * Optional. The resulting snapshots.
+   * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List getSnapshotsList() { + return snapshots_; + } + + /** + * + * + *
+   * Optional. The resulting snapshots.
+   * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List + getSnapshotsOrBuilderList() { + return snapshots_; + } + + /** + * + * + *
+   * Optional. The resulting snapshots.
+   * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public int getSnapshotsCount() { + return snapshots_.size(); + } + + /** + * + * + *
+   * Optional. The resulting snapshots.
+   * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.Snapshot getSnapshots(int index) { + return snapshots_.get(index); + } + + /** + * + * + *
+   * Optional. The resulting snapshots.
+   * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.SnapshotOrBuilder getSnapshotsOrBuilder(int index) { + return snapshots_.get(index); + } + + public static final int NEXT_PAGE_TOKEN_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more snapshot that
+   * match the request; this value should be passed in a new
+   * `ListSnapshotsRequest`.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + @java.lang.Override + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more snapshot that
+   * match the request; this value should be passed in a new
+   * `ListSnapshotsRequest`.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < snapshots_.size(); i++) { + output.writeMessage(1, snapshots_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < snapshots_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, snapshots_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListSnapshotsResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListSnapshotsResponse other = + (com.google.pubsub.v1.ListSnapshotsResponse) obj; + + if (!getSnapshotsList().equals(other.getSnapshotsList())) return false; + if (!getNextPageToken().equals(other.getNextPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getSnapshotsCount() > 0) { + hash = (37 * hash) + SNAPSHOTS_FIELD_NUMBER; + hash = (53 * hash) + getSnapshotsList().hashCode(); + } + hash = (37 * hash) + NEXT_PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getNextPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListSnapshotsResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSnapshotsResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSnapshotsResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSnapshotsResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSnapshotsResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSnapshotsResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSnapshotsResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSnapshotsResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSnapshotsResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSnapshotsResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSnapshotsResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSnapshotsResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListSnapshotsResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the `ListSnapshots` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSnapshotsResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListSnapshotsResponse) + com.google.pubsub.v1.ListSnapshotsResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSnapshotsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSnapshotsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSnapshotsResponse.class, + com.google.pubsub.v1.ListSnapshotsResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListSnapshotsResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (snapshotsBuilder_ == null) { + snapshots_ = java.util.Collections.emptyList(); + } else { + snapshots_ = null; + snapshotsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + nextPageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSnapshotsResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSnapshotsResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.ListSnapshotsResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListSnapshotsResponse build() { + com.google.pubsub.v1.ListSnapshotsResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSnapshotsResponse buildPartial() { + com.google.pubsub.v1.ListSnapshotsResponse result = + new com.google.pubsub.v1.ListSnapshotsResponse(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.pubsub.v1.ListSnapshotsResponse result) { + if (snapshotsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + snapshots_ = java.util.Collections.unmodifiableList(snapshots_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.snapshots_ = snapshots_; + } else { + result.snapshots_ = snapshotsBuilder_.build(); + } + } + + private void buildPartial0(com.google.pubsub.v1.ListSnapshotsResponse result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.nextPageToken_ = nextPageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListSnapshotsResponse) { + return mergeFrom((com.google.pubsub.v1.ListSnapshotsResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListSnapshotsResponse other) { + if (other == com.google.pubsub.v1.ListSnapshotsResponse.getDefaultInstance()) return this; + if (snapshotsBuilder_ == null) { + if (!other.snapshots_.isEmpty()) { + if (snapshots_.isEmpty()) { + snapshots_ = other.snapshots_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureSnapshotsIsMutable(); + snapshots_.addAll(other.snapshots_); + } + onChanged(); + } + } else { + if (!other.snapshots_.isEmpty()) { + if (snapshotsBuilder_.isEmpty()) { + snapshotsBuilder_.dispose(); + snapshotsBuilder_ = null; + snapshots_ = other.snapshots_; + bitField0_ = (bitField0_ & ~0x00000001); + snapshotsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetSnapshotsFieldBuilder() + : null; + } else { + snapshotsBuilder_.addAllMessages(other.snapshots_); + } + } + } + if (!other.getNextPageToken().isEmpty()) { + nextPageToken_ = other.nextPageToken_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + com.google.pubsub.v1.Snapshot m = + input.readMessage(com.google.pubsub.v1.Snapshot.parser(), extensionRegistry); + if (snapshotsBuilder_ == null) { + ensureSnapshotsIsMutable(); + snapshots_.add(m); + } else { + snapshotsBuilder_.addMessage(m); + } + break; + } // case 10 + case 18: + { + nextPageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.util.List snapshots_ = + java.util.Collections.emptyList(); + + private void ensureSnapshotsIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + snapshots_ = new java.util.ArrayList(snapshots_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Snapshot, + com.google.pubsub.v1.Snapshot.Builder, + com.google.pubsub.v1.SnapshotOrBuilder> + snapshotsBuilder_; + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List getSnapshotsList() { + if (snapshotsBuilder_ == null) { + return java.util.Collections.unmodifiableList(snapshots_); + } else { + return snapshotsBuilder_.getMessageList(); + } + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public int getSnapshotsCount() { + if (snapshotsBuilder_ == null) { + return snapshots_.size(); + } else { + return snapshotsBuilder_.getCount(); + } + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.Snapshot getSnapshots(int index) { + if (snapshotsBuilder_ == null) { + return snapshots_.get(index); + } else { + return snapshotsBuilder_.getMessage(index); + } + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSnapshots(int index, com.google.pubsub.v1.Snapshot value) { + if (snapshotsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSnapshotsIsMutable(); + snapshots_.set(index, value); + onChanged(); + } else { + snapshotsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSnapshots(int index, com.google.pubsub.v1.Snapshot.Builder builderForValue) { + if (snapshotsBuilder_ == null) { + ensureSnapshotsIsMutable(); + snapshots_.set(index, builderForValue.build()); + onChanged(); + } else { + snapshotsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addSnapshots(com.google.pubsub.v1.Snapshot value) { + if (snapshotsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSnapshotsIsMutable(); + snapshots_.add(value); + onChanged(); + } else { + snapshotsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addSnapshots(int index, com.google.pubsub.v1.Snapshot value) { + if (snapshotsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSnapshotsIsMutable(); + snapshots_.add(index, value); + onChanged(); + } else { + snapshotsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addSnapshots(com.google.pubsub.v1.Snapshot.Builder builderForValue) { + if (snapshotsBuilder_ == null) { + ensureSnapshotsIsMutable(); + snapshots_.add(builderForValue.build()); + onChanged(); + } else { + snapshotsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addSnapshots(int index, com.google.pubsub.v1.Snapshot.Builder builderForValue) { + if (snapshotsBuilder_ == null) { + ensureSnapshotsIsMutable(); + snapshots_.add(index, builderForValue.build()); + onChanged(); + } else { + snapshotsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addAllSnapshots( + java.lang.Iterable values) { + if (snapshotsBuilder_ == null) { + ensureSnapshotsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, snapshots_); + onChanged(); + } else { + snapshotsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearSnapshots() { + if (snapshotsBuilder_ == null) { + snapshots_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + snapshotsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeSnapshots(int index) { + if (snapshotsBuilder_ == null) { + ensureSnapshotsIsMutable(); + snapshots_.remove(index); + onChanged(); + } else { + snapshotsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.Snapshot.Builder getSnapshotsBuilder(int index) { + return internalGetSnapshotsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.SnapshotOrBuilder getSnapshotsOrBuilder(int index) { + if (snapshotsBuilder_ == null) { + return snapshots_.get(index); + } else { + return snapshotsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getSnapshotsOrBuilderList() { + if (snapshotsBuilder_ != null) { + return snapshotsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(snapshots_); + } + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.Snapshot.Builder addSnapshotsBuilder() { + return internalGetSnapshotsFieldBuilder() + .addBuilder(com.google.pubsub.v1.Snapshot.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.Snapshot.Builder addSnapshotsBuilder(int index) { + return internalGetSnapshotsFieldBuilder() + .addBuilder(index, com.google.pubsub.v1.Snapshot.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. The resulting snapshots.
+     * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List getSnapshotsBuilderList() { + return internalGetSnapshotsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Snapshot, + com.google.pubsub.v1.Snapshot.Builder, + com.google.pubsub.v1.SnapshotOrBuilder> + internalGetSnapshotsFieldBuilder() { + if (snapshotsBuilder_ == null) { + snapshotsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Snapshot, + com.google.pubsub.v1.Snapshot.Builder, + com.google.pubsub.v1.SnapshotOrBuilder>( + snapshots_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean()); + snapshots_ = null; + } + return snapshotsBuilder_; + } + + private java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more snapshot that
+     * match the request; this value should be passed in a new
+     * `ListSnapshotsRequest`.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more snapshot that
+     * match the request; this value should be passed in a new
+     * `ListSnapshotsRequest`.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more snapshot that
+     * match the request; this value should be passed in a new
+     * `ListSnapshotsRequest`.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more snapshot that
+     * match the request; this value should be passed in a new
+     * `ListSnapshotsRequest`.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearNextPageToken() { + nextPageToken_ = getDefaultInstance().getNextPageToken(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more snapshot that
+     * match the request; this value should be passed in a new
+     * `ListSnapshotsRequest`.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListSnapshotsResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListSnapshotsResponse) + private static final com.google.pubsub.v1.ListSnapshotsResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListSnapshotsResponse(); + } + + public static com.google.pubsub.v1.ListSnapshotsResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListSnapshotsResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSnapshotsResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSnapshotsResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSnapshotsResponseOrBuilder.java new file mode 100644 index 000000000000..ec4643a061b7 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSnapshotsResponseOrBuilder.java @@ -0,0 +1,123 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListSnapshotsResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListSnapshotsResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The resulting snapshots.
+   * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List getSnapshotsList(); + + /** + * + * + *
+   * Optional. The resulting snapshots.
+   * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.Snapshot getSnapshots(int index); + + /** + * + * + *
+   * Optional. The resulting snapshots.
+   * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getSnapshotsCount(); + + /** + * + * + *
+   * Optional. The resulting snapshots.
+   * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List getSnapshotsOrBuilderList(); + + /** + * + * + *
+   * Optional. The resulting snapshots.
+   * 
+ * + * + * repeated .google.pubsub.v1.Snapshot snapshots = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.SnapshotOrBuilder getSnapshotsOrBuilder(int index); + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more snapshot that
+   * match the request; this value should be passed in a new
+   * `ListSnapshotsRequest`.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + java.lang.String getNextPageToken(); + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more snapshot that
+   * match the request; this value should be passed in a new
+   * `ListSnapshotsRequest`.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + com.google.protobuf.ByteString getNextPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSubscriptionsRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSubscriptionsRequest.java new file mode 100644 index 000000000000..c1e4ddcb15b6 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSubscriptionsRequest.java @@ -0,0 +1,916 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `ListSubscriptions` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSubscriptionsRequest} + */ +@com.google.protobuf.Generated +public final class ListSubscriptionsRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListSubscriptionsRequest) + ListSubscriptionsRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListSubscriptionsRequest"); + } + + // Use ListSubscriptionsRequest.newBuilder() to construct. + private ListSubscriptionsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListSubscriptionsRequest() { + project_ = ""; + pageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSubscriptionsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSubscriptionsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSubscriptionsRequest.class, + com.google.pubsub.v1.ListSubscriptionsRequest.Builder.class); + } + + public static final int PROJECT_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object project_ = ""; + + /** + * + * + *
+   * Required. The name of the project in which to list subscriptions.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The project. + */ + @java.lang.Override + public java.lang.String getProject() { + java.lang.Object ref = project_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + project_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the project in which to list subscriptions.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for project. + */ + @java.lang.Override + public com.google.protobuf.ByteString getProjectBytes() { + java.lang.Object ref = project_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + project_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PAGE_SIZE_FIELD_NUMBER = 2; + private int pageSize_ = 0; + + /** + * + * + *
+   * Optional. Maximum number of subscriptions to return.
+   * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + public static final int PAGE_TOKEN_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object pageToken_ = ""; + + /** + * + * + *
+   * Optional. The value returned by the last `ListSubscriptionsResponse`;
+   * indicates that this is a continuation of a prior `ListSubscriptions` call,
+   * and that the system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + @java.lang.Override + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The value returned by the last `ListSubscriptionsResponse`;
+   * indicates that this is a continuation of a prior `ListSubscriptions` call,
+   * and that the system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(project_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, project_); + } + if (pageSize_ != 0) { + output.writeInt32(2, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, pageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(project_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, project_); + } + if (pageSize_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, pageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListSubscriptionsRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListSubscriptionsRequest other = + (com.google.pubsub.v1.ListSubscriptionsRequest) obj; + + if (!getProject().equals(other.getProject())) return false; + if (getPageSize() != other.getPageSize()) return false; + if (!getPageToken().equals(other.getPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PROJECT_FIELD_NUMBER; + hash = (53 * hash) + getProject().hashCode(); + hash = (37 * hash) + PAGE_SIZE_FIELD_NUMBER; + hash = (53 * hash) + getPageSize(); + hash = (37 * hash) + PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListSubscriptionsRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSubscriptionsRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSubscriptionsRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSubscriptionsRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSubscriptionsRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSubscriptionsRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSubscriptionsRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSubscriptionsRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSubscriptionsRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSubscriptionsRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSubscriptionsRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSubscriptionsRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListSubscriptionsRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `ListSubscriptions` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSubscriptionsRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListSubscriptionsRequest) + com.google.pubsub.v1.ListSubscriptionsRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSubscriptionsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSubscriptionsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSubscriptionsRequest.class, + com.google.pubsub.v1.ListSubscriptionsRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListSubscriptionsRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + project_ = ""; + pageSize_ = 0; + pageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSubscriptionsRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSubscriptionsRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.ListSubscriptionsRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListSubscriptionsRequest build() { + com.google.pubsub.v1.ListSubscriptionsRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSubscriptionsRequest buildPartial() { + com.google.pubsub.v1.ListSubscriptionsRequest result = + new com.google.pubsub.v1.ListSubscriptionsRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ListSubscriptionsRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.project_ = project_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.pageSize_ = pageSize_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.pageToken_ = pageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListSubscriptionsRequest) { + return mergeFrom((com.google.pubsub.v1.ListSubscriptionsRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListSubscriptionsRequest other) { + if (other == com.google.pubsub.v1.ListSubscriptionsRequest.getDefaultInstance()) return this; + if (!other.getProject().isEmpty()) { + project_ = other.project_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.getPageSize() != 0) { + setPageSize(other.getPageSize()); + } + if (!other.getPageToken().isEmpty()) { + pageToken_ = other.pageToken_; + bitField0_ |= 0x00000004; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + project_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + pageSize_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 26: + { + pageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object project_ = ""; + + /** + * + * + *
+     * Required. The name of the project in which to list subscriptions.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The project. + */ + public java.lang.String getProject() { + java.lang.Object ref = project_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + project_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to list subscriptions.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for project. + */ + public com.google.protobuf.ByteString getProjectBytes() { + java.lang.Object ref = project_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + project_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to list subscriptions.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The project to set. + * @return This builder for chaining. + */ + public Builder setProject(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + project_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to list subscriptions.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearProject() { + project_ = getDefaultInstance().getProject(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to list subscriptions.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for project to set. + * @return This builder for chaining. + */ + public Builder setProjectBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + project_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private int pageSize_; + + /** + * + * + *
+     * Optional. Maximum number of subscriptions to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + /** + * + * + *
+     * Optional. Maximum number of subscriptions to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The pageSize to set. + * @return This builder for chaining. + */ + public Builder setPageSize(int value) { + + pageSize_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Maximum number of subscriptions to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPageSize() { + bitField0_ = (bitField0_ & ~0x00000002); + pageSize_ = 0; + onChanged(); + return this; + } + + private java.lang.Object pageToken_ = ""; + + /** + * + * + *
+     * Optional. The value returned by the last `ListSubscriptionsResponse`;
+     * indicates that this is a continuation of a prior `ListSubscriptions` call,
+     * and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListSubscriptionsResponse`;
+     * indicates that this is a continuation of a prior `ListSubscriptions` call,
+     * and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListSubscriptionsResponse`;
+     * indicates that this is a continuation of a prior `ListSubscriptions` call,
+     * and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + pageToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListSubscriptionsResponse`;
+     * indicates that this is a continuation of a prior `ListSubscriptions` call,
+     * and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPageToken() { + pageToken_ = getDefaultInstance().getPageToken(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListSubscriptionsResponse`;
+     * indicates that this is a continuation of a prior `ListSubscriptions` call,
+     * and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + pageToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListSubscriptionsRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListSubscriptionsRequest) + private static final com.google.pubsub.v1.ListSubscriptionsRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListSubscriptionsRequest(); + } + + public static com.google.pubsub.v1.ListSubscriptionsRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListSubscriptionsRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSubscriptionsRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSubscriptionsRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSubscriptionsRequestOrBuilder.java new file mode 100644 index 000000000000..85908081b444 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSubscriptionsRequestOrBuilder.java @@ -0,0 +1,103 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListSubscriptionsRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListSubscriptionsRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the project in which to list subscriptions.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The project. + */ + java.lang.String getProject(); + + /** + * + * + *
+   * Required. The name of the project in which to list subscriptions.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for project. + */ + com.google.protobuf.ByteString getProjectBytes(); + + /** + * + * + *
+   * Optional. Maximum number of subscriptions to return.
+   * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + int getPageSize(); + + /** + * + * + *
+   * Optional. The value returned by the last `ListSubscriptionsResponse`;
+   * indicates that this is a continuation of a prior `ListSubscriptions` call,
+   * and that the system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + java.lang.String getPageToken(); + + /** + * + * + *
+   * Optional. The value returned by the last `ListSubscriptionsResponse`;
+   * indicates that this is a continuation of a prior `ListSubscriptions` call,
+   * and that the system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + com.google.protobuf.ByteString getPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSubscriptionsResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSubscriptionsResponse.java new file mode 100644 index 000000000000..44acf2f2d261 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSubscriptionsResponse.java @@ -0,0 +1,1171 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the `ListSubscriptions` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSubscriptionsResponse} + */ +@com.google.protobuf.Generated +public final class ListSubscriptionsResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListSubscriptionsResponse) + ListSubscriptionsResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListSubscriptionsResponse"); + } + + // Use ListSubscriptionsResponse.newBuilder() to construct. + private ListSubscriptionsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListSubscriptionsResponse() { + subscriptions_ = java.util.Collections.emptyList(); + nextPageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSubscriptionsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSubscriptionsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSubscriptionsResponse.class, + com.google.pubsub.v1.ListSubscriptionsResponse.Builder.class); + } + + public static final int SUBSCRIPTIONS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private java.util.List subscriptions_; + + /** + * + * + *
+   * Optional. The subscriptions that match the request.
+   * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List getSubscriptionsList() { + return subscriptions_; + } + + /** + * + * + *
+   * Optional. The subscriptions that match the request.
+   * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List + getSubscriptionsOrBuilderList() { + return subscriptions_; + } + + /** + * + * + *
+   * Optional. The subscriptions that match the request.
+   * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public int getSubscriptionsCount() { + return subscriptions_.size(); + } + + /** + * + * + *
+   * Optional. The subscriptions that match the request.
+   * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.Subscription getSubscriptions(int index) { + return subscriptions_.get(index); + } + + /** + * + * + *
+   * Optional. The subscriptions that match the request.
+   * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.SubscriptionOrBuilder getSubscriptionsOrBuilder(int index) { + return subscriptions_.get(index); + } + + public static final int NEXT_PAGE_TOKEN_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more subscriptions that
+   * match the request; this value should be passed in a new
+   * `ListSubscriptionsRequest` to get more subscriptions.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + @java.lang.Override + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more subscriptions that
+   * match the request; this value should be passed in a new
+   * `ListSubscriptionsRequest` to get more subscriptions.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < subscriptions_.size(); i++) { + output.writeMessage(1, subscriptions_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < subscriptions_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, subscriptions_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListSubscriptionsResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListSubscriptionsResponse other = + (com.google.pubsub.v1.ListSubscriptionsResponse) obj; + + if (!getSubscriptionsList().equals(other.getSubscriptionsList())) return false; + if (!getNextPageToken().equals(other.getNextPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getSubscriptionsCount() > 0) { + hash = (37 * hash) + SUBSCRIPTIONS_FIELD_NUMBER; + hash = (53 * hash) + getSubscriptionsList().hashCode(); + } + hash = (37 * hash) + NEXT_PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getNextPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListSubscriptionsResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSubscriptionsResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSubscriptionsResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSubscriptionsResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSubscriptionsResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListSubscriptionsResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSubscriptionsResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSubscriptionsResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSubscriptionsResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSubscriptionsResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListSubscriptionsResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListSubscriptionsResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListSubscriptionsResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the `ListSubscriptions` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListSubscriptionsResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListSubscriptionsResponse) + com.google.pubsub.v1.ListSubscriptionsResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSubscriptionsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSubscriptionsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListSubscriptionsResponse.class, + com.google.pubsub.v1.ListSubscriptionsResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListSubscriptionsResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (subscriptionsBuilder_ == null) { + subscriptions_ = java.util.Collections.emptyList(); + } else { + subscriptions_ = null; + subscriptionsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + nextPageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListSubscriptionsResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSubscriptionsResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.ListSubscriptionsResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListSubscriptionsResponse build() { + com.google.pubsub.v1.ListSubscriptionsResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSubscriptionsResponse buildPartial() { + com.google.pubsub.v1.ListSubscriptionsResponse result = + new com.google.pubsub.v1.ListSubscriptionsResponse(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.pubsub.v1.ListSubscriptionsResponse result) { + if (subscriptionsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + subscriptions_ = java.util.Collections.unmodifiableList(subscriptions_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.subscriptions_ = subscriptions_; + } else { + result.subscriptions_ = subscriptionsBuilder_.build(); + } + } + + private void buildPartial0(com.google.pubsub.v1.ListSubscriptionsResponse result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.nextPageToken_ = nextPageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListSubscriptionsResponse) { + return mergeFrom((com.google.pubsub.v1.ListSubscriptionsResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListSubscriptionsResponse other) { + if (other == com.google.pubsub.v1.ListSubscriptionsResponse.getDefaultInstance()) return this; + if (subscriptionsBuilder_ == null) { + if (!other.subscriptions_.isEmpty()) { + if (subscriptions_.isEmpty()) { + subscriptions_ = other.subscriptions_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureSubscriptionsIsMutable(); + subscriptions_.addAll(other.subscriptions_); + } + onChanged(); + } + } else { + if (!other.subscriptions_.isEmpty()) { + if (subscriptionsBuilder_.isEmpty()) { + subscriptionsBuilder_.dispose(); + subscriptionsBuilder_ = null; + subscriptions_ = other.subscriptions_; + bitField0_ = (bitField0_ & ~0x00000001); + subscriptionsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetSubscriptionsFieldBuilder() + : null; + } else { + subscriptionsBuilder_.addAllMessages(other.subscriptions_); + } + } + } + if (!other.getNextPageToken().isEmpty()) { + nextPageToken_ = other.nextPageToken_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + com.google.pubsub.v1.Subscription m = + input.readMessage( + com.google.pubsub.v1.Subscription.parser(), extensionRegistry); + if (subscriptionsBuilder_ == null) { + ensureSubscriptionsIsMutable(); + subscriptions_.add(m); + } else { + subscriptionsBuilder_.addMessage(m); + } + break; + } // case 10 + case 18: + { + nextPageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.util.List subscriptions_ = + java.util.Collections.emptyList(); + + private void ensureSubscriptionsIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + subscriptions_ = new java.util.ArrayList(subscriptions_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Subscription, + com.google.pubsub.v1.Subscription.Builder, + com.google.pubsub.v1.SubscriptionOrBuilder> + subscriptionsBuilder_; + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List getSubscriptionsList() { + if (subscriptionsBuilder_ == null) { + return java.util.Collections.unmodifiableList(subscriptions_); + } else { + return subscriptionsBuilder_.getMessageList(); + } + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public int getSubscriptionsCount() { + if (subscriptionsBuilder_ == null) { + return subscriptions_.size(); + } else { + return subscriptionsBuilder_.getCount(); + } + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.Subscription getSubscriptions(int index) { + if (subscriptionsBuilder_ == null) { + return subscriptions_.get(index); + } else { + return subscriptionsBuilder_.getMessage(index); + } + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSubscriptions(int index, com.google.pubsub.v1.Subscription value) { + if (subscriptionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubscriptionsIsMutable(); + subscriptions_.set(index, value); + onChanged(); + } else { + subscriptionsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSubscriptions( + int index, com.google.pubsub.v1.Subscription.Builder builderForValue) { + if (subscriptionsBuilder_ == null) { + ensureSubscriptionsIsMutable(); + subscriptions_.set(index, builderForValue.build()); + onChanged(); + } else { + subscriptionsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addSubscriptions(com.google.pubsub.v1.Subscription value) { + if (subscriptionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubscriptionsIsMutable(); + subscriptions_.add(value); + onChanged(); + } else { + subscriptionsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addSubscriptions(int index, com.google.pubsub.v1.Subscription value) { + if (subscriptionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubscriptionsIsMutable(); + subscriptions_.add(index, value); + onChanged(); + } else { + subscriptionsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addSubscriptions(com.google.pubsub.v1.Subscription.Builder builderForValue) { + if (subscriptionsBuilder_ == null) { + ensureSubscriptionsIsMutable(); + subscriptions_.add(builderForValue.build()); + onChanged(); + } else { + subscriptionsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addSubscriptions( + int index, com.google.pubsub.v1.Subscription.Builder builderForValue) { + if (subscriptionsBuilder_ == null) { + ensureSubscriptionsIsMutable(); + subscriptions_.add(index, builderForValue.build()); + onChanged(); + } else { + subscriptionsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addAllSubscriptions( + java.lang.Iterable values) { + if (subscriptionsBuilder_ == null) { + ensureSubscriptionsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, subscriptions_); + onChanged(); + } else { + subscriptionsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearSubscriptions() { + if (subscriptionsBuilder_ == null) { + subscriptions_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + subscriptionsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeSubscriptions(int index) { + if (subscriptionsBuilder_ == null) { + ensureSubscriptionsIsMutable(); + subscriptions_.remove(index); + onChanged(); + } else { + subscriptionsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.Subscription.Builder getSubscriptionsBuilder(int index) { + return internalGetSubscriptionsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.SubscriptionOrBuilder getSubscriptionsOrBuilder(int index) { + if (subscriptionsBuilder_ == null) { + return subscriptions_.get(index); + } else { + return subscriptionsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getSubscriptionsOrBuilderList() { + if (subscriptionsBuilder_ != null) { + return subscriptionsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(subscriptions_); + } + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.Subscription.Builder addSubscriptionsBuilder() { + return internalGetSubscriptionsFieldBuilder() + .addBuilder(com.google.pubsub.v1.Subscription.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.Subscription.Builder addSubscriptionsBuilder(int index) { + return internalGetSubscriptionsFieldBuilder() + .addBuilder(index, com.google.pubsub.v1.Subscription.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. The subscriptions that match the request.
+     * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List getSubscriptionsBuilderList() { + return internalGetSubscriptionsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Subscription, + com.google.pubsub.v1.Subscription.Builder, + com.google.pubsub.v1.SubscriptionOrBuilder> + internalGetSubscriptionsFieldBuilder() { + if (subscriptionsBuilder_ == null) { + subscriptionsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Subscription, + com.google.pubsub.v1.Subscription.Builder, + com.google.pubsub.v1.SubscriptionOrBuilder>( + subscriptions_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + subscriptions_ = null; + } + return subscriptionsBuilder_; + } + + private java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more subscriptions that
+     * match the request; this value should be passed in a new
+     * `ListSubscriptionsRequest` to get more subscriptions.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more subscriptions that
+     * match the request; this value should be passed in a new
+     * `ListSubscriptionsRequest` to get more subscriptions.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more subscriptions that
+     * match the request; this value should be passed in a new
+     * `ListSubscriptionsRequest` to get more subscriptions.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more subscriptions that
+     * match the request; this value should be passed in a new
+     * `ListSubscriptionsRequest` to get more subscriptions.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearNextPageToken() { + nextPageToken_ = getDefaultInstance().getNextPageToken(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more subscriptions that
+     * match the request; this value should be passed in a new
+     * `ListSubscriptionsRequest` to get more subscriptions.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListSubscriptionsResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListSubscriptionsResponse) + private static final com.google.pubsub.v1.ListSubscriptionsResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListSubscriptionsResponse(); + } + + public static com.google.pubsub.v1.ListSubscriptionsResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListSubscriptionsResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListSubscriptionsResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSubscriptionsResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSubscriptionsResponseOrBuilder.java new file mode 100644 index 000000000000..55129e3017ed --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListSubscriptionsResponseOrBuilder.java @@ -0,0 +1,124 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListSubscriptionsResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListSubscriptionsResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The subscriptions that match the request.
+   * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List getSubscriptionsList(); + + /** + * + * + *
+   * Optional. The subscriptions that match the request.
+   * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.Subscription getSubscriptions(int index); + + /** + * + * + *
+   * Optional. The subscriptions that match the request.
+   * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getSubscriptionsCount(); + + /** + * + * + *
+   * Optional. The subscriptions that match the request.
+   * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List + getSubscriptionsOrBuilderList(); + + /** + * + * + *
+   * Optional. The subscriptions that match the request.
+   * 
+ * + * + * repeated .google.pubsub.v1.Subscription subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.SubscriptionOrBuilder getSubscriptionsOrBuilder(int index); + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more subscriptions that
+   * match the request; this value should be passed in a new
+   * `ListSubscriptionsRequest` to get more subscriptions.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + java.lang.String getNextPageToken(); + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more subscriptions that
+   * match the request; this value should be passed in a new
+   * `ListSubscriptionsRequest` to get more subscriptions.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + com.google.protobuf.ByteString getNextPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSnapshotsRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSnapshotsRequest.java new file mode 100644 index 000000000000..0293fb6de812 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSnapshotsRequest.java @@ -0,0 +1,916 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `ListTopicSnapshots` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListTopicSnapshotsRequest} + */ +@com.google.protobuf.Generated +public final class ListTopicSnapshotsRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListTopicSnapshotsRequest) + ListTopicSnapshotsRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListTopicSnapshotsRequest"); + } + + // Use ListTopicSnapshotsRequest.newBuilder() to construct. + private ListTopicSnapshotsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListTopicSnapshotsRequest() { + topic_ = ""; + pageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSnapshotsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSnapshotsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListTopicSnapshotsRequest.class, + com.google.pubsub.v1.ListTopicSnapshotsRequest.Builder.class); + } + + public static final int TOPIC_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object topic_ = ""; + + /** + * + * + *
+   * Required. The name of the topic that snapshots are attached to.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + @java.lang.Override + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the topic that snapshots are attached to.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PAGE_SIZE_FIELD_NUMBER = 2; + private int pageSize_ = 0; + + /** + * + * + *
+   * Optional. Maximum number of snapshot names to return.
+   * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + public static final int PAGE_TOKEN_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object pageToken_ = ""; + + /** + * + * + *
+   * Optional. The value returned by the last `ListTopicSnapshotsResponse`;
+   * indicates that this is a continuation of a prior `ListTopicSnapshots` call,
+   * and that the system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + @java.lang.Override + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The value returned by the last `ListTopicSnapshotsResponse`;
+   * indicates that this is a continuation of a prior `ListTopicSnapshots` call,
+   * and that the system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, topic_); + } + if (pageSize_ != 0) { + output.writeInt32(2, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, pageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, topic_); + } + if (pageSize_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, pageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListTopicSnapshotsRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListTopicSnapshotsRequest other = + (com.google.pubsub.v1.ListTopicSnapshotsRequest) obj; + + if (!getTopic().equals(other.getTopic())) return false; + if (getPageSize() != other.getPageSize()) return false; + if (!getPageToken().equals(other.getPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getTopic().hashCode(); + hash = (37 * hash) + PAGE_SIZE_FIELD_NUMBER; + hash = (53 * hash) + getPageSize(); + hash = (37 * hash) + PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListTopicSnapshotsRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListTopicSnapshotsRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `ListTopicSnapshots` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListTopicSnapshotsRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListTopicSnapshotsRequest) + com.google.pubsub.v1.ListTopicSnapshotsRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSnapshotsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSnapshotsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListTopicSnapshotsRequest.class, + com.google.pubsub.v1.ListTopicSnapshotsRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListTopicSnapshotsRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + topic_ = ""; + pageSize_ = 0; + pageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSnapshotsRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSnapshotsRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.ListTopicSnapshotsRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSnapshotsRequest build() { + com.google.pubsub.v1.ListTopicSnapshotsRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSnapshotsRequest buildPartial() { + com.google.pubsub.v1.ListTopicSnapshotsRequest result = + new com.google.pubsub.v1.ListTopicSnapshotsRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ListTopicSnapshotsRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.topic_ = topic_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.pageSize_ = pageSize_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.pageToken_ = pageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListTopicSnapshotsRequest) { + return mergeFrom((com.google.pubsub.v1.ListTopicSnapshotsRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListTopicSnapshotsRequest other) { + if (other == com.google.pubsub.v1.ListTopicSnapshotsRequest.getDefaultInstance()) return this; + if (!other.getTopic().isEmpty()) { + topic_ = other.topic_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.getPageSize() != 0) { + setPageSize(other.getPageSize()); + } + if (!other.getPageToken().isEmpty()) { + pageToken_ = other.pageToken_; + bitField0_ |= 0x00000004; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + topic_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + pageSize_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 26: + { + pageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object topic_ = ""; + + /** + * + * + *
+     * Required. The name of the topic that snapshots are attached to.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the topic that snapshots are attached to.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the topic that snapshots are attached to.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The topic to set. + * @return This builder for chaining. + */ + public Builder setTopic(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + topic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the topic that snapshots are attached to.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearTopic() { + topic_ = getDefaultInstance().getTopic(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the topic that snapshots are attached to.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for topic to set. + * @return This builder for chaining. + */ + public Builder setTopicBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + topic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private int pageSize_; + + /** + * + * + *
+     * Optional. Maximum number of snapshot names to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + /** + * + * + *
+     * Optional. Maximum number of snapshot names to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The pageSize to set. + * @return This builder for chaining. + */ + public Builder setPageSize(int value) { + + pageSize_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Maximum number of snapshot names to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPageSize() { + bitField0_ = (bitField0_ & ~0x00000002); + pageSize_ = 0; + onChanged(); + return this; + } + + private java.lang.Object pageToken_ = ""; + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicSnapshotsResponse`;
+     * indicates that this is a continuation of a prior `ListTopicSnapshots` call,
+     * and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicSnapshotsResponse`;
+     * indicates that this is a continuation of a prior `ListTopicSnapshots` call,
+     * and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicSnapshotsResponse`;
+     * indicates that this is a continuation of a prior `ListTopicSnapshots` call,
+     * and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + pageToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicSnapshotsResponse`;
+     * indicates that this is a continuation of a prior `ListTopicSnapshots` call,
+     * and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPageToken() { + pageToken_ = getDefaultInstance().getPageToken(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicSnapshotsResponse`;
+     * indicates that this is a continuation of a prior `ListTopicSnapshots` call,
+     * and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + pageToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListTopicSnapshotsRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListTopicSnapshotsRequest) + private static final com.google.pubsub.v1.ListTopicSnapshotsRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListTopicSnapshotsRequest(); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListTopicSnapshotsRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSnapshotsRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSnapshotsRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSnapshotsRequestOrBuilder.java new file mode 100644 index 000000000000..bdddb1f3d5fe --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSnapshotsRequestOrBuilder.java @@ -0,0 +1,103 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListTopicSnapshotsRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListTopicSnapshotsRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the topic that snapshots are attached to.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + java.lang.String getTopic(); + + /** + * + * + *
+   * Required. The name of the topic that snapshots are attached to.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + com.google.protobuf.ByteString getTopicBytes(); + + /** + * + * + *
+   * Optional. Maximum number of snapshot names to return.
+   * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + int getPageSize(); + + /** + * + * + *
+   * Optional. The value returned by the last `ListTopicSnapshotsResponse`;
+   * indicates that this is a continuation of a prior `ListTopicSnapshots` call,
+   * and that the system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + java.lang.String getPageToken(); + + /** + * + * + *
+   * Optional. The value returned by the last `ListTopicSnapshotsResponse`;
+   * indicates that this is a continuation of a prior `ListTopicSnapshots` call,
+   * and that the system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + com.google.protobuf.ByteString getPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSnapshotsResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSnapshotsResponse.java new file mode 100644 index 000000000000..5f7ba185069b --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSnapshotsResponse.java @@ -0,0 +1,926 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the `ListTopicSnapshots` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListTopicSnapshotsResponse} + */ +@com.google.protobuf.Generated +public final class ListTopicSnapshotsResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListTopicSnapshotsResponse) + ListTopicSnapshotsResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListTopicSnapshotsResponse"); + } + + // Use ListTopicSnapshotsResponse.newBuilder() to construct. + private ListTopicSnapshotsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListTopicSnapshotsResponse() { + snapshots_ = com.google.protobuf.LazyStringArrayList.emptyList(); + nextPageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSnapshotsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSnapshotsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListTopicSnapshotsResponse.class, + com.google.pubsub.v1.ListTopicSnapshotsResponse.Builder.class); + } + + public static final int SNAPSHOTS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList snapshots_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+   * Optional. The names of the snapshots that match the request.
+   * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return A list containing the snapshots. + */ + public com.google.protobuf.ProtocolStringList getSnapshotsList() { + return snapshots_; + } + + /** + * + * + *
+   * Optional. The names of the snapshots that match the request.
+   * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The count of snapshots. + */ + public int getSnapshotsCount() { + return snapshots_.size(); + } + + /** + * + * + *
+   * Optional. The names of the snapshots that match the request.
+   * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index of the element to return. + * @return The snapshots at the given index. + */ + public java.lang.String getSnapshots(int index) { + return snapshots_.get(index); + } + + /** + * + * + *
+   * Optional. The names of the snapshots that match the request.
+   * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index of the value to return. + * @return The bytes of the snapshots at the given index. + */ + public com.google.protobuf.ByteString getSnapshotsBytes(int index) { + return snapshots_.getByteString(index); + } + + public static final int NEXT_PAGE_TOKEN_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more snapshots that
+   * match the request; this value should be passed in a new
+   * `ListTopicSnapshotsRequest` to get more snapshots.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + @java.lang.Override + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more snapshots that
+   * match the request; this value should be passed in a new
+   * `ListTopicSnapshotsRequest` to get more snapshots.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < snapshots_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, snapshots_.getRaw(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int i = 0; i < snapshots_.size(); i++) { + dataSize += computeStringSizeNoTag(snapshots_.getRaw(i)); + } + size += dataSize; + size += 1 * getSnapshotsList().size(); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListTopicSnapshotsResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListTopicSnapshotsResponse other = + (com.google.pubsub.v1.ListTopicSnapshotsResponse) obj; + + if (!getSnapshotsList().equals(other.getSnapshotsList())) return false; + if (!getNextPageToken().equals(other.getNextPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getSnapshotsCount() > 0) { + hash = (37 * hash) + SNAPSHOTS_FIELD_NUMBER; + hash = (53 * hash) + getSnapshotsList().hashCode(); + } + hash = (37 * hash) + NEXT_PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getNextPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListTopicSnapshotsResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListTopicSnapshotsResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the `ListTopicSnapshots` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListTopicSnapshotsResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListTopicSnapshotsResponse) + com.google.pubsub.v1.ListTopicSnapshotsResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSnapshotsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSnapshotsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListTopicSnapshotsResponse.class, + com.google.pubsub.v1.ListTopicSnapshotsResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListTopicSnapshotsResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + snapshots_ = com.google.protobuf.LazyStringArrayList.emptyList(); + nextPageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSnapshotsResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSnapshotsResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.ListTopicSnapshotsResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSnapshotsResponse build() { + com.google.pubsub.v1.ListTopicSnapshotsResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSnapshotsResponse buildPartial() { + com.google.pubsub.v1.ListTopicSnapshotsResponse result = + new com.google.pubsub.v1.ListTopicSnapshotsResponse(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ListTopicSnapshotsResponse result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + snapshots_.makeImmutable(); + result.snapshots_ = snapshots_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.nextPageToken_ = nextPageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListTopicSnapshotsResponse) { + return mergeFrom((com.google.pubsub.v1.ListTopicSnapshotsResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListTopicSnapshotsResponse other) { + if (other == com.google.pubsub.v1.ListTopicSnapshotsResponse.getDefaultInstance()) + return this; + if (!other.snapshots_.isEmpty()) { + if (snapshots_.isEmpty()) { + snapshots_ = other.snapshots_; + bitField0_ |= 0x00000001; + } else { + ensureSnapshotsIsMutable(); + snapshots_.addAll(other.snapshots_); + } + onChanged(); + } + if (!other.getNextPageToken().isEmpty()) { + nextPageToken_ = other.nextPageToken_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureSnapshotsIsMutable(); + snapshots_.add(s); + break; + } // case 10 + case 18: + { + nextPageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.LazyStringArrayList snapshots_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureSnapshotsIsMutable() { + if (!snapshots_.isModifiable()) { + snapshots_ = new com.google.protobuf.LazyStringArrayList(snapshots_); + } + bitField0_ |= 0x00000001; + } + + /** + * + * + *
+     * Optional. The names of the snapshots that match the request.
+     * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return A list containing the snapshots. + */ + public com.google.protobuf.ProtocolStringList getSnapshotsList() { + snapshots_.makeImmutable(); + return snapshots_; + } + + /** + * + * + *
+     * Optional. The names of the snapshots that match the request.
+     * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The count of snapshots. + */ + public int getSnapshotsCount() { + return snapshots_.size(); + } + + /** + * + * + *
+     * Optional. The names of the snapshots that match the request.
+     * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index of the element to return. + * @return The snapshots at the given index. + */ + public java.lang.String getSnapshots(int index) { + return snapshots_.get(index); + } + + /** + * + * + *
+     * Optional. The names of the snapshots that match the request.
+     * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index of the value to return. + * @return The bytes of the snapshots at the given index. + */ + public com.google.protobuf.ByteString getSnapshotsBytes(int index) { + return snapshots_.getByteString(index); + } + + /** + * + * + *
+     * Optional. The names of the snapshots that match the request.
+     * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index to set the value at. + * @param value The snapshots to set. + * @return This builder for chaining. + */ + public Builder setSnapshots(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureSnapshotsIsMutable(); + snapshots_.set(index, value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The names of the snapshots that match the request.
+     * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The snapshots to add. + * @return This builder for chaining. + */ + public Builder addSnapshots(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureSnapshotsIsMutable(); + snapshots_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The names of the snapshots that match the request.
+     * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param values The snapshots to add. + * @return This builder for chaining. + */ + public Builder addAllSnapshots(java.lang.Iterable values) { + ensureSnapshotsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, snapshots_); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The names of the snapshots that match the request.
+     * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSnapshots() { + snapshots_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + ; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The names of the snapshots that match the request.
+     * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes of the snapshots to add. + * @return This builder for chaining. + */ + public Builder addSnapshotsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureSnapshotsIsMutable(); + snapshots_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more snapshots that
+     * match the request; this value should be passed in a new
+     * `ListTopicSnapshotsRequest` to get more snapshots.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more snapshots that
+     * match the request; this value should be passed in a new
+     * `ListTopicSnapshotsRequest` to get more snapshots.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more snapshots that
+     * match the request; this value should be passed in a new
+     * `ListTopicSnapshotsRequest` to get more snapshots.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more snapshots that
+     * match the request; this value should be passed in a new
+     * `ListTopicSnapshotsRequest` to get more snapshots.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearNextPageToken() { + nextPageToken_ = getDefaultInstance().getNextPageToken(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more snapshots that
+     * match the request; this value should be passed in a new
+     * `ListTopicSnapshotsRequest` to get more snapshots.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListTopicSnapshotsResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListTopicSnapshotsResponse) + private static final com.google.pubsub.v1.ListTopicSnapshotsResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListTopicSnapshotsResponse(); + } + + public static com.google.pubsub.v1.ListTopicSnapshotsResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListTopicSnapshotsResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSnapshotsResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSnapshotsResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSnapshotsResponseOrBuilder.java new file mode 100644 index 000000000000..25382f4f19a0 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSnapshotsResponseOrBuilder.java @@ -0,0 +1,120 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListTopicSnapshotsResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListTopicSnapshotsResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The names of the snapshots that match the request.
+   * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return A list containing the snapshots. + */ + java.util.List getSnapshotsList(); + + /** + * + * + *
+   * Optional. The names of the snapshots that match the request.
+   * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The count of snapshots. + */ + int getSnapshotsCount(); + + /** + * + * + *
+   * Optional. The names of the snapshots that match the request.
+   * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index of the element to return. + * @return The snapshots at the given index. + */ + java.lang.String getSnapshots(int index); + + /** + * + * + *
+   * Optional. The names of the snapshots that match the request.
+   * 
+ * + * + * repeated string snapshots = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index of the value to return. + * @return The bytes of the snapshots at the given index. + */ + com.google.protobuf.ByteString getSnapshotsBytes(int index); + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more snapshots that
+   * match the request; this value should be passed in a new
+   * `ListTopicSnapshotsRequest` to get more snapshots.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + java.lang.String getNextPageToken(); + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more snapshots that
+   * match the request; this value should be passed in a new
+   * `ListTopicSnapshotsRequest` to get more snapshots.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + com.google.protobuf.ByteString getNextPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSubscriptionsRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSubscriptionsRequest.java new file mode 100644 index 000000000000..be6c24a9955a --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSubscriptionsRequest.java @@ -0,0 +1,917 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `ListTopicSubscriptions` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListTopicSubscriptionsRequest} + */ +@com.google.protobuf.Generated +public final class ListTopicSubscriptionsRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListTopicSubscriptionsRequest) + ListTopicSubscriptionsRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListTopicSubscriptionsRequest"); + } + + // Use ListTopicSubscriptionsRequest.newBuilder() to construct. + private ListTopicSubscriptionsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListTopicSubscriptionsRequest() { + topic_ = ""; + pageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSubscriptionsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSubscriptionsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListTopicSubscriptionsRequest.class, + com.google.pubsub.v1.ListTopicSubscriptionsRequest.Builder.class); + } + + public static final int TOPIC_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object topic_ = ""; + + /** + * + * + *
+   * Required. The name of the topic that subscriptions are attached to.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + @java.lang.Override + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the topic that subscriptions are attached to.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PAGE_SIZE_FIELD_NUMBER = 2; + private int pageSize_ = 0; + + /** + * + * + *
+   * Optional. Maximum number of subscription names to return.
+   * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + public static final int PAGE_TOKEN_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object pageToken_ = ""; + + /** + * + * + *
+   * Optional. The value returned by the last `ListTopicSubscriptionsResponse`;
+   * indicates that this is a continuation of a prior `ListTopicSubscriptions`
+   * call, and that the system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + @java.lang.Override + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The value returned by the last `ListTopicSubscriptionsResponse`;
+   * indicates that this is a continuation of a prior `ListTopicSubscriptions`
+   * call, and that the system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, topic_); + } + if (pageSize_ != 0) { + output.writeInt32(2, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, pageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, topic_); + } + if (pageSize_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, pageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListTopicSubscriptionsRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListTopicSubscriptionsRequest other = + (com.google.pubsub.v1.ListTopicSubscriptionsRequest) obj; + + if (!getTopic().equals(other.getTopic())) return false; + if (getPageSize() != other.getPageSize()) return false; + if (!getPageToken().equals(other.getPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getTopic().hashCode(); + hash = (37 * hash) + PAGE_SIZE_FIELD_NUMBER; + hash = (53 * hash) + getPageSize(); + hash = (37 * hash) + PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListTopicSubscriptionsRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `ListTopicSubscriptions` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListTopicSubscriptionsRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListTopicSubscriptionsRequest) + com.google.pubsub.v1.ListTopicSubscriptionsRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSubscriptionsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSubscriptionsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListTopicSubscriptionsRequest.class, + com.google.pubsub.v1.ListTopicSubscriptionsRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListTopicSubscriptionsRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + topic_ = ""; + pageSize_ = 0; + pageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSubscriptionsRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSubscriptionsRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.ListTopicSubscriptionsRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSubscriptionsRequest build() { + com.google.pubsub.v1.ListTopicSubscriptionsRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSubscriptionsRequest buildPartial() { + com.google.pubsub.v1.ListTopicSubscriptionsRequest result = + new com.google.pubsub.v1.ListTopicSubscriptionsRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ListTopicSubscriptionsRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.topic_ = topic_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.pageSize_ = pageSize_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.pageToken_ = pageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListTopicSubscriptionsRequest) { + return mergeFrom((com.google.pubsub.v1.ListTopicSubscriptionsRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListTopicSubscriptionsRequest other) { + if (other == com.google.pubsub.v1.ListTopicSubscriptionsRequest.getDefaultInstance()) + return this; + if (!other.getTopic().isEmpty()) { + topic_ = other.topic_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.getPageSize() != 0) { + setPageSize(other.getPageSize()); + } + if (!other.getPageToken().isEmpty()) { + pageToken_ = other.pageToken_; + bitField0_ |= 0x00000004; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + topic_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + pageSize_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 26: + { + pageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object topic_ = ""; + + /** + * + * + *
+     * Required. The name of the topic that subscriptions are attached to.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the topic that subscriptions are attached to.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the topic that subscriptions are attached to.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The topic to set. + * @return This builder for chaining. + */ + public Builder setTopic(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + topic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the topic that subscriptions are attached to.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearTopic() { + topic_ = getDefaultInstance().getTopic(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the topic that subscriptions are attached to.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for topic to set. + * @return This builder for chaining. + */ + public Builder setTopicBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + topic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private int pageSize_; + + /** + * + * + *
+     * Optional. Maximum number of subscription names to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + /** + * + * + *
+     * Optional. Maximum number of subscription names to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The pageSize to set. + * @return This builder for chaining. + */ + public Builder setPageSize(int value) { + + pageSize_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Maximum number of subscription names to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPageSize() { + bitField0_ = (bitField0_ & ~0x00000002); + pageSize_ = 0; + onChanged(); + return this; + } + + private java.lang.Object pageToken_ = ""; + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicSubscriptionsResponse`;
+     * indicates that this is a continuation of a prior `ListTopicSubscriptions`
+     * call, and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicSubscriptionsResponse`;
+     * indicates that this is a continuation of a prior `ListTopicSubscriptions`
+     * call, and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicSubscriptionsResponse`;
+     * indicates that this is a continuation of a prior `ListTopicSubscriptions`
+     * call, and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + pageToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicSubscriptionsResponse`;
+     * indicates that this is a continuation of a prior `ListTopicSubscriptions`
+     * call, and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPageToken() { + pageToken_ = getDefaultInstance().getPageToken(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicSubscriptionsResponse`;
+     * indicates that this is a continuation of a prior `ListTopicSubscriptions`
+     * call, and that the system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + pageToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListTopicSubscriptionsRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListTopicSubscriptionsRequest) + private static final com.google.pubsub.v1.ListTopicSubscriptionsRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListTopicSubscriptionsRequest(); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListTopicSubscriptionsRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSubscriptionsRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSubscriptionsRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSubscriptionsRequestOrBuilder.java new file mode 100644 index 000000000000..07a1f61240a8 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSubscriptionsRequestOrBuilder.java @@ -0,0 +1,103 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListTopicSubscriptionsRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListTopicSubscriptionsRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the topic that subscriptions are attached to.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + java.lang.String getTopic(); + + /** + * + * + *
+   * Required. The name of the topic that subscriptions are attached to.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + com.google.protobuf.ByteString getTopicBytes(); + + /** + * + * + *
+   * Optional. Maximum number of subscription names to return.
+   * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + int getPageSize(); + + /** + * + * + *
+   * Optional. The value returned by the last `ListTopicSubscriptionsResponse`;
+   * indicates that this is a continuation of a prior `ListTopicSubscriptions`
+   * call, and that the system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + java.lang.String getPageToken(); + + /** + * + * + *
+   * Optional. The value returned by the last `ListTopicSubscriptionsResponse`;
+   * indicates that this is a continuation of a prior `ListTopicSubscriptions`
+   * call, and that the system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + com.google.protobuf.ByteString getPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSubscriptionsResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSubscriptionsResponse.java new file mode 100644 index 000000000000..ed115a4c5420 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSubscriptionsResponse.java @@ -0,0 +1,939 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the `ListTopicSubscriptions` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListTopicSubscriptionsResponse} + */ +@com.google.protobuf.Generated +public final class ListTopicSubscriptionsResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListTopicSubscriptionsResponse) + ListTopicSubscriptionsResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListTopicSubscriptionsResponse"); + } + + // Use ListTopicSubscriptionsResponse.newBuilder() to construct. + private ListTopicSubscriptionsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListTopicSubscriptionsResponse() { + subscriptions_ = com.google.protobuf.LazyStringArrayList.emptyList(); + nextPageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSubscriptionsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSubscriptionsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListTopicSubscriptionsResponse.class, + com.google.pubsub.v1.ListTopicSubscriptionsResponse.Builder.class); + } + + public static final int SUBSCRIPTIONS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList subscriptions_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+   * Optional. The names of subscriptions attached to the topic specified in the
+   * request.
+   * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return A list containing the subscriptions. + */ + public com.google.protobuf.ProtocolStringList getSubscriptionsList() { + return subscriptions_; + } + + /** + * + * + *
+   * Optional. The names of subscriptions attached to the topic specified in the
+   * request.
+   * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The count of subscriptions. + */ + public int getSubscriptionsCount() { + return subscriptions_.size(); + } + + /** + * + * + *
+   * Optional. The names of subscriptions attached to the topic specified in the
+   * request.
+   * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index of the element to return. + * @return The subscriptions at the given index. + */ + public java.lang.String getSubscriptions(int index) { + return subscriptions_.get(index); + } + + /** + * + * + *
+   * Optional. The names of subscriptions attached to the topic specified in the
+   * request.
+   * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index of the value to return. + * @return The bytes of the subscriptions at the given index. + */ + public com.google.protobuf.ByteString getSubscriptionsBytes(int index) { + return subscriptions_.getByteString(index); + } + + public static final int NEXT_PAGE_TOKEN_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more subscriptions that
+   * match the request; this value should be passed in a new
+   * `ListTopicSubscriptionsRequest` to get more subscriptions.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + @java.lang.Override + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more subscriptions that
+   * match the request; this value should be passed in a new
+   * `ListTopicSubscriptionsRequest` to get more subscriptions.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < subscriptions_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, subscriptions_.getRaw(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int i = 0; i < subscriptions_.size(); i++) { + dataSize += computeStringSizeNoTag(subscriptions_.getRaw(i)); + } + size += dataSize; + size += 1 * getSubscriptionsList().size(); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListTopicSubscriptionsResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListTopicSubscriptionsResponse other = + (com.google.pubsub.v1.ListTopicSubscriptionsResponse) obj; + + if (!getSubscriptionsList().equals(other.getSubscriptionsList())) return false; + if (!getNextPageToken().equals(other.getNextPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getSubscriptionsCount() > 0) { + hash = (37 * hash) + SUBSCRIPTIONS_FIELD_NUMBER; + hash = (53 * hash) + getSubscriptionsList().hashCode(); + } + hash = (37 * hash) + NEXT_PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getNextPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsResponse parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsResponse parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListTopicSubscriptionsResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the `ListTopicSubscriptions` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListTopicSubscriptionsResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListTopicSubscriptionsResponse) + com.google.pubsub.v1.ListTopicSubscriptionsResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSubscriptionsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSubscriptionsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListTopicSubscriptionsResponse.class, + com.google.pubsub.v1.ListTopicSubscriptionsResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListTopicSubscriptionsResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + subscriptions_ = com.google.protobuf.LazyStringArrayList.emptyList(); + nextPageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicSubscriptionsResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSubscriptionsResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.ListTopicSubscriptionsResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSubscriptionsResponse build() { + com.google.pubsub.v1.ListTopicSubscriptionsResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSubscriptionsResponse buildPartial() { + com.google.pubsub.v1.ListTopicSubscriptionsResponse result = + new com.google.pubsub.v1.ListTopicSubscriptionsResponse(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ListTopicSubscriptionsResponse result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + subscriptions_.makeImmutable(); + result.subscriptions_ = subscriptions_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.nextPageToken_ = nextPageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListTopicSubscriptionsResponse) { + return mergeFrom((com.google.pubsub.v1.ListTopicSubscriptionsResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListTopicSubscriptionsResponse other) { + if (other == com.google.pubsub.v1.ListTopicSubscriptionsResponse.getDefaultInstance()) + return this; + if (!other.subscriptions_.isEmpty()) { + if (subscriptions_.isEmpty()) { + subscriptions_ = other.subscriptions_; + bitField0_ |= 0x00000001; + } else { + ensureSubscriptionsIsMutable(); + subscriptions_.addAll(other.subscriptions_); + } + onChanged(); + } + if (!other.getNextPageToken().isEmpty()) { + nextPageToken_ = other.nextPageToken_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureSubscriptionsIsMutable(); + subscriptions_.add(s); + break; + } // case 10 + case 18: + { + nextPageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.LazyStringArrayList subscriptions_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureSubscriptionsIsMutable() { + if (!subscriptions_.isModifiable()) { + subscriptions_ = new com.google.protobuf.LazyStringArrayList(subscriptions_); + } + bitField0_ |= 0x00000001; + } + + /** + * + * + *
+     * Optional. The names of subscriptions attached to the topic specified in the
+     * request.
+     * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return A list containing the subscriptions. + */ + public com.google.protobuf.ProtocolStringList getSubscriptionsList() { + subscriptions_.makeImmutable(); + return subscriptions_; + } + + /** + * + * + *
+     * Optional. The names of subscriptions attached to the topic specified in the
+     * request.
+     * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The count of subscriptions. + */ + public int getSubscriptionsCount() { + return subscriptions_.size(); + } + + /** + * + * + *
+     * Optional. The names of subscriptions attached to the topic specified in the
+     * request.
+     * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index of the element to return. + * @return The subscriptions at the given index. + */ + public java.lang.String getSubscriptions(int index) { + return subscriptions_.get(index); + } + + /** + * + * + *
+     * Optional. The names of subscriptions attached to the topic specified in the
+     * request.
+     * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index of the value to return. + * @return The bytes of the subscriptions at the given index. + */ + public com.google.protobuf.ByteString getSubscriptionsBytes(int index) { + return subscriptions_.getByteString(index); + } + + /** + * + * + *
+     * Optional. The names of subscriptions attached to the topic specified in the
+     * request.
+     * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index to set the value at. + * @param value The subscriptions to set. + * @return This builder for chaining. + */ + public Builder setSubscriptions(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubscriptionsIsMutable(); + subscriptions_.set(index, value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The names of subscriptions attached to the topic specified in the
+     * request.
+     * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The subscriptions to add. + * @return This builder for chaining. + */ + public Builder addSubscriptions(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureSubscriptionsIsMutable(); + subscriptions_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The names of subscriptions attached to the topic specified in the
+     * request.
+     * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param values The subscriptions to add. + * @return This builder for chaining. + */ + public Builder addAllSubscriptions(java.lang.Iterable values) { + ensureSubscriptionsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, subscriptions_); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The names of subscriptions attached to the topic specified in the
+     * request.
+     * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSubscriptions() { + subscriptions_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + ; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The names of subscriptions attached to the topic specified in the
+     * request.
+     * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes of the subscriptions to add. + * @return This builder for chaining. + */ + public Builder addSubscriptionsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureSubscriptionsIsMutable(); + subscriptions_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more subscriptions that
+     * match the request; this value should be passed in a new
+     * `ListTopicSubscriptionsRequest` to get more subscriptions.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more subscriptions that
+     * match the request; this value should be passed in a new
+     * `ListTopicSubscriptionsRequest` to get more subscriptions.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more subscriptions that
+     * match the request; this value should be passed in a new
+     * `ListTopicSubscriptionsRequest` to get more subscriptions.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more subscriptions that
+     * match the request; this value should be passed in a new
+     * `ListTopicSubscriptionsRequest` to get more subscriptions.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearNextPageToken() { + nextPageToken_ = getDefaultInstance().getNextPageToken(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more subscriptions that
+     * match the request; this value should be passed in a new
+     * `ListTopicSubscriptionsRequest` to get more subscriptions.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListTopicSubscriptionsResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListTopicSubscriptionsResponse) + private static final com.google.pubsub.v1.ListTopicSubscriptionsResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListTopicSubscriptionsResponse(); + } + + public static com.google.pubsub.v1.ListTopicSubscriptionsResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListTopicSubscriptionsResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicSubscriptionsResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSubscriptionsResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSubscriptionsResponseOrBuilder.java new file mode 100644 index 000000000000..559bb08c2663 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicSubscriptionsResponseOrBuilder.java @@ -0,0 +1,124 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListTopicSubscriptionsResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListTopicSubscriptionsResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The names of subscriptions attached to the topic specified in the
+   * request.
+   * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return A list containing the subscriptions. + */ + java.util.List getSubscriptionsList(); + + /** + * + * + *
+   * Optional. The names of subscriptions attached to the topic specified in the
+   * request.
+   * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The count of subscriptions. + */ + int getSubscriptionsCount(); + + /** + * + * + *
+   * Optional. The names of subscriptions attached to the topic specified in the
+   * request.
+   * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index of the element to return. + * @return The subscriptions at the given index. + */ + java.lang.String getSubscriptions(int index); + + /** + * + * + *
+   * Optional. The names of subscriptions attached to the topic specified in the
+   * request.
+   * 
+ * + * + * repeated string subscriptions = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param index The index of the value to return. + * @return The bytes of the subscriptions at the given index. + */ + com.google.protobuf.ByteString getSubscriptionsBytes(int index); + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more subscriptions that
+   * match the request; this value should be passed in a new
+   * `ListTopicSubscriptionsRequest` to get more subscriptions.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + java.lang.String getNextPageToken(); + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more subscriptions that
+   * match the request; this value should be passed in a new
+   * `ListTopicSubscriptionsRequest` to get more subscriptions.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + com.google.protobuf.ByteString getNextPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicsRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicsRequest.java new file mode 100644 index 000000000000..5db5c1454f72 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicsRequest.java @@ -0,0 +1,915 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `ListTopics` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListTopicsRequest} + */ +@com.google.protobuf.Generated +public final class ListTopicsRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListTopicsRequest) + ListTopicsRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListTopicsRequest"); + } + + // Use ListTopicsRequest.newBuilder() to construct. + private ListTopicsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListTopicsRequest() { + project_ = ""; + pageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListTopicsRequest.class, + com.google.pubsub.v1.ListTopicsRequest.Builder.class); + } + + public static final int PROJECT_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object project_ = ""; + + /** + * + * + *
+   * Required. The name of the project in which to list topics.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The project. + */ + @java.lang.Override + public java.lang.String getProject() { + java.lang.Object ref = project_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + project_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the project in which to list topics.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for project. + */ + @java.lang.Override + public com.google.protobuf.ByteString getProjectBytes() { + java.lang.Object ref = project_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + project_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PAGE_SIZE_FIELD_NUMBER = 2; + private int pageSize_ = 0; + + /** + * + * + *
+   * Optional. Maximum number of topics to return.
+   * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + public static final int PAGE_TOKEN_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object pageToken_ = ""; + + /** + * + * + *
+   * Optional. The value returned by the last `ListTopicsResponse`; indicates
+   * that this is a continuation of a prior `ListTopics` call, and that the
+   * system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + @java.lang.Override + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The value returned by the last `ListTopicsResponse`; indicates
+   * that this is a continuation of a prior `ListTopics` call, and that the
+   * system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(project_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, project_); + } + if (pageSize_ != 0) { + output.writeInt32(2, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, pageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(project_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, project_); + } + if (pageSize_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, pageSize_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, pageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListTopicsRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListTopicsRequest other = (com.google.pubsub.v1.ListTopicsRequest) obj; + + if (!getProject().equals(other.getProject())) return false; + if (getPageSize() != other.getPageSize()) return false; + if (!getPageToken().equals(other.getPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PROJECT_FIELD_NUMBER; + hash = (53 * hash) + getProject().hashCode(); + hash = (37 * hash) + PAGE_SIZE_FIELD_NUMBER; + hash = (53 * hash) + getPageSize(); + hash = (37 * hash) + PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListTopicsRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicsRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicsRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicsRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicsRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicsRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicsRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicsRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicsRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicsRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicsRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicsRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListTopicsRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `ListTopics` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListTopicsRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListTopicsRequest) + com.google.pubsub.v1.ListTopicsRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListTopicsRequest.class, + com.google.pubsub.v1.ListTopicsRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListTopicsRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + project_ = ""; + pageSize_ = 0; + pageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicsRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicsRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.ListTopicsRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicsRequest build() { + com.google.pubsub.v1.ListTopicsRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicsRequest buildPartial() { + com.google.pubsub.v1.ListTopicsRequest result = + new com.google.pubsub.v1.ListTopicsRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ListTopicsRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.project_ = project_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.pageSize_ = pageSize_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.pageToken_ = pageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListTopicsRequest) { + return mergeFrom((com.google.pubsub.v1.ListTopicsRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListTopicsRequest other) { + if (other == com.google.pubsub.v1.ListTopicsRequest.getDefaultInstance()) return this; + if (!other.getProject().isEmpty()) { + project_ = other.project_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.getPageSize() != 0) { + setPageSize(other.getPageSize()); + } + if (!other.getPageToken().isEmpty()) { + pageToken_ = other.pageToken_; + bitField0_ |= 0x00000004; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + project_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + pageSize_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 26: + { + pageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object project_ = ""; + + /** + * + * + *
+     * Required. The name of the project in which to list topics.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The project. + */ + public java.lang.String getProject() { + java.lang.Object ref = project_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + project_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to list topics.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for project. + */ + public com.google.protobuf.ByteString getProjectBytes() { + java.lang.Object ref = project_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + project_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to list topics.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The project to set. + * @return This builder for chaining. + */ + public Builder setProject(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + project_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to list topics.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearProject() { + project_ = getDefaultInstance().getProject(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to list topics.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for project to set. + * @return This builder for chaining. + */ + public Builder setProjectBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + project_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private int pageSize_; + + /** + * + * + *
+     * Optional. Maximum number of topics to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + @java.lang.Override + public int getPageSize() { + return pageSize_; + } + + /** + * + * + *
+     * Optional. Maximum number of topics to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The pageSize to set. + * @return This builder for chaining. + */ + public Builder setPageSize(int value) { + + pageSize_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Maximum number of topics to return.
+     * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPageSize() { + bitField0_ = (bitField0_ & ~0x00000002); + pageSize_ = 0; + onChanged(); + return this; + } + + private java.lang.Object pageToken_ = ""; + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicsResponse`; indicates
+     * that this is a continuation of a prior `ListTopics` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + public java.lang.String getPageToken() { + java.lang.Object ref = pageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicsResponse`; indicates
+     * that this is a continuation of a prior `ListTopics` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + public com.google.protobuf.ByteString getPageTokenBytes() { + java.lang.Object ref = pageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicsResponse`; indicates
+     * that this is a continuation of a prior `ListTopics` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + pageToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicsResponse`; indicates
+     * that this is a continuation of a prior `ListTopics` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPageToken() { + pageToken_ = getDefaultInstance().getPageToken(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The value returned by the last `ListTopicsResponse`; indicates
+     * that this is a continuation of a prior `ListTopics` call, and that the
+     * system should return the next page of data.
+     * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for pageToken to set. + * @return This builder for chaining. + */ + public Builder setPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + pageToken_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListTopicsRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListTopicsRequest) + private static final com.google.pubsub.v1.ListTopicsRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListTopicsRequest(); + } + + public static com.google.pubsub.v1.ListTopicsRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListTopicsRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicsRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicsRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicsRequestOrBuilder.java new file mode 100644 index 000000000000..2b30c60b8600 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicsRequestOrBuilder.java @@ -0,0 +1,103 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListTopicsRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListTopicsRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the project in which to list topics.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The project. + */ + java.lang.String getProject(); + + /** + * + * + *
+   * Required. The name of the project in which to list topics.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string project = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for project. + */ + com.google.protobuf.ByteString getProjectBytes(); + + /** + * + * + *
+   * Optional. Maximum number of topics to return.
+   * 
+ * + * int32 page_size = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageSize. + */ + int getPageSize(); + + /** + * + * + *
+   * Optional. The value returned by the last `ListTopicsResponse`; indicates
+   * that this is a continuation of a prior `ListTopics` call, and that the
+   * system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pageToken. + */ + java.lang.String getPageToken(); + + /** + * + * + *
+   * Optional. The value returned by the last `ListTopicsResponse`; indicates
+   * that this is a continuation of a prior `ListTopics` call, and that the
+   * system should return the next page of data.
+   * 
+ * + * string page_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pageToken. + */ + com.google.protobuf.ByteString getPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicsResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicsResponse.java new file mode 100644 index 000000000000..832ad62ae9a4 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicsResponse.java @@ -0,0 +1,1130 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the `ListTopics` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ListTopicsResponse} + */ +@com.google.protobuf.Generated +public final class ListTopicsResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ListTopicsResponse) + ListTopicsResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ListTopicsResponse"); + } + + // Use ListTopicsResponse.newBuilder() to construct. + private ListTopicsResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ListTopicsResponse() { + topics_ = java.util.Collections.emptyList(); + nextPageToken_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListTopicsResponse.class, + com.google.pubsub.v1.ListTopicsResponse.Builder.class); + } + + public static final int TOPICS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private java.util.List topics_; + + /** + * + * + *
+   * Optional. The resulting topics.
+   * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List getTopicsList() { + return topics_; + } + + /** + * + * + *
+   * Optional. The resulting topics.
+   * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List getTopicsOrBuilderList() { + return topics_; + } + + /** + * + * + *
+   * Optional. The resulting topics.
+   * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public int getTopicsCount() { + return topics_.size(); + } + + /** + * + * + *
+   * Optional. The resulting topics.
+   * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.Topic getTopics(int index) { + return topics_.get(index); + } + + /** + * + * + *
+   * Optional. The resulting topics.
+   * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.TopicOrBuilder getTopicsOrBuilder(int index) { + return topics_.get(index); + } + + public static final int NEXT_PAGE_TOKEN_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more topics that match
+   * the request; this value should be passed in a new `ListTopicsRequest`.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + @java.lang.Override + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more topics that match
+   * the request; this value should be passed in a new `ListTopicsRequest`.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < topics_.size(); i++) { + output.writeMessage(1, topics_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, nextPageToken_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < topics_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, topics_.get(i)); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(nextPageToken_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, nextPageToken_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ListTopicsResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.ListTopicsResponse other = (com.google.pubsub.v1.ListTopicsResponse) obj; + + if (!getTopicsList().equals(other.getTopicsList())) return false; + if (!getNextPageToken().equals(other.getNextPageToken())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getTopicsCount() > 0) { + hash = (37 * hash) + TOPICS_FIELD_NUMBER; + hash = (53 * hash) + getTopicsList().hashCode(); + } + hash = (37 * hash) + NEXT_PAGE_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getNextPageToken().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ListTopicsResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicsResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicsResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicsResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicsResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ListTopicsResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicsResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicsResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicsResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicsResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ListTopicsResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ListTopicsResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ListTopicsResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the `ListTopics` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ListTopicsResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ListTopicsResponse) + com.google.pubsub.v1.ListTopicsResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicsResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicsResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ListTopicsResponse.class, + com.google.pubsub.v1.ListTopicsResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.ListTopicsResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (topicsBuilder_ == null) { + topics_ = java.util.Collections.emptyList(); + } else { + topics_ = null; + topicsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + nextPageToken_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ListTopicsResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicsResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.ListTopicsResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicsResponse build() { + com.google.pubsub.v1.ListTopicsResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicsResponse buildPartial() { + com.google.pubsub.v1.ListTopicsResponse result = + new com.google.pubsub.v1.ListTopicsResponse(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.pubsub.v1.ListTopicsResponse result) { + if (topicsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + topics_ = java.util.Collections.unmodifiableList(topics_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.topics_ = topics_; + } else { + result.topics_ = topicsBuilder_.build(); + } + } + + private void buildPartial0(com.google.pubsub.v1.ListTopicsResponse result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.nextPageToken_ = nextPageToken_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ListTopicsResponse) { + return mergeFrom((com.google.pubsub.v1.ListTopicsResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ListTopicsResponse other) { + if (other == com.google.pubsub.v1.ListTopicsResponse.getDefaultInstance()) return this; + if (topicsBuilder_ == null) { + if (!other.topics_.isEmpty()) { + if (topics_.isEmpty()) { + topics_ = other.topics_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureTopicsIsMutable(); + topics_.addAll(other.topics_); + } + onChanged(); + } + } else { + if (!other.topics_.isEmpty()) { + if (topicsBuilder_.isEmpty()) { + topicsBuilder_.dispose(); + topicsBuilder_ = null; + topics_ = other.topics_; + bitField0_ = (bitField0_ & ~0x00000001); + topicsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetTopicsFieldBuilder() + : null; + } else { + topicsBuilder_.addAllMessages(other.topics_); + } + } + } + if (!other.getNextPageToken().isEmpty()) { + nextPageToken_ = other.nextPageToken_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + com.google.pubsub.v1.Topic m = + input.readMessage(com.google.pubsub.v1.Topic.parser(), extensionRegistry); + if (topicsBuilder_ == null) { + ensureTopicsIsMutable(); + topics_.add(m); + } else { + topicsBuilder_.addMessage(m); + } + break; + } // case 10 + case 18: + { + nextPageToken_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.util.List topics_ = java.util.Collections.emptyList(); + + private void ensureTopicsIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + topics_ = new java.util.ArrayList(topics_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Topic, + com.google.pubsub.v1.Topic.Builder, + com.google.pubsub.v1.TopicOrBuilder> + topicsBuilder_; + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List getTopicsList() { + if (topicsBuilder_ == null) { + return java.util.Collections.unmodifiableList(topics_); + } else { + return topicsBuilder_.getMessageList(); + } + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public int getTopicsCount() { + if (topicsBuilder_ == null) { + return topics_.size(); + } else { + return topicsBuilder_.getCount(); + } + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.Topic getTopics(int index) { + if (topicsBuilder_ == null) { + return topics_.get(index); + } else { + return topicsBuilder_.getMessage(index); + } + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setTopics(int index, com.google.pubsub.v1.Topic value) { + if (topicsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTopicsIsMutable(); + topics_.set(index, value); + onChanged(); + } else { + topicsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setTopics(int index, com.google.pubsub.v1.Topic.Builder builderForValue) { + if (topicsBuilder_ == null) { + ensureTopicsIsMutable(); + topics_.set(index, builderForValue.build()); + onChanged(); + } else { + topicsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addTopics(com.google.pubsub.v1.Topic value) { + if (topicsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTopicsIsMutable(); + topics_.add(value); + onChanged(); + } else { + topicsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addTopics(int index, com.google.pubsub.v1.Topic value) { + if (topicsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTopicsIsMutable(); + topics_.add(index, value); + onChanged(); + } else { + topicsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addTopics(com.google.pubsub.v1.Topic.Builder builderForValue) { + if (topicsBuilder_ == null) { + ensureTopicsIsMutable(); + topics_.add(builderForValue.build()); + onChanged(); + } else { + topicsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addTopics(int index, com.google.pubsub.v1.Topic.Builder builderForValue) { + if (topicsBuilder_ == null) { + ensureTopicsIsMutable(); + topics_.add(index, builderForValue.build()); + onChanged(); + } else { + topicsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addAllTopics(java.lang.Iterable values) { + if (topicsBuilder_ == null) { + ensureTopicsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, topics_); + onChanged(); + } else { + topicsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearTopics() { + if (topicsBuilder_ == null) { + topics_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + topicsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeTopics(int index) { + if (topicsBuilder_ == null) { + ensureTopicsIsMutable(); + topics_.remove(index); + onChanged(); + } else { + topicsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.Topic.Builder getTopicsBuilder(int index) { + return internalGetTopicsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.TopicOrBuilder getTopicsOrBuilder(int index) { + if (topicsBuilder_ == null) { + return topics_.get(index); + } else { + return topicsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List getTopicsOrBuilderList() { + if (topicsBuilder_ != null) { + return topicsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(topics_); + } + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.Topic.Builder addTopicsBuilder() { + return internalGetTopicsFieldBuilder() + .addBuilder(com.google.pubsub.v1.Topic.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.Topic.Builder addTopicsBuilder(int index) { + return internalGetTopicsFieldBuilder() + .addBuilder(index, com.google.pubsub.v1.Topic.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. The resulting topics.
+     * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List getTopicsBuilderList() { + return internalGetTopicsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Topic, + com.google.pubsub.v1.Topic.Builder, + com.google.pubsub.v1.TopicOrBuilder> + internalGetTopicsFieldBuilder() { + if (topicsBuilder_ == null) { + topicsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.Topic, + com.google.pubsub.v1.Topic.Builder, + com.google.pubsub.v1.TopicOrBuilder>( + topics_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean()); + topics_ = null; + } + return topicsBuilder_; + } + + private java.lang.Object nextPageToken_ = ""; + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more topics that match
+     * the request; this value should be passed in a new `ListTopicsRequest`.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + public java.lang.String getNextPageToken() { + java.lang.Object ref = nextPageToken_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nextPageToken_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more topics that match
+     * the request; this value should be passed in a new `ListTopicsRequest`.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + public com.google.protobuf.ByteString getNextPageTokenBytes() { + java.lang.Object ref = nextPageToken_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + nextPageToken_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more topics that match
+     * the request; this value should be passed in a new `ListTopicsRequest`.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageToken(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more topics that match
+     * the request; this value should be passed in a new `ListTopicsRequest`.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearNextPageToken() { + nextPageToken_ = getDefaultInstance().getNextPageToken(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If not empty, indicates that there may be more topics that match
+     * the request; this value should be passed in a new `ListTopicsRequest`.
+     * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for nextPageToken to set. + * @return This builder for chaining. + */ + public Builder setNextPageTokenBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + nextPageToken_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ListTopicsResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ListTopicsResponse) + private static final com.google.pubsub.v1.ListTopicsResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ListTopicsResponse(); + } + + public static com.google.pubsub.v1.ListTopicsResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListTopicsResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ListTopicsResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicsResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicsResponseOrBuilder.java new file mode 100644 index 000000000000..ff3026965aea --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ListTopicsResponseOrBuilder.java @@ -0,0 +1,116 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ListTopicsResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ListTopicsResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The resulting topics.
+   * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List getTopicsList(); + + /** + * + * + *
+   * Optional. The resulting topics.
+   * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.Topic getTopics(int index); + + /** + * + * + *
+   * Optional. The resulting topics.
+   * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getTopicsCount(); + + /** + * + * + *
+   * Optional. The resulting topics.
+   * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List getTopicsOrBuilderList(); + + /** + * + * + *
+   * Optional. The resulting topics.
+   * 
+ * + * repeated .google.pubsub.v1.Topic topics = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.TopicOrBuilder getTopicsOrBuilder(int index); + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more topics that match
+   * the request; this value should be passed in a new `ListTopicsRequest`.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The nextPageToken. + */ + java.lang.String getNextPageToken(); + + /** + * + * + *
+   * Optional. If not empty, indicates that there may be more topics that match
+   * the request; this value should be passed in a new `ListTopicsRequest`.
+   * 
+ * + * string next_page_token = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for nextPageToken. + */ + com.google.protobuf.ByteString getNextPageTokenBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/MessageStoragePolicy.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/MessageStoragePolicy.java new file mode 100644 index 000000000000..c19f2e154303 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/MessageStoragePolicy.java @@ -0,0 +1,903 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * A policy constraining the storage of messages published to the topic.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.MessageStoragePolicy} + */ +@com.google.protobuf.Generated +public final class MessageStoragePolicy extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.MessageStoragePolicy) + MessageStoragePolicyOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "MessageStoragePolicy"); + } + + // Use MessageStoragePolicy.newBuilder() to construct. + private MessageStoragePolicy(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private MessageStoragePolicy() { + allowedPersistenceRegions_ = com.google.protobuf.LazyStringArrayList.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_MessageStoragePolicy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_MessageStoragePolicy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.MessageStoragePolicy.class, + com.google.pubsub.v1.MessageStoragePolicy.Builder.class); + } + + public static final int ALLOWED_PERSISTENCE_REGIONS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList allowedPersistenceRegions_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+   * Optional. A list of IDs of Google Cloud regions where messages that are
+   * published to the topic may be persisted in storage. Messages published by
+   * publishers running in non-allowed Google Cloud regions (or running outside
+   * of Google Cloud altogether) are routed for storage in one of the allowed
+   * regions. An empty list means that no regions are allowed, and is not a
+   * valid configuration.
+   * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the allowedPersistenceRegions. + */ + public com.google.protobuf.ProtocolStringList getAllowedPersistenceRegionsList() { + return allowedPersistenceRegions_; + } + + /** + * + * + *
+   * Optional. A list of IDs of Google Cloud regions where messages that are
+   * published to the topic may be persisted in storage. Messages published by
+   * publishers running in non-allowed Google Cloud regions (or running outside
+   * of Google Cloud altogether) are routed for storage in one of the allowed
+   * regions. An empty list means that no regions are allowed, and is not a
+   * valid configuration.
+   * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of allowedPersistenceRegions. + */ + public int getAllowedPersistenceRegionsCount() { + return allowedPersistenceRegions_.size(); + } + + /** + * + * + *
+   * Optional. A list of IDs of Google Cloud regions where messages that are
+   * published to the topic may be persisted in storage. Messages published by
+   * publishers running in non-allowed Google Cloud regions (or running outside
+   * of Google Cloud altogether) are routed for storage in one of the allowed
+   * regions. An empty list means that no regions are allowed, and is not a
+   * valid configuration.
+   * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The allowedPersistenceRegions at the given index. + */ + public java.lang.String getAllowedPersistenceRegions(int index) { + return allowedPersistenceRegions_.get(index); + } + + /** + * + * + *
+   * Optional. A list of IDs of Google Cloud regions where messages that are
+   * published to the topic may be persisted in storage. Messages published by
+   * publishers running in non-allowed Google Cloud regions (or running outside
+   * of Google Cloud altogether) are routed for storage in one of the allowed
+   * regions. An empty list means that no regions are allowed, and is not a
+   * valid configuration.
+   * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the value to return. + * @return The bytes of the allowedPersistenceRegions at the given index. + */ + public com.google.protobuf.ByteString getAllowedPersistenceRegionsBytes(int index) { + return allowedPersistenceRegions_.getByteString(index); + } + + public static final int ENFORCE_IN_TRANSIT_FIELD_NUMBER = 2; + private boolean enforceInTransit_ = false; + + /** + * + * + *
+   * Optional. If true, `allowed_persistence_regions` is also used to enforce
+   * in-transit guarantees for messages. That is, Pub/Sub will fail
+   * Publish operations on this topic and subscribe operations
+   * on any subscription attached to this topic in any region that is
+   * not in `allowed_persistence_regions`.
+   * 
+ * + * bool enforce_in_transit = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The enforceInTransit. + */ + @java.lang.Override + public boolean getEnforceInTransit() { + return enforceInTransit_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < allowedPersistenceRegions_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString( + output, 1, allowedPersistenceRegions_.getRaw(i)); + } + if (enforceInTransit_ != false) { + output.writeBool(2, enforceInTransit_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int i = 0; i < allowedPersistenceRegions_.size(); i++) { + dataSize += computeStringSizeNoTag(allowedPersistenceRegions_.getRaw(i)); + } + size += dataSize; + size += 1 * getAllowedPersistenceRegionsList().size(); + } + if (enforceInTransit_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(2, enforceInTransit_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.MessageStoragePolicy)) { + return super.equals(obj); + } + com.google.pubsub.v1.MessageStoragePolicy other = + (com.google.pubsub.v1.MessageStoragePolicy) obj; + + if (!getAllowedPersistenceRegionsList().equals(other.getAllowedPersistenceRegionsList())) + return false; + if (getEnforceInTransit() != other.getEnforceInTransit()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getAllowedPersistenceRegionsCount() > 0) { + hash = (37 * hash) + ALLOWED_PERSISTENCE_REGIONS_FIELD_NUMBER; + hash = (53 * hash) + getAllowedPersistenceRegionsList().hashCode(); + } + hash = (37 * hash) + ENFORCE_IN_TRANSIT_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getEnforceInTransit()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.MessageStoragePolicy parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.MessageStoragePolicy parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.MessageStoragePolicy parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.MessageStoragePolicy parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.MessageStoragePolicy parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.MessageStoragePolicy parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.MessageStoragePolicy parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.MessageStoragePolicy parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.MessageStoragePolicy parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.MessageStoragePolicy parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.MessageStoragePolicy parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.MessageStoragePolicy parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.MessageStoragePolicy prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * A policy constraining the storage of messages published to the topic.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.MessageStoragePolicy} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.MessageStoragePolicy) + com.google.pubsub.v1.MessageStoragePolicyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_MessageStoragePolicy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_MessageStoragePolicy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.MessageStoragePolicy.class, + com.google.pubsub.v1.MessageStoragePolicy.Builder.class); + } + + // Construct using com.google.pubsub.v1.MessageStoragePolicy.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + allowedPersistenceRegions_ = com.google.protobuf.LazyStringArrayList.emptyList(); + enforceInTransit_ = false; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_MessageStoragePolicy_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.MessageStoragePolicy getDefaultInstanceForType() { + return com.google.pubsub.v1.MessageStoragePolicy.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.MessageStoragePolicy build() { + com.google.pubsub.v1.MessageStoragePolicy result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.MessageStoragePolicy buildPartial() { + com.google.pubsub.v1.MessageStoragePolicy result = + new com.google.pubsub.v1.MessageStoragePolicy(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.MessageStoragePolicy result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + allowedPersistenceRegions_.makeImmutable(); + result.allowedPersistenceRegions_ = allowedPersistenceRegions_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.enforceInTransit_ = enforceInTransit_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.MessageStoragePolicy) { + return mergeFrom((com.google.pubsub.v1.MessageStoragePolicy) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.MessageStoragePolicy other) { + if (other == com.google.pubsub.v1.MessageStoragePolicy.getDefaultInstance()) return this; + if (!other.allowedPersistenceRegions_.isEmpty()) { + if (allowedPersistenceRegions_.isEmpty()) { + allowedPersistenceRegions_ = other.allowedPersistenceRegions_; + bitField0_ |= 0x00000001; + } else { + ensureAllowedPersistenceRegionsIsMutable(); + allowedPersistenceRegions_.addAll(other.allowedPersistenceRegions_); + } + onChanged(); + } + if (other.getEnforceInTransit() != false) { + setEnforceInTransit(other.getEnforceInTransit()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureAllowedPersistenceRegionsIsMutable(); + allowedPersistenceRegions_.add(s); + break; + } // case 10 + case 16: + { + enforceInTransit_ = input.readBool(); + bitField0_ |= 0x00000002; + break; + } // case 16 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.LazyStringArrayList allowedPersistenceRegions_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureAllowedPersistenceRegionsIsMutable() { + if (!allowedPersistenceRegions_.isModifiable()) { + allowedPersistenceRegions_ = + new com.google.protobuf.LazyStringArrayList(allowedPersistenceRegions_); + } + bitField0_ |= 0x00000001; + } + + /** + * + * + *
+     * Optional. A list of IDs of Google Cloud regions where messages that are
+     * published to the topic may be persisted in storage. Messages published by
+     * publishers running in non-allowed Google Cloud regions (or running outside
+     * of Google Cloud altogether) are routed for storage in one of the allowed
+     * regions. An empty list means that no regions are allowed, and is not a
+     * valid configuration.
+     * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the allowedPersistenceRegions. + */ + public com.google.protobuf.ProtocolStringList getAllowedPersistenceRegionsList() { + allowedPersistenceRegions_.makeImmutable(); + return allowedPersistenceRegions_; + } + + /** + * + * + *
+     * Optional. A list of IDs of Google Cloud regions where messages that are
+     * published to the topic may be persisted in storage. Messages published by
+     * publishers running in non-allowed Google Cloud regions (or running outside
+     * of Google Cloud altogether) are routed for storage in one of the allowed
+     * regions. An empty list means that no regions are allowed, and is not a
+     * valid configuration.
+     * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of allowedPersistenceRegions. + */ + public int getAllowedPersistenceRegionsCount() { + return allowedPersistenceRegions_.size(); + } + + /** + * + * + *
+     * Optional. A list of IDs of Google Cloud regions where messages that are
+     * published to the topic may be persisted in storage. Messages published by
+     * publishers running in non-allowed Google Cloud regions (or running outside
+     * of Google Cloud altogether) are routed for storage in one of the allowed
+     * regions. An empty list means that no regions are allowed, and is not a
+     * valid configuration.
+     * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The allowedPersistenceRegions at the given index. + */ + public java.lang.String getAllowedPersistenceRegions(int index) { + return allowedPersistenceRegions_.get(index); + } + + /** + * + * + *
+     * Optional. A list of IDs of Google Cloud regions where messages that are
+     * published to the topic may be persisted in storage. Messages published by
+     * publishers running in non-allowed Google Cloud regions (or running outside
+     * of Google Cloud altogether) are routed for storage in one of the allowed
+     * regions. An empty list means that no regions are allowed, and is not a
+     * valid configuration.
+     * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the value to return. + * @return The bytes of the allowedPersistenceRegions at the given index. + */ + public com.google.protobuf.ByteString getAllowedPersistenceRegionsBytes(int index) { + return allowedPersistenceRegions_.getByteString(index); + } + + /** + * + * + *
+     * Optional. A list of IDs of Google Cloud regions where messages that are
+     * published to the topic may be persisted in storage. Messages published by
+     * publishers running in non-allowed Google Cloud regions (or running outside
+     * of Google Cloud altogether) are routed for storage in one of the allowed
+     * regions. An empty list means that no regions are allowed, and is not a
+     * valid configuration.
+     * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index to set the value at. + * @param value The allowedPersistenceRegions to set. + * @return This builder for chaining. + */ + public Builder setAllowedPersistenceRegions(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureAllowedPersistenceRegionsIsMutable(); + allowedPersistenceRegions_.set(index, value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A list of IDs of Google Cloud regions where messages that are
+     * published to the topic may be persisted in storage. Messages published by
+     * publishers running in non-allowed Google Cloud regions (or running outside
+     * of Google Cloud altogether) are routed for storage in one of the allowed
+     * regions. An empty list means that no regions are allowed, and is not a
+     * valid configuration.
+     * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The allowedPersistenceRegions to add. + * @return This builder for chaining. + */ + public Builder addAllowedPersistenceRegions(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureAllowedPersistenceRegionsIsMutable(); + allowedPersistenceRegions_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A list of IDs of Google Cloud regions where messages that are
+     * published to the topic may be persisted in storage. Messages published by
+     * publishers running in non-allowed Google Cloud regions (or running outside
+     * of Google Cloud altogether) are routed for storage in one of the allowed
+     * regions. An empty list means that no regions are allowed, and is not a
+     * valid configuration.
+     * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param values The allowedPersistenceRegions to add. + * @return This builder for chaining. + */ + public Builder addAllAllowedPersistenceRegions(java.lang.Iterable values) { + ensureAllowedPersistenceRegionsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, allowedPersistenceRegions_); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A list of IDs of Google Cloud regions where messages that are
+     * published to the topic may be persisted in storage. Messages published by
+     * publishers running in non-allowed Google Cloud regions (or running outside
+     * of Google Cloud altogether) are routed for storage in one of the allowed
+     * regions. An empty list means that no regions are allowed, and is not a
+     * valid configuration.
+     * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return This builder for chaining. + */ + public Builder clearAllowedPersistenceRegions() { + allowedPersistenceRegions_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + ; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A list of IDs of Google Cloud regions where messages that are
+     * published to the topic may be persisted in storage. Messages published by
+     * publishers running in non-allowed Google Cloud regions (or running outside
+     * of Google Cloud altogether) are routed for storage in one of the allowed
+     * regions. An empty list means that no regions are allowed, and is not a
+     * valid configuration.
+     * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The bytes of the allowedPersistenceRegions to add. + * @return This builder for chaining. + */ + public Builder addAllowedPersistenceRegionsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureAllowedPersistenceRegionsIsMutable(); + allowedPersistenceRegions_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private boolean enforceInTransit_; + + /** + * + * + *
+     * Optional. If true, `allowed_persistence_regions` is also used to enforce
+     * in-transit guarantees for messages. That is, Pub/Sub will fail
+     * Publish operations on this topic and subscribe operations
+     * on any subscription attached to this topic in any region that is
+     * not in `allowed_persistence_regions`.
+     * 
+ * + * bool enforce_in_transit = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The enforceInTransit. + */ + @java.lang.Override + public boolean getEnforceInTransit() { + return enforceInTransit_; + } + + /** + * + * + *
+     * Optional. If true, `allowed_persistence_regions` is also used to enforce
+     * in-transit guarantees for messages. That is, Pub/Sub will fail
+     * Publish operations on this topic and subscribe operations
+     * on any subscription attached to this topic in any region that is
+     * not in `allowed_persistence_regions`.
+     * 
+ * + * bool enforce_in_transit = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The enforceInTransit to set. + * @return This builder for chaining. + */ + public Builder setEnforceInTransit(boolean value) { + + enforceInTransit_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If true, `allowed_persistence_regions` is also used to enforce
+     * in-transit guarantees for messages. That is, Pub/Sub will fail
+     * Publish operations on this topic and subscribe operations
+     * on any subscription attached to this topic in any region that is
+     * not in `allowed_persistence_regions`.
+     * 
+ * + * bool enforce_in_transit = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearEnforceInTransit() { + bitField0_ = (bitField0_ & ~0x00000002); + enforceInTransit_ = false; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.MessageStoragePolicy) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.MessageStoragePolicy) + private static final com.google.pubsub.v1.MessageStoragePolicy DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.MessageStoragePolicy(); + } + + public static com.google.pubsub.v1.MessageStoragePolicy getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public MessageStoragePolicy parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.MessageStoragePolicy getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/MessageStoragePolicyOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/MessageStoragePolicyOrBuilder.java new file mode 100644 index 000000000000..b023c895a446 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/MessageStoragePolicyOrBuilder.java @@ -0,0 +1,127 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface MessageStoragePolicyOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.MessageStoragePolicy) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. A list of IDs of Google Cloud regions where messages that are
+   * published to the topic may be persisted in storage. Messages published by
+   * publishers running in non-allowed Google Cloud regions (or running outside
+   * of Google Cloud altogether) are routed for storage in one of the allowed
+   * regions. An empty list means that no regions are allowed, and is not a
+   * valid configuration.
+   * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the allowedPersistenceRegions. + */ + java.util.List getAllowedPersistenceRegionsList(); + + /** + * + * + *
+   * Optional. A list of IDs of Google Cloud regions where messages that are
+   * published to the topic may be persisted in storage. Messages published by
+   * publishers running in non-allowed Google Cloud regions (or running outside
+   * of Google Cloud altogether) are routed for storage in one of the allowed
+   * regions. An empty list means that no regions are allowed, and is not a
+   * valid configuration.
+   * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of allowedPersistenceRegions. + */ + int getAllowedPersistenceRegionsCount(); + + /** + * + * + *
+   * Optional. A list of IDs of Google Cloud regions where messages that are
+   * published to the topic may be persisted in storage. Messages published by
+   * publishers running in non-allowed Google Cloud regions (or running outside
+   * of Google Cloud altogether) are routed for storage in one of the allowed
+   * regions. An empty list means that no regions are allowed, and is not a
+   * valid configuration.
+   * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The allowedPersistenceRegions at the given index. + */ + java.lang.String getAllowedPersistenceRegions(int index); + + /** + * + * + *
+   * Optional. A list of IDs of Google Cloud regions where messages that are
+   * published to the topic may be persisted in storage. Messages published by
+   * publishers running in non-allowed Google Cloud regions (or running outside
+   * of Google Cloud altogether) are routed for storage in one of the allowed
+   * regions. An empty list means that no regions are allowed, and is not a
+   * valid configuration.
+   * 
+ * + * + * repeated string allowed_persistence_regions = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the value to return. + * @return The bytes of the allowedPersistenceRegions at the given index. + */ + com.google.protobuf.ByteString getAllowedPersistenceRegionsBytes(int index); + + /** + * + * + *
+   * Optional. If true, `allowed_persistence_regions` is also used to enforce
+   * in-transit guarantees for messages. That is, Pub/Sub will fail
+   * Publish operations on this topic and subscribe operations
+   * on any subscription attached to this topic in any region that is
+   * not in `allowed_persistence_regions`.
+   * 
+ * + * bool enforce_in_transit = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The enforceInTransit. + */ + boolean getEnforceInTransit(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/MessageTransform.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/MessageTransform.java new file mode 100644 index 000000000000..64bffd9932bc --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/MessageTransform.java @@ -0,0 +1,1389 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * All supported message transforms types.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.MessageTransform} + */ +@com.google.protobuf.Generated +public final class MessageTransform extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.MessageTransform) + MessageTransformOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "MessageTransform"); + } + + // Use MessageTransform.newBuilder() to construct. + private MessageTransform(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private MessageTransform() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_MessageTransform_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_MessageTransform_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.MessageTransform.class, + com.google.pubsub.v1.MessageTransform.Builder.class); + } + + private int transformCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object transform_; + + public enum TransformCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + JAVASCRIPT_UDF(2), + AI_INFERENCE(6), + TRANSFORM_NOT_SET(0); + private final int value; + + private TransformCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static TransformCase valueOf(int value) { + return forNumber(value); + } + + public static TransformCase forNumber(int value) { + switch (value) { + case 2: + return JAVASCRIPT_UDF; + case 6: + return AI_INFERENCE; + case 0: + return TRANSFORM_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public TransformCase getTransformCase() { + return TransformCase.forNumber(transformCase_); + } + + public static final int JAVASCRIPT_UDF_FIELD_NUMBER = 2; + + /** + * + * + *
+   * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+   * are specified on a resource, each must have a unique `function_name`.
+   * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the javascriptUdf field is set. + */ + @java.lang.Override + public boolean hasJavascriptUdf() { + return transformCase_ == 2; + } + + /** + * + * + *
+   * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+   * are specified on a resource, each must have a unique `function_name`.
+   * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The javascriptUdf. + */ + @java.lang.Override + public com.google.pubsub.v1.JavaScriptUDF getJavascriptUdf() { + if (transformCase_ == 2) { + return (com.google.pubsub.v1.JavaScriptUDF) transform_; + } + return com.google.pubsub.v1.JavaScriptUDF.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+   * are specified on a resource, each must have a unique `function_name`.
+   * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.JavaScriptUDFOrBuilder getJavascriptUdfOrBuilder() { + if (transformCase_ == 2) { + return (com.google.pubsub.v1.JavaScriptUDF) transform_; + } + return com.google.pubsub.v1.JavaScriptUDF.getDefaultInstance(); + } + + public static final int AI_INFERENCE_FIELD_NUMBER = 6; + + /** + * + * + *
+   * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+   * requests built from the Pub/Sub message data and provided parameters will
+   * be sent to.
+   * 
+ * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the aiInference field is set. + */ + @java.lang.Override + public boolean hasAiInference() { + return transformCase_ == 6; + } + + /** + * + * + *
+   * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+   * requests built from the Pub/Sub message data and provided parameters will
+   * be sent to.
+   * 
+ * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The aiInference. + */ + @java.lang.Override + public com.google.pubsub.v1.AIInference getAiInference() { + if (transformCase_ == 6) { + return (com.google.pubsub.v1.AIInference) transform_; + } + return com.google.pubsub.v1.AIInference.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+   * requests built from the Pub/Sub message data and provided parameters will
+   * be sent to.
+   * 
+ * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.AIInferenceOrBuilder getAiInferenceOrBuilder() { + if (transformCase_ == 6) { + return (com.google.pubsub.v1.AIInference) transform_; + } + return com.google.pubsub.v1.AIInference.getDefaultInstance(); + } + + public static final int ENABLED_FIELD_NUMBER = 3; + private boolean enabled_ = false; + + /** + * + * + *
+   * Optional. This field is deprecated, use the `disabled` field to disable
+   * transforms.
+   * 
+ * + * bool enabled = 3 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * @deprecated google.pubsub.v1.MessageTransform.enabled is deprecated. See + * google/pubsub/v1/pubsub.proto;l=857 + * @return The enabled. + */ + @java.lang.Override + @java.lang.Deprecated + public boolean getEnabled() { + return enabled_; + } + + public static final int DISABLED_FIELD_NUMBER = 4; + private boolean disabled_ = false; + + /** + * + * + *
+   * Optional. If true, the transform is disabled and will not be applied to
+   * messages. Defaults to `false`.
+   * 
+ * + * bool disabled = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The disabled. + */ + @java.lang.Override + public boolean getDisabled() { + return disabled_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (transformCase_ == 2) { + output.writeMessage(2, (com.google.pubsub.v1.JavaScriptUDF) transform_); + } + if (enabled_ != false) { + output.writeBool(3, enabled_); + } + if (disabled_ != false) { + output.writeBool(4, disabled_); + } + if (transformCase_ == 6) { + output.writeMessage(6, (com.google.pubsub.v1.AIInference) transform_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (transformCase_ == 2) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 2, (com.google.pubsub.v1.JavaScriptUDF) transform_); + } + if (enabled_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(3, enabled_); + } + if (disabled_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(4, disabled_); + } + if (transformCase_ == 6) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 6, (com.google.pubsub.v1.AIInference) transform_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.MessageTransform)) { + return super.equals(obj); + } + com.google.pubsub.v1.MessageTransform other = (com.google.pubsub.v1.MessageTransform) obj; + + if (getEnabled() != other.getEnabled()) return false; + if (getDisabled() != other.getDisabled()) return false; + if (!getTransformCase().equals(other.getTransformCase())) return false; + switch (transformCase_) { + case 2: + if (!getJavascriptUdf().equals(other.getJavascriptUdf())) return false; + break; + case 6: + if (!getAiInference().equals(other.getAiInference())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ENABLED_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getEnabled()); + hash = (37 * hash) + DISABLED_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getDisabled()); + switch (transformCase_) { + case 2: + hash = (37 * hash) + JAVASCRIPT_UDF_FIELD_NUMBER; + hash = (53 * hash) + getJavascriptUdf().hashCode(); + break; + case 6: + hash = (37 * hash) + AI_INFERENCE_FIELD_NUMBER; + hash = (53 * hash) + getAiInference().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.MessageTransform parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.MessageTransform parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.MessageTransform parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.MessageTransform parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.MessageTransform parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.MessageTransform parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.MessageTransform parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.MessageTransform parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.MessageTransform parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.MessageTransform parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.MessageTransform parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.MessageTransform parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.MessageTransform prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * All supported message transforms types.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.MessageTransform} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.MessageTransform) + com.google.pubsub.v1.MessageTransformOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_MessageTransform_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_MessageTransform_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.MessageTransform.class, + com.google.pubsub.v1.MessageTransform.Builder.class); + } + + // Construct using com.google.pubsub.v1.MessageTransform.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (javascriptUdfBuilder_ != null) { + javascriptUdfBuilder_.clear(); + } + if (aiInferenceBuilder_ != null) { + aiInferenceBuilder_.clear(); + } + enabled_ = false; + disabled_ = false; + transformCase_ = 0; + transform_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_MessageTransform_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.MessageTransform getDefaultInstanceForType() { + return com.google.pubsub.v1.MessageTransform.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.MessageTransform build() { + com.google.pubsub.v1.MessageTransform result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.MessageTransform buildPartial() { + com.google.pubsub.v1.MessageTransform result = + new com.google.pubsub.v1.MessageTransform(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.MessageTransform result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000004) != 0)) { + result.enabled_ = enabled_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.disabled_ = disabled_; + } + } + + private void buildPartialOneofs(com.google.pubsub.v1.MessageTransform result) { + result.transformCase_ = transformCase_; + result.transform_ = this.transform_; + if (transformCase_ == 2 && javascriptUdfBuilder_ != null) { + result.transform_ = javascriptUdfBuilder_.build(); + } + if (transformCase_ == 6 && aiInferenceBuilder_ != null) { + result.transform_ = aiInferenceBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.MessageTransform) { + return mergeFrom((com.google.pubsub.v1.MessageTransform) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.MessageTransform other) { + if (other == com.google.pubsub.v1.MessageTransform.getDefaultInstance()) return this; + if (other.getEnabled() != false) { + setEnabled(other.getEnabled()); + } + if (other.getDisabled() != false) { + setDisabled(other.getDisabled()); + } + switch (other.getTransformCase()) { + case JAVASCRIPT_UDF: + { + mergeJavascriptUdf(other.getJavascriptUdf()); + break; + } + case AI_INFERENCE: + { + mergeAiInference(other.getAiInference()); + break; + } + case TRANSFORM_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 18: + { + input.readMessage( + internalGetJavascriptUdfFieldBuilder().getBuilder(), extensionRegistry); + transformCase_ = 2; + break; + } // case 18 + case 24: + { + enabled_ = input.readBool(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 32: + { + disabled_ = input.readBool(); + bitField0_ |= 0x00000008; + break; + } // case 32 + case 50: + { + input.readMessage( + internalGetAiInferenceFieldBuilder().getBuilder(), extensionRegistry); + transformCase_ = 6; + break; + } // case 50 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int transformCase_ = 0; + private java.lang.Object transform_; + + public TransformCase getTransformCase() { + return TransformCase.forNumber(transformCase_); + } + + public Builder clearTransform() { + transformCase_ = 0; + transform_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.JavaScriptUDF, + com.google.pubsub.v1.JavaScriptUDF.Builder, + com.google.pubsub.v1.JavaScriptUDFOrBuilder> + javascriptUdfBuilder_; + + /** + * + * + *
+     * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+     * are specified on a resource, each must have a unique `function_name`.
+     * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the javascriptUdf field is set. + */ + @java.lang.Override + public boolean hasJavascriptUdf() { + return transformCase_ == 2; + } + + /** + * + * + *
+     * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+     * are specified on a resource, each must have a unique `function_name`.
+     * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The javascriptUdf. + */ + @java.lang.Override + public com.google.pubsub.v1.JavaScriptUDF getJavascriptUdf() { + if (javascriptUdfBuilder_ == null) { + if (transformCase_ == 2) { + return (com.google.pubsub.v1.JavaScriptUDF) transform_; + } + return com.google.pubsub.v1.JavaScriptUDF.getDefaultInstance(); + } else { + if (transformCase_ == 2) { + return javascriptUdfBuilder_.getMessage(); + } + return com.google.pubsub.v1.JavaScriptUDF.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+     * are specified on a resource, each must have a unique `function_name`.
+     * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setJavascriptUdf(com.google.pubsub.v1.JavaScriptUDF value) { + if (javascriptUdfBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + transform_ = value; + onChanged(); + } else { + javascriptUdfBuilder_.setMessage(value); + } + transformCase_ = 2; + return this; + } + + /** + * + * + *
+     * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+     * are specified on a resource, each must have a unique `function_name`.
+     * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setJavascriptUdf(com.google.pubsub.v1.JavaScriptUDF.Builder builderForValue) { + if (javascriptUdfBuilder_ == null) { + transform_ = builderForValue.build(); + onChanged(); + } else { + javascriptUdfBuilder_.setMessage(builderForValue.build()); + } + transformCase_ = 2; + return this; + } + + /** + * + * + *
+     * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+     * are specified on a resource, each must have a unique `function_name`.
+     * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeJavascriptUdf(com.google.pubsub.v1.JavaScriptUDF value) { + if (javascriptUdfBuilder_ == null) { + if (transformCase_ == 2 + && transform_ != com.google.pubsub.v1.JavaScriptUDF.getDefaultInstance()) { + transform_ = + com.google.pubsub.v1.JavaScriptUDF.newBuilder( + (com.google.pubsub.v1.JavaScriptUDF) transform_) + .mergeFrom(value) + .buildPartial(); + } else { + transform_ = value; + } + onChanged(); + } else { + if (transformCase_ == 2) { + javascriptUdfBuilder_.mergeFrom(value); + } else { + javascriptUdfBuilder_.setMessage(value); + } + } + transformCase_ = 2; + return this; + } + + /** + * + * + *
+     * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+     * are specified on a resource, each must have a unique `function_name`.
+     * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearJavascriptUdf() { + if (javascriptUdfBuilder_ == null) { + if (transformCase_ == 2) { + transformCase_ = 0; + transform_ = null; + onChanged(); + } + } else { + if (transformCase_ == 2) { + transformCase_ = 0; + transform_ = null; + } + javascriptUdfBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+     * are specified on a resource, each must have a unique `function_name`.
+     * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.JavaScriptUDF.Builder getJavascriptUdfBuilder() { + return internalGetJavascriptUdfFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+     * are specified on a resource, each must have a unique `function_name`.
+     * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.JavaScriptUDFOrBuilder getJavascriptUdfOrBuilder() { + if ((transformCase_ == 2) && (javascriptUdfBuilder_ != null)) { + return javascriptUdfBuilder_.getMessageOrBuilder(); + } else { + if (transformCase_ == 2) { + return (com.google.pubsub.v1.JavaScriptUDF) transform_; + } + return com.google.pubsub.v1.JavaScriptUDF.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+     * are specified on a resource, each must have a unique `function_name`.
+     * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.JavaScriptUDF, + com.google.pubsub.v1.JavaScriptUDF.Builder, + com.google.pubsub.v1.JavaScriptUDFOrBuilder> + internalGetJavascriptUdfFieldBuilder() { + if (javascriptUdfBuilder_ == null) { + if (!(transformCase_ == 2)) { + transform_ = com.google.pubsub.v1.JavaScriptUDF.getDefaultInstance(); + } + javascriptUdfBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.JavaScriptUDF, + com.google.pubsub.v1.JavaScriptUDF.Builder, + com.google.pubsub.v1.JavaScriptUDFOrBuilder>( + (com.google.pubsub.v1.JavaScriptUDF) transform_, getParentForChildren(), isClean()); + transform_ = null; + } + transformCase_ = 2; + onChanged(); + return javascriptUdfBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.AIInference, + com.google.pubsub.v1.AIInference.Builder, + com.google.pubsub.v1.AIInferenceOrBuilder> + aiInferenceBuilder_; + + /** + * + * + *
+     * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+     * requests built from the Pub/Sub message data and provided parameters will
+     * be sent to.
+     * 
+ * + * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the aiInference field is set. + */ + @java.lang.Override + public boolean hasAiInference() { + return transformCase_ == 6; + } + + /** + * + * + *
+     * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+     * requests built from the Pub/Sub message data and provided parameters will
+     * be sent to.
+     * 
+ * + * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The aiInference. + */ + @java.lang.Override + public com.google.pubsub.v1.AIInference getAiInference() { + if (aiInferenceBuilder_ == null) { + if (transformCase_ == 6) { + return (com.google.pubsub.v1.AIInference) transform_; + } + return com.google.pubsub.v1.AIInference.getDefaultInstance(); + } else { + if (transformCase_ == 6) { + return aiInferenceBuilder_.getMessage(); + } + return com.google.pubsub.v1.AIInference.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+     * requests built from the Pub/Sub message data and provided parameters will
+     * be sent to.
+     * 
+ * + * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAiInference(com.google.pubsub.v1.AIInference value) { + if (aiInferenceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + transform_ = value; + onChanged(); + } else { + aiInferenceBuilder_.setMessage(value); + } + transformCase_ = 6; + return this; + } + + /** + * + * + *
+     * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+     * requests built from the Pub/Sub message data and provided parameters will
+     * be sent to.
+     * 
+ * + * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAiInference(com.google.pubsub.v1.AIInference.Builder builderForValue) { + if (aiInferenceBuilder_ == null) { + transform_ = builderForValue.build(); + onChanged(); + } else { + aiInferenceBuilder_.setMessage(builderForValue.build()); + } + transformCase_ = 6; + return this; + } + + /** + * + * + *
+     * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+     * requests built from the Pub/Sub message data and provided parameters will
+     * be sent to.
+     * 
+ * + * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeAiInference(com.google.pubsub.v1.AIInference value) { + if (aiInferenceBuilder_ == null) { + if (transformCase_ == 6 + && transform_ != com.google.pubsub.v1.AIInference.getDefaultInstance()) { + transform_ = + com.google.pubsub.v1.AIInference.newBuilder( + (com.google.pubsub.v1.AIInference) transform_) + .mergeFrom(value) + .buildPartial(); + } else { + transform_ = value; + } + onChanged(); + } else { + if (transformCase_ == 6) { + aiInferenceBuilder_.mergeFrom(value); + } else { + aiInferenceBuilder_.setMessage(value); + } + } + transformCase_ = 6; + return this; + } + + /** + * + * + *
+     * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+     * requests built from the Pub/Sub message data and provided parameters will
+     * be sent to.
+     * 
+ * + * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearAiInference() { + if (aiInferenceBuilder_ == null) { + if (transformCase_ == 6) { + transformCase_ = 0; + transform_ = null; + onChanged(); + } + } else { + if (transformCase_ == 6) { + transformCase_ = 0; + transform_ = null; + } + aiInferenceBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+     * requests built from the Pub/Sub message data and provided parameters will
+     * be sent to.
+     * 
+ * + * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.AIInference.Builder getAiInferenceBuilder() { + return internalGetAiInferenceFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+     * requests built from the Pub/Sub message data and provided parameters will
+     * be sent to.
+     * 
+ * + * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.AIInferenceOrBuilder getAiInferenceOrBuilder() { + if ((transformCase_ == 6) && (aiInferenceBuilder_ != null)) { + return aiInferenceBuilder_.getMessageOrBuilder(); + } else { + if (transformCase_ == 6) { + return (com.google.pubsub.v1.AIInference) transform_; + } + return com.google.pubsub.v1.AIInference.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+     * requests built from the Pub/Sub message data and provided parameters will
+     * be sent to.
+     * 
+ * + * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.AIInference, + com.google.pubsub.v1.AIInference.Builder, + com.google.pubsub.v1.AIInferenceOrBuilder> + internalGetAiInferenceFieldBuilder() { + if (aiInferenceBuilder_ == null) { + if (!(transformCase_ == 6)) { + transform_ = com.google.pubsub.v1.AIInference.getDefaultInstance(); + } + aiInferenceBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.AIInference, + com.google.pubsub.v1.AIInference.Builder, + com.google.pubsub.v1.AIInferenceOrBuilder>( + (com.google.pubsub.v1.AIInference) transform_, getParentForChildren(), isClean()); + transform_ = null; + } + transformCase_ = 6; + onChanged(); + return aiInferenceBuilder_; + } + + private boolean enabled_; + + /** + * + * + *
+     * Optional. This field is deprecated, use the `disabled` field to disable
+     * transforms.
+     * 
+ * + * bool enabled = 3 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * @deprecated google.pubsub.v1.MessageTransform.enabled is deprecated. See + * google/pubsub/v1/pubsub.proto;l=857 + * @return The enabled. + */ + @java.lang.Override + @java.lang.Deprecated + public boolean getEnabled() { + return enabled_; + } + + /** + * + * + *
+     * Optional. This field is deprecated, use the `disabled` field to disable
+     * transforms.
+     * 
+ * + * bool enabled = 3 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * @deprecated google.pubsub.v1.MessageTransform.enabled is deprecated. See + * google/pubsub/v1/pubsub.proto;l=857 + * @param value The enabled to set. + * @return This builder for chaining. + */ + @java.lang.Deprecated + public Builder setEnabled(boolean value) { + + enabled_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. This field is deprecated, use the `disabled` field to disable
+     * transforms.
+     * 
+ * + * bool enabled = 3 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * @deprecated google.pubsub.v1.MessageTransform.enabled is deprecated. See + * google/pubsub/v1/pubsub.proto;l=857 + * @return This builder for chaining. + */ + @java.lang.Deprecated + public Builder clearEnabled() { + bitField0_ = (bitField0_ & ~0x00000004); + enabled_ = false; + onChanged(); + return this; + } + + private boolean disabled_; + + /** + * + * + *
+     * Optional. If true, the transform is disabled and will not be applied to
+     * messages. Defaults to `false`.
+     * 
+ * + * bool disabled = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The disabled. + */ + @java.lang.Override + public boolean getDisabled() { + return disabled_; + } + + /** + * + * + *
+     * Optional. If true, the transform is disabled and will not be applied to
+     * messages. Defaults to `false`.
+     * 
+ * + * bool disabled = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The disabled to set. + * @return This builder for chaining. + */ + public Builder setDisabled(boolean value) { + + disabled_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If true, the transform is disabled and will not be applied to
+     * messages. Defaults to `false`.
+     * 
+ * + * bool disabled = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearDisabled() { + bitField0_ = (bitField0_ & ~0x00000008); + disabled_ = false; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.MessageTransform) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.MessageTransform) + private static final com.google.pubsub.v1.MessageTransform DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.MessageTransform(); + } + + public static com.google.pubsub.v1.MessageTransform getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public MessageTransform parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.MessageTransform getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/MessageTransformOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/MessageTransformOrBuilder.java new file mode 100644 index 000000000000..9c31737d081b --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/MessageTransformOrBuilder.java @@ -0,0 +1,153 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface MessageTransformOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.MessageTransform) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+   * are specified on a resource, each must have a unique `function_name`.
+   * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the javascriptUdf field is set. + */ + boolean hasJavascriptUdf(); + + /** + * + * + *
+   * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+   * are specified on a resource, each must have a unique `function_name`.
+   * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The javascriptUdf. + */ + com.google.pubsub.v1.JavaScriptUDF getJavascriptUdf(); + + /** + * + * + *
+   * Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's
+   * are specified on a resource, each must have a unique `function_name`.
+   * 
+ * + * + * .google.pubsub.v1.JavaScriptUDF javascript_udf = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.JavaScriptUDFOrBuilder getJavascriptUdfOrBuilder(); + + /** + * + * + *
+   * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+   * requests built from the Pub/Sub message data and provided parameters will
+   * be sent to.
+   * 
+ * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the aiInference field is set. + */ + boolean hasAiInference(); + + /** + * + * + *
+   * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+   * requests built from the Pub/Sub message data and provided parameters will
+   * be sent to.
+   * 
+ * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The aiInference. + */ + com.google.pubsub.v1.AIInference getAiInference(); + + /** + * + * + *
+   * Optional. AI Inference. Specifies the Vertex AI endpoint that inference
+   * requests built from the Pub/Sub message data and provided parameters will
+   * be sent to.
+   * 
+ * + * .google.pubsub.v1.AIInference ai_inference = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.AIInferenceOrBuilder getAiInferenceOrBuilder(); + + /** + * + * + *
+   * Optional. This field is deprecated, use the `disabled` field to disable
+   * transforms.
+   * 
+ * + * bool enabled = 3 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * @deprecated google.pubsub.v1.MessageTransform.enabled is deprecated. See + * google/pubsub/v1/pubsub.proto;l=857 + * @return The enabled. + */ + @java.lang.Deprecated + boolean getEnabled(); + + /** + * + * + *
+   * Optional. If true, the transform is disabled and will not be applied to
+   * messages. Defaults to `false`.
+   * 
+ * + * bool disabled = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The disabled. + */ + boolean getDisabled(); + + com.google.pubsub.v1.MessageTransform.TransformCase getTransformCase(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ModifyAckDeadlineRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ModifyAckDeadlineRequest.java new file mode 100644 index 000000000000..383bd5c0e2b2 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ModifyAckDeadlineRequest.java @@ -0,0 +1,1035 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the ModifyAckDeadline method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ModifyAckDeadlineRequest} + */ +@com.google.protobuf.Generated +public final class ModifyAckDeadlineRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ModifyAckDeadlineRequest) + ModifyAckDeadlineRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ModifyAckDeadlineRequest"); + } + + // Use ModifyAckDeadlineRequest.newBuilder() to construct. + private ModifyAckDeadlineRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ModifyAckDeadlineRequest() { + subscription_ = ""; + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ModifyAckDeadlineRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ModifyAckDeadlineRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ModifyAckDeadlineRequest.class, + com.google.pubsub.v1.ModifyAckDeadlineRequest.Builder.class); + } + + public static final int SUBSCRIPTION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object subscription_ = ""; + + /** + * + * + *
+   * Required. The name of the subscription.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + @java.lang.Override + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the subscription.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ACK_IDS_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList ackIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+   * Required. List of acknowledgment IDs.
+   * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return A list containing the ackIds. + */ + public com.google.protobuf.ProtocolStringList getAckIdsList() { + return ackIds_; + } + + /** + * + * + *
+   * Required. List of acknowledgment IDs.
+   * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The count of ackIds. + */ + public int getAckIdsCount() { + return ackIds_.size(); + } + + /** + * + * + *
+   * Required. List of acknowledgment IDs.
+   * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + public java.lang.String getAckIds(int index) { + return ackIds_.get(index); + } + + /** + * + * + *
+   * Required. List of acknowledgment IDs.
+   * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + public com.google.protobuf.ByteString getAckIdsBytes(int index) { + return ackIds_.getByteString(index); + } + + public static final int ACK_DEADLINE_SECONDS_FIELD_NUMBER = 3; + private int ackDeadlineSeconds_ = 0; + + /** + * + * + *
+   * Required. The new ack deadline with respect to the time this request was
+   * sent to the Pub/Sub system. For example, if the value is 10, the new ack
+   * deadline will expire 10 seconds after the `ModifyAckDeadline` call was
+   * made. Specifying zero might immediately make the message available for
+   * delivery to another subscriber client. This typically results in an
+   * increase in the rate of message redeliveries (that is, duplicates).
+   * The minimum deadline you can specify is 0 seconds.
+   * The maximum deadline you can specify in a single request is 600 seconds
+   * (10 minutes).
+   * 
+ * + * int32 ack_deadline_seconds = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The ackDeadlineSeconds. + */ + @java.lang.Override + public int getAckDeadlineSeconds() { + return ackDeadlineSeconds_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, subscription_); + } + if (ackDeadlineSeconds_ != 0) { + output.writeInt32(3, ackDeadlineSeconds_); + } + for (int i = 0; i < ackIds_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, ackIds_.getRaw(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, subscription_); + } + if (ackDeadlineSeconds_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, ackDeadlineSeconds_); + } + { + int dataSize = 0; + for (int i = 0; i < ackIds_.size(); i++) { + dataSize += computeStringSizeNoTag(ackIds_.getRaw(i)); + } + size += dataSize; + size += 1 * getAckIdsList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ModifyAckDeadlineRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.ModifyAckDeadlineRequest other = + (com.google.pubsub.v1.ModifyAckDeadlineRequest) obj; + + if (!getSubscription().equals(other.getSubscription())) return false; + if (!getAckIdsList().equals(other.getAckIdsList())) return false; + if (getAckDeadlineSeconds() != other.getAckDeadlineSeconds()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SUBSCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getSubscription().hashCode(); + if (getAckIdsCount() > 0) { + hash = (37 * hash) + ACK_IDS_FIELD_NUMBER; + hash = (53 * hash) + getAckIdsList().hashCode(); + } + hash = (37 * hash) + ACK_DEADLINE_SECONDS_FIELD_NUMBER; + hash = (53 * hash) + getAckDeadlineSeconds(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ModifyAckDeadlineRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ModifyAckDeadlineRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ModifyAckDeadlineRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ModifyAckDeadlineRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ModifyAckDeadlineRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ModifyAckDeadlineRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ModifyAckDeadlineRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ModifyAckDeadlineRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ModifyAckDeadlineRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ModifyAckDeadlineRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ModifyAckDeadlineRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ModifyAckDeadlineRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ModifyAckDeadlineRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the ModifyAckDeadline method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ModifyAckDeadlineRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ModifyAckDeadlineRequest) + com.google.pubsub.v1.ModifyAckDeadlineRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ModifyAckDeadlineRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ModifyAckDeadlineRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ModifyAckDeadlineRequest.class, + com.google.pubsub.v1.ModifyAckDeadlineRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.ModifyAckDeadlineRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + subscription_ = ""; + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + ackDeadlineSeconds_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ModifyAckDeadlineRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ModifyAckDeadlineRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.ModifyAckDeadlineRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ModifyAckDeadlineRequest build() { + com.google.pubsub.v1.ModifyAckDeadlineRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ModifyAckDeadlineRequest buildPartial() { + com.google.pubsub.v1.ModifyAckDeadlineRequest result = + new com.google.pubsub.v1.ModifyAckDeadlineRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ModifyAckDeadlineRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.subscription_ = subscription_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + ackIds_.makeImmutable(); + result.ackIds_ = ackIds_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.ackDeadlineSeconds_ = ackDeadlineSeconds_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ModifyAckDeadlineRequest) { + return mergeFrom((com.google.pubsub.v1.ModifyAckDeadlineRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ModifyAckDeadlineRequest other) { + if (other == com.google.pubsub.v1.ModifyAckDeadlineRequest.getDefaultInstance()) return this; + if (!other.getSubscription().isEmpty()) { + subscription_ = other.subscription_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.ackIds_.isEmpty()) { + if (ackIds_.isEmpty()) { + ackIds_ = other.ackIds_; + bitField0_ |= 0x00000002; + } else { + ensureAckIdsIsMutable(); + ackIds_.addAll(other.ackIds_); + } + onChanged(); + } + if (other.getAckDeadlineSeconds() != 0) { + setAckDeadlineSeconds(other.getAckDeadlineSeconds()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + subscription_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 24: + { + ackDeadlineSeconds_ = input.readInt32(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 34: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureAckIdsIsMutable(); + ackIds_.add(s); + break; + } // case 34 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object subscription_ = ""; + + /** + * + * + *
+     * Required. The name of the subscription.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the subscription.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the subscription.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscription(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the subscription.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSubscription() { + subscription_ = getDefaultInstance().getSubscription(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the subscription.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscriptionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.protobuf.LazyStringArrayList ackIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureAckIdsIsMutable() { + if (!ackIds_.isModifiable()) { + ackIds_ = new com.google.protobuf.LazyStringArrayList(ackIds_); + } + bitField0_ |= 0x00000002; + } + + /** + * + * + *
+     * Required. List of acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return A list containing the ackIds. + */ + public com.google.protobuf.ProtocolStringList getAckIdsList() { + ackIds_.makeImmutable(); + return ackIds_; + } + + /** + * + * + *
+     * Required. List of acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The count of ackIds. + */ + public int getAckIdsCount() { + return ackIds_.size(); + } + + /** + * + * + *
+     * Required. List of acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + public java.lang.String getAckIds(int index) { + return ackIds_.get(index); + } + + /** + * + * + *
+     * Required. List of acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + public com.google.protobuf.ByteString getAckIdsBytes(int index) { + return ackIds_.getByteString(index); + } + + /** + * + * + *
+     * Required. List of acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index to set the value at. + * @param value The ackIds to set. + * @return This builder for chaining. + */ + public Builder setAckIds(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureAckIdsIsMutable(); + ackIds_.set(index, value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. List of acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The ackIds to add. + * @return This builder for chaining. + */ + public Builder addAckIds(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureAckIdsIsMutable(); + ackIds_.add(value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. List of acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param values The ackIds to add. + * @return This builder for chaining. + */ + public Builder addAllAckIds(java.lang.Iterable values) { + ensureAckIdsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, ackIds_); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. List of acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearAckIds() { + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + ; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. List of acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes of the ackIds to add. + * @return This builder for chaining. + */ + public Builder addAckIdsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureAckIdsIsMutable(); + ackIds_.add(value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private int ackDeadlineSeconds_; + + /** + * + * + *
+     * Required. The new ack deadline with respect to the time this request was
+     * sent to the Pub/Sub system. For example, if the value is 10, the new ack
+     * deadline will expire 10 seconds after the `ModifyAckDeadline` call was
+     * made. Specifying zero might immediately make the message available for
+     * delivery to another subscriber client. This typically results in an
+     * increase in the rate of message redeliveries (that is, duplicates).
+     * The minimum deadline you can specify is 0 seconds.
+     * The maximum deadline you can specify in a single request is 600 seconds
+     * (10 minutes).
+     * 
+ * + * int32 ack_deadline_seconds = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The ackDeadlineSeconds. + */ + @java.lang.Override + public int getAckDeadlineSeconds() { + return ackDeadlineSeconds_; + } + + /** + * + * + *
+     * Required. The new ack deadline with respect to the time this request was
+     * sent to the Pub/Sub system. For example, if the value is 10, the new ack
+     * deadline will expire 10 seconds after the `ModifyAckDeadline` call was
+     * made. Specifying zero might immediately make the message available for
+     * delivery to another subscriber client. This typically results in an
+     * increase in the rate of message redeliveries (that is, duplicates).
+     * The minimum deadline you can specify is 0 seconds.
+     * The maximum deadline you can specify in a single request is 600 seconds
+     * (10 minutes).
+     * 
+ * + * int32 ack_deadline_seconds = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The ackDeadlineSeconds to set. + * @return This builder for chaining. + */ + public Builder setAckDeadlineSeconds(int value) { + + ackDeadlineSeconds_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The new ack deadline with respect to the time this request was
+     * sent to the Pub/Sub system. For example, if the value is 10, the new ack
+     * deadline will expire 10 seconds after the `ModifyAckDeadline` call was
+     * made. Specifying zero might immediately make the message available for
+     * delivery to another subscriber client. This typically results in an
+     * increase in the rate of message redeliveries (that is, duplicates).
+     * The minimum deadline you can specify is 0 seconds.
+     * The maximum deadline you can specify in a single request is 600 seconds
+     * (10 minutes).
+     * 
+ * + * int32 ack_deadline_seconds = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearAckDeadlineSeconds() { + bitField0_ = (bitField0_ & ~0x00000004); + ackDeadlineSeconds_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ModifyAckDeadlineRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ModifyAckDeadlineRequest) + private static final com.google.pubsub.v1.ModifyAckDeadlineRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ModifyAckDeadlineRequest(); + } + + public static com.google.pubsub.v1.ModifyAckDeadlineRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ModifyAckDeadlineRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ModifyAckDeadlineRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ModifyAckDeadlineRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ModifyAckDeadlineRequestOrBuilder.java new file mode 100644 index 000000000000..56439946dcb8 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ModifyAckDeadlineRequestOrBuilder.java @@ -0,0 +1,135 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ModifyAckDeadlineRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ModifyAckDeadlineRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the subscription.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + java.lang.String getSubscription(); + + /** + * + * + *
+   * Required. The name of the subscription.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + com.google.protobuf.ByteString getSubscriptionBytes(); + + /** + * + * + *
+   * Required. List of acknowledgment IDs.
+   * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return A list containing the ackIds. + */ + java.util.List getAckIdsList(); + + /** + * + * + *
+   * Required. List of acknowledgment IDs.
+   * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The count of ackIds. + */ + int getAckIdsCount(); + + /** + * + * + *
+   * Required. List of acknowledgment IDs.
+   * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + java.lang.String getAckIds(int index); + + /** + * + * + *
+   * Required. List of acknowledgment IDs.
+   * 
+ * + * repeated string ack_ids = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + com.google.protobuf.ByteString getAckIdsBytes(int index); + + /** + * + * + *
+   * Required. The new ack deadline with respect to the time this request was
+   * sent to the Pub/Sub system. For example, if the value is 10, the new ack
+   * deadline will expire 10 seconds after the `ModifyAckDeadline` call was
+   * made. Specifying zero might immediately make the message available for
+   * delivery to another subscriber client. This typically results in an
+   * increase in the rate of message redeliveries (that is, duplicates).
+   * The minimum deadline you can specify is 0 seconds.
+   * The maximum deadline you can specify in a single request is 600 seconds
+   * (10 minutes).
+   * 
+ * + * int32 ack_deadline_seconds = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The ackDeadlineSeconds. + */ + int getAckDeadlineSeconds(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ModifyPushConfigRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ModifyPushConfigRequest.java new file mode 100644 index 000000000000..0a0181ec3683 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ModifyPushConfigRequest.java @@ -0,0 +1,976 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the ModifyPushConfig method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ModifyPushConfigRequest} + */ +@com.google.protobuf.Generated +public final class ModifyPushConfigRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ModifyPushConfigRequest) + ModifyPushConfigRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ModifyPushConfigRequest"); + } + + // Use ModifyPushConfigRequest.newBuilder() to construct. + private ModifyPushConfigRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ModifyPushConfigRequest() { + subscription_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ModifyPushConfigRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ModifyPushConfigRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ModifyPushConfigRequest.class, + com.google.pubsub.v1.ModifyPushConfigRequest.Builder.class); + } + + private int bitField0_; + public static final int SUBSCRIPTION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object subscription_ = ""; + + /** + * + * + *
+   * Required. The name of the subscription.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + @java.lang.Override + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the subscription.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PUSH_CONFIG_FIELD_NUMBER = 2; + private com.google.pubsub.v1.PushConfig pushConfig_; + + /** + * + * + *
+   * Required. The push configuration for future deliveries.
+   *
+   * An empty `pushConfig` indicates that the Pub/Sub system should
+   * stop pushing messages from the given subscription and allow
+   * messages to be pulled and acknowledged - effectively pausing
+   * the subscription if `Pull` or `StreamingPull` is not called.
+   * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the pushConfig field is set. + */ + @java.lang.Override + public boolean hasPushConfig() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Required. The push configuration for future deliveries.
+   *
+   * An empty `pushConfig` indicates that the Pub/Sub system should
+   * stop pushing messages from the given subscription and allow
+   * messages to be pulled and acknowledged - effectively pausing
+   * the subscription if `Pull` or `StreamingPull` is not called.
+   * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The pushConfig. + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig getPushConfig() { + return pushConfig_ == null ? com.google.pubsub.v1.PushConfig.getDefaultInstance() : pushConfig_; + } + + /** + * + * + *
+   * Required. The push configuration for future deliveries.
+   *
+   * An empty `pushConfig` indicates that the Pub/Sub system should
+   * stop pushing messages from the given subscription and allow
+   * messages to be pulled and acknowledged - effectively pausing
+   * the subscription if `Pull` or `StreamingPull` is not called.
+   * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfigOrBuilder getPushConfigOrBuilder() { + return pushConfig_ == null ? com.google.pubsub.v1.PushConfig.getDefaultInstance() : pushConfig_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, subscription_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(2, getPushConfig()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, subscription_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getPushConfig()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ModifyPushConfigRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.ModifyPushConfigRequest other = + (com.google.pubsub.v1.ModifyPushConfigRequest) obj; + + if (!getSubscription().equals(other.getSubscription())) return false; + if (hasPushConfig() != other.hasPushConfig()) return false; + if (hasPushConfig()) { + if (!getPushConfig().equals(other.getPushConfig())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SUBSCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getSubscription().hashCode(); + if (hasPushConfig()) { + hash = (37 * hash) + PUSH_CONFIG_FIELD_NUMBER; + hash = (53 * hash) + getPushConfig().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ModifyPushConfigRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ModifyPushConfigRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ModifyPushConfigRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ModifyPushConfigRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ModifyPushConfigRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ModifyPushConfigRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ModifyPushConfigRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ModifyPushConfigRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ModifyPushConfigRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ModifyPushConfigRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ModifyPushConfigRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ModifyPushConfigRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ModifyPushConfigRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the ModifyPushConfig method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ModifyPushConfigRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ModifyPushConfigRequest) + com.google.pubsub.v1.ModifyPushConfigRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ModifyPushConfigRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ModifyPushConfigRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ModifyPushConfigRequest.class, + com.google.pubsub.v1.ModifyPushConfigRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.ModifyPushConfigRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetPushConfigFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + subscription_ = ""; + pushConfig_ = null; + if (pushConfigBuilder_ != null) { + pushConfigBuilder_.dispose(); + pushConfigBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ModifyPushConfigRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ModifyPushConfigRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.ModifyPushConfigRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ModifyPushConfigRequest build() { + com.google.pubsub.v1.ModifyPushConfigRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ModifyPushConfigRequest buildPartial() { + com.google.pubsub.v1.ModifyPushConfigRequest result = + new com.google.pubsub.v1.ModifyPushConfigRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ModifyPushConfigRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.subscription_ = subscription_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.pushConfig_ = pushConfigBuilder_ == null ? pushConfig_ : pushConfigBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ModifyPushConfigRequest) { + return mergeFrom((com.google.pubsub.v1.ModifyPushConfigRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ModifyPushConfigRequest other) { + if (other == com.google.pubsub.v1.ModifyPushConfigRequest.getDefaultInstance()) return this; + if (!other.getSubscription().isEmpty()) { + subscription_ = other.subscription_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.hasPushConfig()) { + mergePushConfig(other.getPushConfig()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + subscription_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetPushConfigFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object subscription_ = ""; + + /** + * + * + *
+     * Required. The name of the subscription.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the subscription.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the subscription.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscription(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the subscription.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSubscription() { + subscription_ = getDefaultInstance().getSubscription(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the subscription.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscriptionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.pubsub.v1.PushConfig pushConfig_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig, + com.google.pubsub.v1.PushConfig.Builder, + com.google.pubsub.v1.PushConfigOrBuilder> + pushConfigBuilder_; + + /** + * + * + *
+     * Required. The push configuration for future deliveries.
+     *
+     * An empty `pushConfig` indicates that the Pub/Sub system should
+     * stop pushing messages from the given subscription and allow
+     * messages to be pulled and acknowledged - effectively pausing
+     * the subscription if `Pull` or `StreamingPull` is not called.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the pushConfig field is set. + */ + public boolean hasPushConfig() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+     * Required. The push configuration for future deliveries.
+     *
+     * An empty `pushConfig` indicates that the Pub/Sub system should
+     * stop pushing messages from the given subscription and allow
+     * messages to be pulled and acknowledged - effectively pausing
+     * the subscription if `Pull` or `StreamingPull` is not called.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The pushConfig. + */ + public com.google.pubsub.v1.PushConfig getPushConfig() { + if (pushConfigBuilder_ == null) { + return pushConfig_ == null + ? com.google.pubsub.v1.PushConfig.getDefaultInstance() + : pushConfig_; + } else { + return pushConfigBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. The push configuration for future deliveries.
+     *
+     * An empty `pushConfig` indicates that the Pub/Sub system should
+     * stop pushing messages from the given subscription and allow
+     * messages to be pulled and acknowledged - effectively pausing
+     * the subscription if `Pull` or `StreamingPull` is not called.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setPushConfig(com.google.pubsub.v1.PushConfig value) { + if (pushConfigBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + pushConfig_ = value; + } else { + pushConfigBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The push configuration for future deliveries.
+     *
+     * An empty `pushConfig` indicates that the Pub/Sub system should
+     * stop pushing messages from the given subscription and allow
+     * messages to be pulled and acknowledged - effectively pausing
+     * the subscription if `Pull` or `StreamingPull` is not called.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setPushConfig(com.google.pubsub.v1.PushConfig.Builder builderForValue) { + if (pushConfigBuilder_ == null) { + pushConfig_ = builderForValue.build(); + } else { + pushConfigBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The push configuration for future deliveries.
+     *
+     * An empty `pushConfig` indicates that the Pub/Sub system should
+     * stop pushing messages from the given subscription and allow
+     * messages to be pulled and acknowledged - effectively pausing
+     * the subscription if `Pull` or `StreamingPull` is not called.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergePushConfig(com.google.pubsub.v1.PushConfig value) { + if (pushConfigBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && pushConfig_ != null + && pushConfig_ != com.google.pubsub.v1.PushConfig.getDefaultInstance()) { + getPushConfigBuilder().mergeFrom(value); + } else { + pushConfig_ = value; + } + } else { + pushConfigBuilder_.mergeFrom(value); + } + if (pushConfig_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. The push configuration for future deliveries.
+     *
+     * An empty `pushConfig` indicates that the Pub/Sub system should
+     * stop pushing messages from the given subscription and allow
+     * messages to be pulled and acknowledged - effectively pausing
+     * the subscription if `Pull` or `StreamingPull` is not called.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearPushConfig() { + bitField0_ = (bitField0_ & ~0x00000002); + pushConfig_ = null; + if (pushConfigBuilder_ != null) { + pushConfigBuilder_.dispose(); + pushConfigBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The push configuration for future deliveries.
+     *
+     * An empty `pushConfig` indicates that the Pub/Sub system should
+     * stop pushing messages from the given subscription and allow
+     * messages to be pulled and acknowledged - effectively pausing
+     * the subscription if `Pull` or `StreamingPull` is not called.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.pubsub.v1.PushConfig.Builder getPushConfigBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetPushConfigFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. The push configuration for future deliveries.
+     *
+     * An empty `pushConfig` indicates that the Pub/Sub system should
+     * stop pushing messages from the given subscription and allow
+     * messages to be pulled and acknowledged - effectively pausing
+     * the subscription if `Pull` or `StreamingPull` is not called.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.pubsub.v1.PushConfigOrBuilder getPushConfigOrBuilder() { + if (pushConfigBuilder_ != null) { + return pushConfigBuilder_.getMessageOrBuilder(); + } else { + return pushConfig_ == null + ? com.google.pubsub.v1.PushConfig.getDefaultInstance() + : pushConfig_; + } + } + + /** + * + * + *
+     * Required. The push configuration for future deliveries.
+     *
+     * An empty `pushConfig` indicates that the Pub/Sub system should
+     * stop pushing messages from the given subscription and allow
+     * messages to be pulled and acknowledged - effectively pausing
+     * the subscription if `Pull` or `StreamingPull` is not called.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig, + com.google.pubsub.v1.PushConfig.Builder, + com.google.pubsub.v1.PushConfigOrBuilder> + internalGetPushConfigFieldBuilder() { + if (pushConfigBuilder_ == null) { + pushConfigBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig, + com.google.pubsub.v1.PushConfig.Builder, + com.google.pubsub.v1.PushConfigOrBuilder>( + getPushConfig(), getParentForChildren(), isClean()); + pushConfig_ = null; + } + return pushConfigBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ModifyPushConfigRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ModifyPushConfigRequest) + private static final com.google.pubsub.v1.ModifyPushConfigRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ModifyPushConfigRequest(); + } + + public static com.google.pubsub.v1.ModifyPushConfigRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ModifyPushConfigRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ModifyPushConfigRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ModifyPushConfigRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ModifyPushConfigRequestOrBuilder.java new file mode 100644 index 000000000000..25f579d7460c --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ModifyPushConfigRequestOrBuilder.java @@ -0,0 +1,115 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ModifyPushConfigRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ModifyPushConfigRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the subscription.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + java.lang.String getSubscription(); + + /** + * + * + *
+   * Required. The name of the subscription.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + com.google.protobuf.ByteString getSubscriptionBytes(); + + /** + * + * + *
+   * Required. The push configuration for future deliveries.
+   *
+   * An empty `pushConfig` indicates that the Pub/Sub system should
+   * stop pushing messages from the given subscription and allow
+   * messages to be pulled and acknowledged - effectively pausing
+   * the subscription if `Pull` or `StreamingPull` is not called.
+   * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the pushConfig field is set. + */ + boolean hasPushConfig(); + + /** + * + * + *
+   * Required. The push configuration for future deliveries.
+   *
+   * An empty `pushConfig` indicates that the Pub/Sub system should
+   * stop pushing messages from the given subscription and allow
+   * messages to be pulled and acknowledged - effectively pausing
+   * the subscription if `Pull` or `StreamingPull` is not called.
+   * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The pushConfig. + */ + com.google.pubsub.v1.PushConfig getPushConfig(); + + /** + * + * + *
+   * Required. The push configuration for future deliveries.
+   *
+   * An empty `pushConfig` indicates that the Pub/Sub system should
+   * stop pushing messages from the given subscription and allow
+   * messages to be pulled and acknowledged - effectively pausing
+   * the subscription if `Pull` or `StreamingPull` is not called.
+   * 
+ * + * .google.pubsub.v1.PushConfig push_config = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.pubsub.v1.PushConfigOrBuilder getPushConfigOrBuilder(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PlatformLogsSettings.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PlatformLogsSettings.java new file mode 100644 index 000000000000..1135d99de4ba --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PlatformLogsSettings.java @@ -0,0 +1,819 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Settings for Platform Logs produced by Pub/Sub.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.PlatformLogsSettings} + */ +@com.google.protobuf.Generated +public final class PlatformLogsSettings extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.PlatformLogsSettings) + PlatformLogsSettingsOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PlatformLogsSettings"); + } + + // Use PlatformLogsSettings.newBuilder() to construct. + private PlatformLogsSettings(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private PlatformLogsSettings() { + severity_ = 0; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PlatformLogsSettings_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PlatformLogsSettings_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PlatformLogsSettings.class, + com.google.pubsub.v1.PlatformLogsSettings.Builder.class); + } + + /** + * + * + *
+   * Severity levels of Platform Logs.
+   * 
+ * + * Protobuf enum {@code google.pubsub.v1.PlatformLogsSettings.Severity} + */ + public enum Severity implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+     * Default value. Logs level is unspecified. Logs will be disabled.
+     * 
+ * + * SEVERITY_UNSPECIFIED = 0; + */ + SEVERITY_UNSPECIFIED(0), + /** + * + * + *
+     * Logs will be disabled.
+     * 
+ * + * DISABLED = 1; + */ + DISABLED(1), + /** + * + * + *
+     * Debug logs and higher-severity logs will be written.
+     * 
+ * + * DEBUG = 2; + */ + DEBUG(2), + /** + * + * + *
+     * Info logs and higher-severity logs will be written.
+     * 
+ * + * INFO = 3; + */ + INFO(3), + /** + * + * + *
+     * Warning logs and higher-severity logs will be written.
+     * 
+ * + * WARNING = 4; + */ + WARNING(4), + /** + * + * + *
+     * Only error logs will be written.
+     * 
+ * + * ERROR = 5; + */ + ERROR(5), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Severity"); + } + + /** + * + * + *
+     * Default value. Logs level is unspecified. Logs will be disabled.
+     * 
+ * + * SEVERITY_UNSPECIFIED = 0; + */ + public static final int SEVERITY_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+     * Logs will be disabled.
+     * 
+ * + * DISABLED = 1; + */ + public static final int DISABLED_VALUE = 1; + + /** + * + * + *
+     * Debug logs and higher-severity logs will be written.
+     * 
+ * + * DEBUG = 2; + */ + public static final int DEBUG_VALUE = 2; + + /** + * + * + *
+     * Info logs and higher-severity logs will be written.
+     * 
+ * + * INFO = 3; + */ + public static final int INFO_VALUE = 3; + + /** + * + * + *
+     * Warning logs and higher-severity logs will be written.
+     * 
+ * + * WARNING = 4; + */ + public static final int WARNING_VALUE = 4; + + /** + * + * + *
+     * Only error logs will be written.
+     * 
+ * + * ERROR = 5; + */ + public static final int ERROR_VALUE = 5; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static Severity valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static Severity forNumber(int value) { + switch (value) { + case 0: + return SEVERITY_UNSPECIFIED; + case 1: + return DISABLED; + case 2: + return DEBUG; + case 3: + return INFO; + case 4: + return WARNING; + case 5: + return ERROR; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Severity findValueByNumber(int number) { + return Severity.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.PlatformLogsSettings.getDescriptor().getEnumTypes().get(0); + } + + private static final Severity[] VALUES = values(); + + public static Severity valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private Severity(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.PlatformLogsSettings.Severity) + } + + public static final int SEVERITY_FIELD_NUMBER = 1; + private int severity_ = 0; + + /** + * + * + *
+   * Optional. The minimum severity level of Platform Logs that will be written.
+   * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings.Severity severity = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The enum numeric value on the wire for severity. + */ + @java.lang.Override + public int getSeverityValue() { + return severity_; + } + + /** + * + * + *
+   * Optional. The minimum severity level of Platform Logs that will be written.
+   * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings.Severity severity = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The severity. + */ + @java.lang.Override + public com.google.pubsub.v1.PlatformLogsSettings.Severity getSeverity() { + com.google.pubsub.v1.PlatformLogsSettings.Severity result = + com.google.pubsub.v1.PlatformLogsSettings.Severity.forNumber(severity_); + return result == null + ? com.google.pubsub.v1.PlatformLogsSettings.Severity.UNRECOGNIZED + : result; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (severity_ + != com.google.pubsub.v1.PlatformLogsSettings.Severity.SEVERITY_UNSPECIFIED.getNumber()) { + output.writeEnum(1, severity_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (severity_ + != com.google.pubsub.v1.PlatformLogsSettings.Severity.SEVERITY_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, severity_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.PlatformLogsSettings)) { + return super.equals(obj); + } + com.google.pubsub.v1.PlatformLogsSettings other = + (com.google.pubsub.v1.PlatformLogsSettings) obj; + + if (severity_ != other.severity_) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SEVERITY_FIELD_NUMBER; + hash = (53 * hash) + severity_; + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.PlatformLogsSettings parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PlatformLogsSettings parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PlatformLogsSettings parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PlatformLogsSettings parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PlatformLogsSettings parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PlatformLogsSettings parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PlatformLogsSettings parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PlatformLogsSettings parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PlatformLogsSettings parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PlatformLogsSettings parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PlatformLogsSettings parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PlatformLogsSettings parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.PlatformLogsSettings prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Settings for Platform Logs produced by Pub/Sub.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.PlatformLogsSettings} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.PlatformLogsSettings) + com.google.pubsub.v1.PlatformLogsSettingsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PlatformLogsSettings_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PlatformLogsSettings_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PlatformLogsSettings.class, + com.google.pubsub.v1.PlatformLogsSettings.Builder.class); + } + + // Construct using com.google.pubsub.v1.PlatformLogsSettings.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + severity_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PlatformLogsSettings_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.PlatformLogsSettings getDefaultInstanceForType() { + return com.google.pubsub.v1.PlatformLogsSettings.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.PlatformLogsSettings build() { + com.google.pubsub.v1.PlatformLogsSettings result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.PlatformLogsSettings buildPartial() { + com.google.pubsub.v1.PlatformLogsSettings result = + new com.google.pubsub.v1.PlatformLogsSettings(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.PlatformLogsSettings result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.severity_ = severity_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.PlatformLogsSettings) { + return mergeFrom((com.google.pubsub.v1.PlatformLogsSettings) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.PlatformLogsSettings other) { + if (other == com.google.pubsub.v1.PlatformLogsSettings.getDefaultInstance()) return this; + if (other.severity_ != 0) { + setSeverityValue(other.getSeverityValue()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + severity_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private int severity_ = 0; + + /** + * + * + *
+     * Optional. The minimum severity level of Platform Logs that will be written.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings.Severity severity = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The enum numeric value on the wire for severity. + */ + @java.lang.Override + public int getSeverityValue() { + return severity_; + } + + /** + * + * + *
+     * Optional. The minimum severity level of Platform Logs that will be written.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings.Severity severity = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The enum numeric value on the wire for severity to set. + * @return This builder for chaining. + */ + public Builder setSeverityValue(int value) { + severity_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The minimum severity level of Platform Logs that will be written.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings.Severity severity = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The severity. + */ + @java.lang.Override + public com.google.pubsub.v1.PlatformLogsSettings.Severity getSeverity() { + com.google.pubsub.v1.PlatformLogsSettings.Severity result = + com.google.pubsub.v1.PlatformLogsSettings.Severity.forNumber(severity_); + return result == null + ? com.google.pubsub.v1.PlatformLogsSettings.Severity.UNRECOGNIZED + : result; + } + + /** + * + * + *
+     * Optional. The minimum severity level of Platform Logs that will be written.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings.Severity severity = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The severity to set. + * @return This builder for chaining. + */ + public Builder setSeverity(com.google.pubsub.v1.PlatformLogsSettings.Severity value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + severity_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The minimum severity level of Platform Logs that will be written.
+     * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings.Severity severity = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return This builder for chaining. + */ + public Builder clearSeverity() { + bitField0_ = (bitField0_ & ~0x00000001); + severity_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.PlatformLogsSettings) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.PlatformLogsSettings) + private static final com.google.pubsub.v1.PlatformLogsSettings DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.PlatformLogsSettings(); + } + + public static com.google.pubsub.v1.PlatformLogsSettings getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PlatformLogsSettings parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.PlatformLogsSettings getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PlatformLogsSettingsOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PlatformLogsSettingsOrBuilder.java new file mode 100644 index 000000000000..e01f7b068810 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PlatformLogsSettingsOrBuilder.java @@ -0,0 +1,58 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface PlatformLogsSettingsOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.PlatformLogsSettings) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The minimum severity level of Platform Logs that will be written.
+   * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings.Severity severity = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The enum numeric value on the wire for severity. + */ + int getSeverityValue(); + + /** + * + * + *
+   * Optional. The minimum severity level of Platform Logs that will be written.
+   * 
+ * + * + * .google.pubsub.v1.PlatformLogsSettings.Severity severity = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The severity. + */ + com.google.pubsub.v1.PlatformLogsSettings.Severity getSeverity(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectName.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectName.java new file mode 100644 index 000000000000..a4f599b17206 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectName.java @@ -0,0 +1,168 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.pubsub.v1; + +import com.google.api.pathtemplate.PathTemplate; +import com.google.api.resourcenames.ResourceName; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +@Generated("by gapic-generator-java") +public class ProjectName implements ResourceName { + private static final PathTemplate PROJECT = + PathTemplate.createWithoutUrlEncoding("projects/{project}"); + private volatile Map fieldValuesMap; + private final String project; + + @Deprecated + protected ProjectName() { + project = null; + } + + private ProjectName(Builder builder) { + project = Preconditions.checkNotNull(builder.getProject()); + } + + public String getProject() { + return project; + } + + public static Builder newBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + public static ProjectName of(String project) { + return newBuilder().setProject(project).build(); + } + + public static String format(String project) { + return newBuilder().setProject(project).build().toString(); + } + + public static ProjectName parse(String formattedString) { + if (formattedString.isEmpty()) { + return null; + } + Map matchMap = + PROJECT.validatedMatch( + formattedString, "ProjectName.parse: formattedString not in valid format"); + return of(matchMap.get("project")); + } + + public static List parseList(List formattedStrings) { + List list = new ArrayList<>(formattedStrings.size()); + for (String formattedString : formattedStrings) { + list.add(parse(formattedString)); + } + return list; + } + + public static List toStringList(List values) { + List list = new ArrayList<>(values.size()); + for (ProjectName value : values) { + if (value == null) { + list.add(""); + } else { + list.add(value.toString()); + } + } + return list; + } + + public static boolean isParsableFrom(String formattedString) { + return PROJECT.matches(formattedString); + } + + @Override + public Map getFieldValuesMap() { + if (fieldValuesMap == null) { + synchronized (this) { + if (fieldValuesMap == null) { + ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder(); + if (project != null) { + fieldMapBuilder.put("project", project); + } + fieldValuesMap = fieldMapBuilder.build(); + } + } + } + return fieldValuesMap; + } + + public String getFieldValue(String fieldName) { + return getFieldValuesMap().get(fieldName); + } + + @Override + public String toString() { + return PROJECT.instantiate("project", project); + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o != null && getClass() == o.getClass()) { + ProjectName that = ((ProjectName) o); + return Objects.equals(this.project, that.project); + } + return false; + } + + @Override + public int hashCode() { + int h = 1; + h *= 1000003; + h ^= Objects.hashCode(project); + return h; + } + + /** Builder for projects/{project}. */ + public static class Builder { + private String project; + + protected Builder() {} + + public String getProject() { + return project; + } + + public Builder setProject(String project) { + this.project = project; + return this; + } + + private Builder(ProjectName projectName) { + this.project = projectName.project; + } + + public ProjectName build() { + return new ProjectName(this); + } + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectSnapshotName.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectSnapshotName.java new file mode 100644 index 000000000000..1e85333b95ac --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectSnapshotName.java @@ -0,0 +1,182 @@ +/* + * Copyright 2020 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 + * + * https://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. + */ + +package com.google.pubsub.v1; + +import com.google.api.pathtemplate.PathTemplate; +import com.google.api.resourcenames.ResourceName; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** AUTO-GENERATED DOCUMENTATION AND CLASS */ +@javax.annotation.Generated("by GAPIC protoc plugin") +public class ProjectSnapshotName implements ResourceName { + + private static final PathTemplate PATH_TEMPLATE = + PathTemplate.createWithoutUrlEncoding("projects/{project}/snapshots/{snapshot}"); + + private volatile Map fieldValuesMap; + + private final String project; + private final String snapshot; + + public String getProject() { + return project; + } + + public String getSnapshot() { + return snapshot; + } + + public static Builder newBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + private ProjectSnapshotName(Builder builder) { + project = Preconditions.checkNotNull(builder.getProject()); + snapshot = Preconditions.checkNotNull(builder.getSnapshot()); + } + + public static ProjectSnapshotName of(String project, String snapshot) { + return newBuilder().setProject(project).setSnapshot(snapshot).build(); + } + + public static String format(String project, String snapshot) { + return newBuilder().setProject(project).setSnapshot(snapshot).build().toString(); + } + + public static ProjectSnapshotName parse(String formattedString) { + if (formattedString.isEmpty()) { + return null; + } + Map matchMap = + PATH_TEMPLATE.validatedMatch( + formattedString, "ProjectSnapshotName.parse: formattedString not in valid format"); + return of(matchMap.get("project"), matchMap.get("snapshot")); + } + + public static List parseList(List formattedStrings) { + List list = new ArrayList<>(formattedStrings.size()); + for (String formattedString : formattedStrings) { + list.add(parse(formattedString)); + } + return list; + } + + public static List toStringList(List values) { + List list = new ArrayList(values.size()); + for (ProjectSnapshotName value : values) { + if (value == null) { + list.add(""); + } else { + list.add(value.toString()); + } + } + return list; + } + + public static boolean isParsableFrom(String formattedString) { + return PATH_TEMPLATE.matches(formattedString); + } + + public Map getFieldValuesMap() { + if (fieldValuesMap == null) { + synchronized (this) { + if (fieldValuesMap == null) { + ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder(); + fieldMapBuilder.put("project", project); + fieldMapBuilder.put("snapshot", snapshot); + fieldValuesMap = fieldMapBuilder.build(); + } + } + } + return fieldValuesMap; + } + + public String getFieldValue(String fieldName) { + return getFieldValuesMap().get(fieldName); + } + + @Override + public String toString() { + return PATH_TEMPLATE.instantiate("project", project, "snapshot", snapshot); + } + + /** Builder for ProjectSnapshotName. */ + public static class Builder { + + private String project; + private String snapshot; + + public String getProject() { + return project; + } + + public String getSnapshot() { + return snapshot; + } + + public Builder setProject(String project) { + this.project = project; + return this; + } + + public Builder setSnapshot(String snapshot) { + this.snapshot = snapshot; + return this; + } + + private Builder() {} + + private Builder(ProjectSnapshotName projectSnapshotName) { + project = projectSnapshotName.project; + snapshot = projectSnapshotName.snapshot; + } + + public ProjectSnapshotName build() { + return new ProjectSnapshotName(this); + } + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o instanceof ProjectSnapshotName) { + ProjectSnapshotName that = (ProjectSnapshotName) o; + return (this.project.equals(that.project)) && (this.snapshot.equals(that.snapshot)); + } + return false; + } + + @Override + public int hashCode() { + int h = 1; + h *= 1000003; + h ^= project.hashCode(); + h *= 1000003; + h ^= snapshot.hashCode(); + return h; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectSubscriptionName.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectSubscriptionName.java new file mode 100644 index 000000000000..aea87e011ac1 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectSubscriptionName.java @@ -0,0 +1,182 @@ +/* + * Copyright 2020 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 + * + * https://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. + */ + +package com.google.pubsub.v1; + +import com.google.api.pathtemplate.PathTemplate; +import com.google.api.resourcenames.ResourceName; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** AUTO-GENERATED DOCUMENTATION AND CLASS */ +@javax.annotation.Generated("by GAPIC protoc plugin") +public class ProjectSubscriptionName implements ResourceName { + + private static final PathTemplate PATH_TEMPLATE = + PathTemplate.createWithoutUrlEncoding("projects/{project}/subscriptions/{subscription}"); + + private volatile Map fieldValuesMap; + + private final String project; + private final String subscription; + + public String getProject() { + return project; + } + + public String getSubscription() { + return subscription; + } + + public static Builder newBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + private ProjectSubscriptionName(Builder builder) { + project = Preconditions.checkNotNull(builder.getProject()); + subscription = Preconditions.checkNotNull(builder.getSubscription()); + } + + public static ProjectSubscriptionName of(String project, String subscription) { + return newBuilder().setProject(project).setSubscription(subscription).build(); + } + + public static String format(String project, String subscription) { + return newBuilder().setProject(project).setSubscription(subscription).build().toString(); + } + + public static ProjectSubscriptionName parse(String formattedString) { + if (formattedString.isEmpty()) { + return null; + } + Map matchMap = + PATH_TEMPLATE.validatedMatch( + formattedString, "ProjectSubscriptionName.parse: formattedString not in valid format"); + return of(matchMap.get("project"), matchMap.get("subscription")); + } + + public static List parseList(List formattedStrings) { + List list = new ArrayList<>(formattedStrings.size()); + for (String formattedString : formattedStrings) { + list.add(parse(formattedString)); + } + return list; + } + + public static List toStringList(List values) { + List list = new ArrayList(values.size()); + for (ProjectSubscriptionName value : values) { + if (value == null) { + list.add(""); + } else { + list.add(value.toString()); + } + } + return list; + } + + public static boolean isParsableFrom(String formattedString) { + return PATH_TEMPLATE.matches(formattedString); + } + + public Map getFieldValuesMap() { + if (fieldValuesMap == null) { + synchronized (this) { + if (fieldValuesMap == null) { + ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder(); + fieldMapBuilder.put("project", project); + fieldMapBuilder.put("subscription", subscription); + fieldValuesMap = fieldMapBuilder.build(); + } + } + } + return fieldValuesMap; + } + + public String getFieldValue(String fieldName) { + return getFieldValuesMap().get(fieldName); + } + + @Override + public String toString() { + return PATH_TEMPLATE.instantiate("project", project, "subscription", subscription); + } + + /** Builder for ProjectSubscriptionName. */ + public static class Builder { + + private String project; + private String subscription; + + public String getProject() { + return project; + } + + public String getSubscription() { + return subscription; + } + + public Builder setProject(String project) { + this.project = project; + return this; + } + + public Builder setSubscription(String subscription) { + this.subscription = subscription; + return this; + } + + private Builder() {} + + private Builder(ProjectSubscriptionName projectSubscriptionName) { + project = projectSubscriptionName.project; + subscription = projectSubscriptionName.subscription; + } + + public ProjectSubscriptionName build() { + return new ProjectSubscriptionName(this); + } + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o instanceof ProjectSubscriptionName) { + ProjectSubscriptionName that = (ProjectSubscriptionName) o; + return (this.project.equals(that.project)) && (this.subscription.equals(that.subscription)); + } + return false; + } + + @Override + public int hashCode() { + int h = 1; + h *= 1000003; + h ^= project.hashCode(); + h *= 1000003; + h ^= subscription.hashCode(); + return h; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectTopicName.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectTopicName.java new file mode 100644 index 000000000000..6f0a86d375d1 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ProjectTopicName.java @@ -0,0 +1,159 @@ +/* + * Copyright 2020 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 + * + * https://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. + */ + +package com.google.pubsub.v1; + +import com.google.api.pathtemplate.PathTemplate; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.Map; + +/** AUTO-GENERATED DOCUMENTATION AND CLASS */ +@javax.annotation.Generated("by GAPIC protoc plugin") +public class ProjectTopicName extends TopicName { + + private static final PathTemplate PATH_TEMPLATE = + PathTemplate.createWithoutUrlEncoding("projects/{project}/topics/{topic}"); + + private volatile Map fieldValuesMap; + + private final String project; + private final String topic; + + public String getProject() { + return project; + } + + public String getTopic() { + return topic; + } + + public static Builder newBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + private ProjectTopicName(Builder builder) { + project = Preconditions.checkNotNull(builder.getProject()); + topic = Preconditions.checkNotNull(builder.getTopic()); + } + + public static ProjectTopicName of(String project, String topic) { + return newBuilder().setProject(project).setTopic(topic).build(); + } + + public static String format(String project, String topic) { + return newBuilder().setProject(project).setTopic(topic).build().toString(); + } + + public static ProjectTopicName parse(String formattedString) { + if (formattedString.isEmpty()) { + return null; + } + Map matchMap = + PATH_TEMPLATE.validatedMatch( + formattedString, "ProjectTopicName.parse: formattedString not in valid format"); + return of(matchMap.get("project"), matchMap.get("topic")); + } + + public static boolean isParsableFrom(String formattedString) { + return PATH_TEMPLATE.matches(formattedString); + } + + public Map getFieldValuesMap() { + if (fieldValuesMap == null) { + synchronized (this) { + if (fieldValuesMap == null) { + ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder(); + fieldMapBuilder.put("project", project); + fieldMapBuilder.put("topic", topic); + fieldValuesMap = fieldMapBuilder.build(); + } + } + } + return fieldValuesMap; + } + + public String getFieldValue(String fieldName) { + return getFieldValuesMap().get(fieldName); + } + + @Override + public String toString() { + return PATH_TEMPLATE.instantiate("project", project, "topic", topic); + } + + /** Builder for ProjectTopicName. */ + public static class Builder extends TopicName.Builder { + + private String project; + private String topic; + + public String getProject() { + return project; + } + + public String getTopic() { + return topic; + } + + public Builder setProject(String project) { + this.project = project; + return this; + } + + public Builder setTopic(String topic) { + this.topic = topic; + return this; + } + + private Builder() {} + + private Builder(ProjectTopicName projectTopicName) { + project = projectTopicName.project; + topic = projectTopicName.topic; + } + + public ProjectTopicName build() { + return new ProjectTopicName(this); + } + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o instanceof ProjectTopicName) { + ProjectTopicName that = (ProjectTopicName) o; + return (this.project.equals(that.project)) && (this.topic.equals(that.topic)); + } + return false; + } + + @Override + public int hashCode() { + int h = 1; + h *= 1000003; + h ^= project.hashCode(); + h *= 1000003; + h ^= topic.hashCode(); + return h; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublishRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublishRequest.java new file mode 100644 index 000000000000..a98f3bd075ce --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublishRequest.java @@ -0,0 +1,1172 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the Publish method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.PublishRequest} + */ +@com.google.protobuf.Generated +public final class PublishRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.PublishRequest) + PublishRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PublishRequest"); + } + + // Use PublishRequest.newBuilder() to construct. + private PublishRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private PublishRequest() { + topic_ = ""; + messages_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PublishRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PublishRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PublishRequest.class, + com.google.pubsub.v1.PublishRequest.Builder.class); + } + + public static final int TOPIC_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object topic_ = ""; + + /** + * + * + *
+   * Required. The messages in the request will be published on this topic.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + @java.lang.Override + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The messages in the request will be published on this topic.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int MESSAGES_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private java.util.List messages_; + + /** + * + * + *
+   * Required. The messages to publish.
+   * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public java.util.List getMessagesList() { + return messages_; + } + + /** + * + * + *
+   * Required. The messages to publish.
+   * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public java.util.List + getMessagesOrBuilderList() { + return messages_; + } + + /** + * + * + *
+   * Required. The messages to publish.
+   * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public int getMessagesCount() { + return messages_.size(); + } + + /** + * + * + *
+   * Required. The messages to publish.
+   * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.PubsubMessage getMessages(int index) { + return messages_.get(index); + } + + /** + * + * + *
+   * Required. The messages to publish.
+   * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.PubsubMessageOrBuilder getMessagesOrBuilder(int index) { + return messages_.get(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, topic_); + } + for (int i = 0; i < messages_.size(); i++) { + output.writeMessage(2, messages_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, topic_); + } + for (int i = 0; i < messages_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, messages_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.PublishRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.PublishRequest other = (com.google.pubsub.v1.PublishRequest) obj; + + if (!getTopic().equals(other.getTopic())) return false; + if (!getMessagesList().equals(other.getMessagesList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getTopic().hashCode(); + if (getMessagesCount() > 0) { + hash = (37 * hash) + MESSAGES_FIELD_NUMBER; + hash = (53 * hash) + getMessagesList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.PublishRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PublishRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PublishRequest parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PublishRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PublishRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PublishRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PublishRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PublishRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PublishRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PublishRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PublishRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PublishRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.PublishRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the Publish method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.PublishRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.PublishRequest) + com.google.pubsub.v1.PublishRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PublishRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PublishRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PublishRequest.class, + com.google.pubsub.v1.PublishRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.PublishRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + topic_ = ""; + if (messagesBuilder_ == null) { + messages_ = java.util.Collections.emptyList(); + } else { + messages_ = null; + messagesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PublishRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.PublishRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.PublishRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.PublishRequest build() { + com.google.pubsub.v1.PublishRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.PublishRequest buildPartial() { + com.google.pubsub.v1.PublishRequest result = new com.google.pubsub.v1.PublishRequest(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.pubsub.v1.PublishRequest result) { + if (messagesBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0)) { + messages_ = java.util.Collections.unmodifiableList(messages_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.messages_ = messages_; + } else { + result.messages_ = messagesBuilder_.build(); + } + } + + private void buildPartial0(com.google.pubsub.v1.PublishRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.topic_ = topic_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.PublishRequest) { + return mergeFrom((com.google.pubsub.v1.PublishRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.PublishRequest other) { + if (other == com.google.pubsub.v1.PublishRequest.getDefaultInstance()) return this; + if (!other.getTopic().isEmpty()) { + topic_ = other.topic_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (messagesBuilder_ == null) { + if (!other.messages_.isEmpty()) { + if (messages_.isEmpty()) { + messages_ = other.messages_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureMessagesIsMutable(); + messages_.addAll(other.messages_); + } + onChanged(); + } + } else { + if (!other.messages_.isEmpty()) { + if (messagesBuilder_.isEmpty()) { + messagesBuilder_.dispose(); + messagesBuilder_ = null; + messages_ = other.messages_; + bitField0_ = (bitField0_ & ~0x00000002); + messagesBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetMessagesFieldBuilder() + : null; + } else { + messagesBuilder_.addAllMessages(other.messages_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + topic_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + com.google.pubsub.v1.PubsubMessage m = + input.readMessage( + com.google.pubsub.v1.PubsubMessage.parser(), extensionRegistry); + if (messagesBuilder_ == null) { + ensureMessagesIsMutable(); + messages_.add(m); + } else { + messagesBuilder_.addMessage(m); + } + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object topic_ = ""; + + /** + * + * + *
+     * Required. The messages in the request will be published on this topic.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The messages in the request will be published on this topic.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The messages in the request will be published on this topic.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The topic to set. + * @return This builder for chaining. + */ + public Builder setTopic(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + topic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The messages in the request will be published on this topic.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearTopic() { + topic_ = getDefaultInstance().getTopic(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The messages in the request will be published on this topic.
+     * Format is `projects/{project}/topics/{topic}`.
+     * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for topic to set. + * @return This builder for chaining. + */ + public Builder setTopicBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + topic_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.util.List messages_ = + java.util.Collections.emptyList(); + + private void ensureMessagesIsMutable() { + if (!((bitField0_ & 0x00000002) != 0)) { + messages_ = new java.util.ArrayList(messages_); + bitField0_ |= 0x00000002; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.PubsubMessage, + com.google.pubsub.v1.PubsubMessage.Builder, + com.google.pubsub.v1.PubsubMessageOrBuilder> + messagesBuilder_; + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List getMessagesList() { + if (messagesBuilder_ == null) { + return java.util.Collections.unmodifiableList(messages_); + } else { + return messagesBuilder_.getMessageList(); + } + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public int getMessagesCount() { + if (messagesBuilder_ == null) { + return messages_.size(); + } else { + return messagesBuilder_.getCount(); + } + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.pubsub.v1.PubsubMessage getMessages(int index) { + if (messagesBuilder_ == null) { + return messages_.get(index); + } else { + return messagesBuilder_.getMessage(index); + } + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setMessages(int index, com.google.pubsub.v1.PubsubMessage value) { + if (messagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessagesIsMutable(); + messages_.set(index, value); + onChanged(); + } else { + messagesBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setMessages( + int index, com.google.pubsub.v1.PubsubMessage.Builder builderForValue) { + if (messagesBuilder_ == null) { + ensureMessagesIsMutable(); + messages_.set(index, builderForValue.build()); + onChanged(); + } else { + messagesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addMessages(com.google.pubsub.v1.PubsubMessage value) { + if (messagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessagesIsMutable(); + messages_.add(value); + onChanged(); + } else { + messagesBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addMessages(int index, com.google.pubsub.v1.PubsubMessage value) { + if (messagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessagesIsMutable(); + messages_.add(index, value); + onChanged(); + } else { + messagesBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addMessages(com.google.pubsub.v1.PubsubMessage.Builder builderForValue) { + if (messagesBuilder_ == null) { + ensureMessagesIsMutable(); + messages_.add(builderForValue.build()); + onChanged(); + } else { + messagesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addMessages( + int index, com.google.pubsub.v1.PubsubMessage.Builder builderForValue) { + if (messagesBuilder_ == null) { + ensureMessagesIsMutable(); + messages_.add(index, builderForValue.build()); + onChanged(); + } else { + messagesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addAllMessages( + java.lang.Iterable values) { + if (messagesBuilder_ == null) { + ensureMessagesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, messages_); + onChanged(); + } else { + messagesBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearMessages() { + if (messagesBuilder_ == null) { + messages_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + messagesBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder removeMessages(int index) { + if (messagesBuilder_ == null) { + ensureMessagesIsMutable(); + messages_.remove(index); + onChanged(); + } else { + messagesBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.pubsub.v1.PubsubMessage.Builder getMessagesBuilder(int index) { + return internalGetMessagesFieldBuilder().getBuilder(index); + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.pubsub.v1.PubsubMessageOrBuilder getMessagesOrBuilder(int index) { + if (messagesBuilder_ == null) { + return messages_.get(index); + } else { + return messagesBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List + getMessagesOrBuilderList() { + if (messagesBuilder_ != null) { + return messagesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(messages_); + } + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.pubsub.v1.PubsubMessage.Builder addMessagesBuilder() { + return internalGetMessagesFieldBuilder() + .addBuilder(com.google.pubsub.v1.PubsubMessage.getDefaultInstance()); + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.pubsub.v1.PubsubMessage.Builder addMessagesBuilder(int index) { + return internalGetMessagesFieldBuilder() + .addBuilder(index, com.google.pubsub.v1.PubsubMessage.getDefaultInstance()); + } + + /** + * + * + *
+     * Required. The messages to publish.
+     * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List getMessagesBuilderList() { + return internalGetMessagesFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.PubsubMessage, + com.google.pubsub.v1.PubsubMessage.Builder, + com.google.pubsub.v1.PubsubMessageOrBuilder> + internalGetMessagesFieldBuilder() { + if (messagesBuilder_ == null) { + messagesBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.PubsubMessage, + com.google.pubsub.v1.PubsubMessage.Builder, + com.google.pubsub.v1.PubsubMessageOrBuilder>( + messages_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean()); + messages_ = null; + } + return messagesBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.PublishRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.PublishRequest) + private static final com.google.pubsub.v1.PublishRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.PublishRequest(); + } + + public static com.google.pubsub.v1.PublishRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PublishRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.PublishRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublishRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublishRequestOrBuilder.java new file mode 100644 index 000000000000..18f0e8e575fc --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublishRequestOrBuilder.java @@ -0,0 +1,125 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface PublishRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.PublishRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The messages in the request will be published on this topic.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + java.lang.String getTopic(); + + /** + * + * + *
+   * Required. The messages in the request will be published on this topic.
+   * Format is `projects/{project}/topics/{topic}`.
+   * 
+ * + * + * string topic = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + com.google.protobuf.ByteString getTopicBytes(); + + /** + * + * + *
+   * Required. The messages to publish.
+   * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + java.util.List getMessagesList(); + + /** + * + * + *
+   * Required. The messages to publish.
+   * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.pubsub.v1.PubsubMessage getMessages(int index); + + /** + * + * + *
+   * Required. The messages to publish.
+   * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + int getMessagesCount(); + + /** + * + * + *
+   * Required. The messages to publish.
+   * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + java.util.List getMessagesOrBuilderList(); + + /** + * + * + *
+   * Required. The messages to publish.
+   * 
+ * + * + * repeated .google.pubsub.v1.PubsubMessage messages = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.pubsub.v1.PubsubMessageOrBuilder getMessagesOrBuilder(int index); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublishResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublishResponse.java new file mode 100644 index 000000000000..d00cf0040240 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublishResponse.java @@ -0,0 +1,719 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the `Publish` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.PublishResponse} + */ +@com.google.protobuf.Generated +public final class PublishResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.PublishResponse) + PublishResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PublishResponse"); + } + + // Use PublishResponse.newBuilder() to construct. + private PublishResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private PublishResponse() { + messageIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PublishResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PublishResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PublishResponse.class, + com.google.pubsub.v1.PublishResponse.Builder.class); + } + + public static final int MESSAGE_IDS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList messageIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+   * Optional. The server-assigned ID of each published message, in the same
+   * order as the messages in the request. IDs are guaranteed to be unique
+   * within the topic.
+   * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the messageIds. + */ + public com.google.protobuf.ProtocolStringList getMessageIdsList() { + return messageIds_; + } + + /** + * + * + *
+   * Optional. The server-assigned ID of each published message, in the same
+   * order as the messages in the request. IDs are guaranteed to be unique
+   * within the topic.
+   * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of messageIds. + */ + public int getMessageIdsCount() { + return messageIds_.size(); + } + + /** + * + * + *
+   * Optional. The server-assigned ID of each published message, in the same
+   * order as the messages in the request. IDs are guaranteed to be unique
+   * within the topic.
+   * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The messageIds at the given index. + */ + public java.lang.String getMessageIds(int index) { + return messageIds_.get(index); + } + + /** + * + * + *
+   * Optional. The server-assigned ID of each published message, in the same
+   * order as the messages in the request. IDs are guaranteed to be unique
+   * within the topic.
+   * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the messageIds at the given index. + */ + public com.google.protobuf.ByteString getMessageIdsBytes(int index) { + return messageIds_.getByteString(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < messageIds_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, messageIds_.getRaw(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int i = 0; i < messageIds_.size(); i++) { + dataSize += computeStringSizeNoTag(messageIds_.getRaw(i)); + } + size += dataSize; + size += 1 * getMessageIdsList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.PublishResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.PublishResponse other = (com.google.pubsub.v1.PublishResponse) obj; + + if (!getMessageIdsList().equals(other.getMessageIdsList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getMessageIdsCount() > 0) { + hash = (37 * hash) + MESSAGE_IDS_FIELD_NUMBER; + hash = (53 * hash) + getMessageIdsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.PublishResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PublishResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PublishResponse parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PublishResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PublishResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PublishResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PublishResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PublishResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PublishResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PublishResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PublishResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PublishResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.PublishResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the `Publish` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.PublishResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.PublishResponse) + com.google.pubsub.v1.PublishResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PublishResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PublishResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PublishResponse.class, + com.google.pubsub.v1.PublishResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.PublishResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + messageIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PublishResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.PublishResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.PublishResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.PublishResponse build() { + com.google.pubsub.v1.PublishResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.PublishResponse buildPartial() { + com.google.pubsub.v1.PublishResponse result = new com.google.pubsub.v1.PublishResponse(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.PublishResponse result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + messageIds_.makeImmutable(); + result.messageIds_ = messageIds_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.PublishResponse) { + return mergeFrom((com.google.pubsub.v1.PublishResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.PublishResponse other) { + if (other == com.google.pubsub.v1.PublishResponse.getDefaultInstance()) return this; + if (!other.messageIds_.isEmpty()) { + if (messageIds_.isEmpty()) { + messageIds_ = other.messageIds_; + bitField0_ |= 0x00000001; + } else { + ensureMessageIdsIsMutable(); + messageIds_.addAll(other.messageIds_); + } + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureMessageIdsIsMutable(); + messageIds_.add(s); + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.LazyStringArrayList messageIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureMessageIdsIsMutable() { + if (!messageIds_.isModifiable()) { + messageIds_ = new com.google.protobuf.LazyStringArrayList(messageIds_); + } + bitField0_ |= 0x00000001; + } + + /** + * + * + *
+     * Optional. The server-assigned ID of each published message, in the same
+     * order as the messages in the request. IDs are guaranteed to be unique
+     * within the topic.
+     * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the messageIds. + */ + public com.google.protobuf.ProtocolStringList getMessageIdsList() { + messageIds_.makeImmutable(); + return messageIds_; + } + + /** + * + * + *
+     * Optional. The server-assigned ID of each published message, in the same
+     * order as the messages in the request. IDs are guaranteed to be unique
+     * within the topic.
+     * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of messageIds. + */ + public int getMessageIdsCount() { + return messageIds_.size(); + } + + /** + * + * + *
+     * Optional. The server-assigned ID of each published message, in the same
+     * order as the messages in the request. IDs are guaranteed to be unique
+     * within the topic.
+     * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The messageIds at the given index. + */ + public java.lang.String getMessageIds(int index) { + return messageIds_.get(index); + } + + /** + * + * + *
+     * Optional. The server-assigned ID of each published message, in the same
+     * order as the messages in the request. IDs are guaranteed to be unique
+     * within the topic.
+     * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the messageIds at the given index. + */ + public com.google.protobuf.ByteString getMessageIdsBytes(int index) { + return messageIds_.getByteString(index); + } + + /** + * + * + *
+     * Optional. The server-assigned ID of each published message, in the same
+     * order as the messages in the request. IDs are guaranteed to be unique
+     * within the topic.
+     * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index to set the value at. + * @param value The messageIds to set. + * @return This builder for chaining. + */ + public Builder setMessageIds(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessageIdsIsMutable(); + messageIds_.set(index, value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The server-assigned ID of each published message, in the same
+     * order as the messages in the request. IDs are guaranteed to be unique
+     * within the topic.
+     * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The messageIds to add. + * @return This builder for chaining. + */ + public Builder addMessageIds(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessageIdsIsMutable(); + messageIds_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The server-assigned ID of each published message, in the same
+     * order as the messages in the request. IDs are guaranteed to be unique
+     * within the topic.
+     * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param values The messageIds to add. + * @return This builder for chaining. + */ + public Builder addAllMessageIds(java.lang.Iterable values) { + ensureMessageIdsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, messageIds_); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The server-assigned ID of each published message, in the same
+     * order as the messages in the request. IDs are guaranteed to be unique
+     * within the topic.
+     * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearMessageIds() { + messageIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + ; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The server-assigned ID of each published message, in the same
+     * order as the messages in the request. IDs are guaranteed to be unique
+     * within the topic.
+     * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes of the messageIds to add. + * @return This builder for chaining. + */ + public Builder addMessageIdsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureMessageIdsIsMutable(); + messageIds_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.PublishResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.PublishResponse) + private static final com.google.pubsub.v1.PublishResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.PublishResponse(); + } + + public static com.google.pubsub.v1.PublishResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PublishResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.PublishResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublishResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublishResponseOrBuilder.java new file mode 100644 index 000000000000..067a2b2641ed --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PublishResponseOrBuilder.java @@ -0,0 +1,90 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface PublishResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.PublishResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The server-assigned ID of each published message, in the same
+   * order as the messages in the request. IDs are guaranteed to be unique
+   * within the topic.
+   * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the messageIds. + */ + java.util.List getMessageIdsList(); + + /** + * + * + *
+   * Optional. The server-assigned ID of each published message, in the same
+   * order as the messages in the request. IDs are guaranteed to be unique
+   * within the topic.
+   * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of messageIds. + */ + int getMessageIdsCount(); + + /** + * + * + *
+   * Optional. The server-assigned ID of each published message, in the same
+   * order as the messages in the request. IDs are guaranteed to be unique
+   * within the topic.
+   * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The messageIds at the given index. + */ + java.lang.String getMessageIds(int index); + + /** + * + * + *
+   * Optional. The server-assigned ID of each published message, in the same
+   * order as the messages in the request. IDs are guaranteed to be unique
+   * within the topic.
+   * 
+ * + * repeated string message_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the messageIds at the given index. + */ + com.google.protobuf.ByteString getMessageIdsBytes(int index); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PubsubMessage.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PubsubMessage.java new file mode 100644 index 000000000000..ef7fcebb901d --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PubsubMessage.java @@ -0,0 +1,1667 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * A message that is published by publishers and consumed by subscribers. The
+ * message must contain either a non-empty data field or at least one attribute.
+ * Note that client libraries represent this object differently
+ * depending on the language. See the corresponding [client library
+ * documentation](https://cloud.google.com/pubsub/docs/reference/libraries) for
+ * more information. See [quotas and limits]
+ * (https://cloud.google.com/pubsub/quotas) for more information about message
+ * limits.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.PubsubMessage} + */ +@com.google.protobuf.Generated +public final class PubsubMessage extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.PubsubMessage) + PubsubMessageOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PubsubMessage"); + } + + // Use PubsubMessage.newBuilder() to construct. + private PubsubMessage(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private PubsubMessage() { + data_ = com.google.protobuf.ByteString.EMPTY; + messageId_ = ""; + orderingKey_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PubsubMessage_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 2: + return internalGetAttributes(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PubsubMessage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PubsubMessage.class, + com.google.pubsub.v1.PubsubMessage.Builder.class); + } + + private int bitField0_; + public static final int DATA_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
+   * Optional. The message data field. If this field is empty, the message must
+   * contain at least one attribute.
+   * 
+ * + * bytes data = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The data. + */ + @java.lang.Override + public com.google.protobuf.ByteString getData() { + return data_; + } + + public static final int ATTRIBUTES_FIELD_NUMBER = 2; + + private static final class AttributesDefaultEntryHolder { + static final com.google.protobuf.MapEntry defaultEntry = + com.google.protobuf.MapEntry.newDefaultInstance( + com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PubsubMessage_AttributesEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + + @SuppressWarnings("serial") + private com.google.protobuf.MapField attributes_; + + private com.google.protobuf.MapField internalGetAttributes() { + if (attributes_ == null) { + return com.google.protobuf.MapField.emptyMapField(AttributesDefaultEntryHolder.defaultEntry); + } + return attributes_; + } + + public int getAttributesCount() { + return internalGetAttributes().getMap().size(); + } + + /** + * + * + *
+   * Optional. Attributes for this message. If this field is empty, the message
+   * must contain non-empty data. This can be used to filter messages on the
+   * subscription.
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsAttributes(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetAttributes().getMap().containsKey(key); + } + + /** Use {@link #getAttributesMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getAttributes() { + return getAttributesMap(); + } + + /** + * + * + *
+   * Optional. Attributes for this message. If this field is empty, the message
+   * must contain non-empty data. This can be used to filter messages on the
+   * subscription.
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getAttributesMap() { + return internalGetAttributes().getMap(); + } + + /** + * + * + *
+   * Optional. Attributes for this message. If this field is empty, the message
+   * must contain non-empty data. This can be used to filter messages on the
+   * subscription.
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getAttributesOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttributes().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+   * Optional. Attributes for this message. If this field is empty, the message
+   * must contain non-empty data. This can be used to filter messages on the
+   * subscription.
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getAttributesOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttributes().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public static final int MESSAGE_ID_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object messageId_ = ""; + + /** + * + * + *
+   * ID of this message, assigned by the server when the message is published.
+   * Guaranteed to be unique within the topic. This value may be read by a
+   * subscriber that receives a `PubsubMessage` via a `Pull` call or a push
+   * delivery. It must not be populated by the publisher in a `Publish` call.
+   * 
+ * + * string message_id = 3; + * + * @return The messageId. + */ + @java.lang.Override + public java.lang.String getMessageId() { + java.lang.Object ref = messageId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + messageId_ = s; + return s; + } + } + + /** + * + * + *
+   * ID of this message, assigned by the server when the message is published.
+   * Guaranteed to be unique within the topic. This value may be read by a
+   * subscriber that receives a `PubsubMessage` via a `Pull` call or a push
+   * delivery. It must not be populated by the publisher in a `Publish` call.
+   * 
+ * + * string message_id = 3; + * + * @return The bytes for messageId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getMessageIdBytes() { + java.lang.Object ref = messageId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + messageId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PUBLISH_TIME_FIELD_NUMBER = 4; + private com.google.protobuf.Timestamp publishTime_; + + /** + * + * + *
+   * The time at which the message was published, populated by the server when
+   * it receives the `Publish` call. It must not be populated by the
+   * publisher in a `Publish` call.
+   * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + * + * @return Whether the publishTime field is set. + */ + @java.lang.Override + public boolean hasPublishTime() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * The time at which the message was published, populated by the server when
+   * it receives the `Publish` call. It must not be populated by the
+   * publisher in a `Publish` call.
+   * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + * + * @return The publishTime. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getPublishTime() { + return publishTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : publishTime_; + } + + /** + * + * + *
+   * The time at which the message was published, populated by the server when
+   * it receives the `Publish` call. It must not be populated by the
+   * publisher in a `Publish` call.
+   * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getPublishTimeOrBuilder() { + return publishTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : publishTime_; + } + + public static final int ORDERING_KEY_FIELD_NUMBER = 5; + + @SuppressWarnings("serial") + private volatile java.lang.Object orderingKey_ = ""; + + /** + * + * + *
+   * Optional. If non-empty, identifies related messages for which publish order
+   * should be respected. If a `Subscription` has `enable_message_ordering` set
+   * to `true`, messages published with the same non-empty `ordering_key` value
+   * will be delivered to subscribers in the order in which they are received by
+   * the Pub/Sub system. All `PubsubMessage`s published in a given
+   * `PublishRequest` must specify the same `ordering_key` value. For more
+   * information, see [ordering
+   * messages](https://cloud.google.com/pubsub/docs/ordering).
+   * 
+ * + * string ordering_key = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The orderingKey. + */ + @java.lang.Override + public java.lang.String getOrderingKey() { + java.lang.Object ref = orderingKey_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + orderingKey_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. If non-empty, identifies related messages for which publish order
+   * should be respected. If a `Subscription` has `enable_message_ordering` set
+   * to `true`, messages published with the same non-empty `ordering_key` value
+   * will be delivered to subscribers in the order in which they are received by
+   * the Pub/Sub system. All `PubsubMessage`s published in a given
+   * `PublishRequest` must specify the same `ordering_key` value. For more
+   * information, see [ordering
+   * messages](https://cloud.google.com/pubsub/docs/ordering).
+   * 
+ * + * string ordering_key = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for orderingKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString getOrderingKeyBytes() { + java.lang.Object ref = orderingKey_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + orderingKey_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!data_.isEmpty()) { + output.writeBytes(1, data_); + } + com.google.protobuf.GeneratedMessage.serializeStringMapTo( + output, internalGetAttributes(), AttributesDefaultEntryHolder.defaultEntry, 2); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(messageId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, messageId_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(4, getPublishTime()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(orderingKey_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, orderingKey_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!data_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(1, data_); + } + for (java.util.Map.Entry entry : + internalGetAttributes().getMap().entrySet()) { + com.google.protobuf.MapEntry attributes__ = + AttributesDefaultEntryHolder.defaultEntry + .newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, attributes__); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(messageId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, messageId_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getPublishTime()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(orderingKey_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, orderingKey_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.PubsubMessage)) { + return super.equals(obj); + } + com.google.pubsub.v1.PubsubMessage other = (com.google.pubsub.v1.PubsubMessage) obj; + + if (!getData().equals(other.getData())) return false; + if (!internalGetAttributes().equals(other.internalGetAttributes())) return false; + if (!getMessageId().equals(other.getMessageId())) return false; + if (hasPublishTime() != other.hasPublishTime()) return false; + if (hasPublishTime()) { + if (!getPublishTime().equals(other.getPublishTime())) return false; + } + if (!getOrderingKey().equals(other.getOrderingKey())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + DATA_FIELD_NUMBER; + hash = (53 * hash) + getData().hashCode(); + if (!internalGetAttributes().getMap().isEmpty()) { + hash = (37 * hash) + ATTRIBUTES_FIELD_NUMBER; + hash = (53 * hash) + internalGetAttributes().hashCode(); + } + hash = (37 * hash) + MESSAGE_ID_FIELD_NUMBER; + hash = (53 * hash) + getMessageId().hashCode(); + if (hasPublishTime()) { + hash = (37 * hash) + PUBLISH_TIME_FIELD_NUMBER; + hash = (53 * hash) + getPublishTime().hashCode(); + } + hash = (37 * hash) + ORDERING_KEY_FIELD_NUMBER; + hash = (53 * hash) + getOrderingKey().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.PubsubMessage parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PubsubMessage parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PubsubMessage parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PubsubMessage parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PubsubMessage parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PubsubMessage parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PubsubMessage parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PubsubMessage parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PubsubMessage parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PubsubMessage parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PubsubMessage parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PubsubMessage parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.PubsubMessage prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * A message that is published by publishers and consumed by subscribers. The
+   * message must contain either a non-empty data field or at least one attribute.
+   * Note that client libraries represent this object differently
+   * depending on the language. See the corresponding [client library
+   * documentation](https://cloud.google.com/pubsub/docs/reference/libraries) for
+   * more information. See [quotas and limits]
+   * (https://cloud.google.com/pubsub/quotas) for more information about message
+   * limits.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.PubsubMessage} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.PubsubMessage) + com.google.pubsub.v1.PubsubMessageOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PubsubMessage_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 2: + return internalGetAttributes(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 2: + return internalGetMutableAttributes(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PubsubMessage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PubsubMessage.class, + com.google.pubsub.v1.PubsubMessage.Builder.class); + } + + // Construct using com.google.pubsub.v1.PubsubMessage.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetPublishTimeFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + data_ = com.google.protobuf.ByteString.EMPTY; + internalGetMutableAttributes().clear(); + messageId_ = ""; + publishTime_ = null; + if (publishTimeBuilder_ != null) { + publishTimeBuilder_.dispose(); + publishTimeBuilder_ = null; + } + orderingKey_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PubsubMessage_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.PubsubMessage getDefaultInstanceForType() { + return com.google.pubsub.v1.PubsubMessage.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.PubsubMessage build() { + com.google.pubsub.v1.PubsubMessage result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.PubsubMessage buildPartial() { + com.google.pubsub.v1.PubsubMessage result = new com.google.pubsub.v1.PubsubMessage(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.PubsubMessage result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.data_ = data_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.attributes_ = internalGetAttributes(); + result.attributes_.makeImmutable(); + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.messageId_ = messageId_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000008) != 0)) { + result.publishTime_ = + publishTimeBuilder_ == null ? publishTime_ : publishTimeBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.orderingKey_ = orderingKey_; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.PubsubMessage) { + return mergeFrom((com.google.pubsub.v1.PubsubMessage) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.PubsubMessage other) { + if (other == com.google.pubsub.v1.PubsubMessage.getDefaultInstance()) return this; + if (!other.getData().isEmpty()) { + setData(other.getData()); + } + internalGetMutableAttributes().mergeFrom(other.internalGetAttributes()); + bitField0_ |= 0x00000002; + if (!other.getMessageId().isEmpty()) { + messageId_ = other.messageId_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (other.hasPublishTime()) { + mergePublishTime(other.getPublishTime()); + } + if (!other.getOrderingKey().isEmpty()) { + orderingKey_ = other.orderingKey_; + bitField0_ |= 0x00000010; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + data_ = input.readBytes(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + com.google.protobuf.MapEntry attributes__ = + input.readMessage( + AttributesDefaultEntryHolder.defaultEntry.getParserForType(), + extensionRegistry); + internalGetMutableAttributes() + .getMutableMap() + .put(attributes__.getKey(), attributes__.getValue()); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + messageId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + input.readMessage( + internalGetPublishTimeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: + { + orderingKey_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000010; + break; + } // case 42 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
+     * Optional. The message data field. If this field is empty, the message must
+     * contain at least one attribute.
+     * 
+ * + * bytes data = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The data. + */ + @java.lang.Override + public com.google.protobuf.ByteString getData() { + return data_; + } + + /** + * + * + *
+     * Optional. The message data field. If this field is empty, the message must
+     * contain at least one attribute.
+     * 
+ * + * bytes data = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The data to set. + * @return This builder for chaining. + */ + public Builder setData(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + data_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The message data field. If this field is empty, the message must
+     * contain at least one attribute.
+     * 
+ * + * bytes data = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearData() { + bitField0_ = (bitField0_ & ~0x00000001); + data_ = getDefaultInstance().getData(); + onChanged(); + return this; + } + + private com.google.protobuf.MapField attributes_; + + private com.google.protobuf.MapField + internalGetAttributes() { + if (attributes_ == null) { + return com.google.protobuf.MapField.emptyMapField( + AttributesDefaultEntryHolder.defaultEntry); + } + return attributes_; + } + + private com.google.protobuf.MapField + internalGetMutableAttributes() { + if (attributes_ == null) { + attributes_ = + com.google.protobuf.MapField.newMapField(AttributesDefaultEntryHolder.defaultEntry); + } + if (!attributes_.isMutable()) { + attributes_ = attributes_.copy(); + } + bitField0_ |= 0x00000002; + onChanged(); + return attributes_; + } + + public int getAttributesCount() { + return internalGetAttributes().getMap().size(); + } + + /** + * + * + *
+     * Optional. Attributes for this message. If this field is empty, the message
+     * must contain non-empty data. This can be used to filter messages on the
+     * subscription.
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsAttributes(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetAttributes().getMap().containsKey(key); + } + + /** Use {@link #getAttributesMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getAttributes() { + return getAttributesMap(); + } + + /** + * + * + *
+     * Optional. Attributes for this message. If this field is empty, the message
+     * must contain non-empty data. This can be used to filter messages on the
+     * subscription.
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getAttributesMap() { + return internalGetAttributes().getMap(); + } + + /** + * + * + *
+     * Optional. Attributes for this message. If this field is empty, the message
+     * must contain non-empty data. This can be used to filter messages on the
+     * subscription.
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getAttributesOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttributes().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+     * Optional. Attributes for this message. If this field is empty, the message
+     * must contain non-empty data. This can be used to filter messages on the
+     * subscription.
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getAttributesOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttributes().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearAttributes() { + bitField0_ = (bitField0_ & ~0x00000002); + internalGetMutableAttributes().getMutableMap().clear(); + return this; + } + + /** + * + * + *
+     * Optional. Attributes for this message. If this field is empty, the message
+     * must contain non-empty data. This can be used to filter messages on the
+     * subscription.
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeAttributes(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + internalGetMutableAttributes().getMutableMap().remove(key); + return this; + } + + /** Use alternate mutation accessors instead. */ + @java.lang.Deprecated + public java.util.Map getMutableAttributes() { + bitField0_ |= 0x00000002; + return internalGetMutableAttributes().getMutableMap(); + } + + /** + * + * + *
+     * Optional. Attributes for this message. If this field is empty, the message
+     * must contain non-empty data. This can be used to filter messages on the
+     * subscription.
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putAttributes(java.lang.String key, java.lang.String value) { + if (key == null) { + throw new NullPointerException("map key"); + } + if (value == null) { + throw new NullPointerException("map value"); + } + internalGetMutableAttributes().getMutableMap().put(key, value); + bitField0_ |= 0x00000002; + return this; + } + + /** + * + * + *
+     * Optional. Attributes for this message. If this field is empty, the message
+     * must contain non-empty data. This can be used to filter messages on the
+     * subscription.
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putAllAttributes(java.util.Map values) { + internalGetMutableAttributes().getMutableMap().putAll(values); + bitField0_ |= 0x00000002; + return this; + } + + private java.lang.Object messageId_ = ""; + + /** + * + * + *
+     * ID of this message, assigned by the server when the message is published.
+     * Guaranteed to be unique within the topic. This value may be read by a
+     * subscriber that receives a `PubsubMessage` via a `Pull` call or a push
+     * delivery. It must not be populated by the publisher in a `Publish` call.
+     * 
+ * + * string message_id = 3; + * + * @return The messageId. + */ + public java.lang.String getMessageId() { + java.lang.Object ref = messageId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + messageId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * ID of this message, assigned by the server when the message is published.
+     * Guaranteed to be unique within the topic. This value may be read by a
+     * subscriber that receives a `PubsubMessage` via a `Pull` call or a push
+     * delivery. It must not be populated by the publisher in a `Publish` call.
+     * 
+ * + * string message_id = 3; + * + * @return The bytes for messageId. + */ + public com.google.protobuf.ByteString getMessageIdBytes() { + java.lang.Object ref = messageId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + messageId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * ID of this message, assigned by the server when the message is published.
+     * Guaranteed to be unique within the topic. This value may be read by a
+     * subscriber that receives a `PubsubMessage` via a `Pull` call or a push
+     * delivery. It must not be populated by the publisher in a `Publish` call.
+     * 
+ * + * string message_id = 3; + * + * @param value The messageId to set. + * @return This builder for chaining. + */ + public Builder setMessageId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + messageId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * ID of this message, assigned by the server when the message is published.
+     * Guaranteed to be unique within the topic. This value may be read by a
+     * subscriber that receives a `PubsubMessage` via a `Pull` call or a push
+     * delivery. It must not be populated by the publisher in a `Publish` call.
+     * 
+ * + * string message_id = 3; + * + * @return This builder for chaining. + */ + public Builder clearMessageId() { + messageId_ = getDefaultInstance().getMessageId(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+     * ID of this message, assigned by the server when the message is published.
+     * Guaranteed to be unique within the topic. This value may be read by a
+     * subscriber that receives a `PubsubMessage` via a `Pull` call or a push
+     * delivery. It must not be populated by the publisher in a `Publish` call.
+     * 
+ * + * string message_id = 3; + * + * @param value The bytes for messageId to set. + * @return This builder for chaining. + */ + public Builder setMessageIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + messageId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private com.google.protobuf.Timestamp publishTime_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + publishTimeBuilder_; + + /** + * + * + *
+     * The time at which the message was published, populated by the server when
+     * it receives the `Publish` call. It must not be populated by the
+     * publisher in a `Publish` call.
+     * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + * + * @return Whether the publishTime field is set. + */ + public boolean hasPublishTime() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
+     * The time at which the message was published, populated by the server when
+     * it receives the `Publish` call. It must not be populated by the
+     * publisher in a `Publish` call.
+     * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + * + * @return The publishTime. + */ + public com.google.protobuf.Timestamp getPublishTime() { + if (publishTimeBuilder_ == null) { + return publishTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : publishTime_; + } else { + return publishTimeBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * The time at which the message was published, populated by the server when
+     * it receives the `Publish` call. It must not be populated by the
+     * publisher in a `Publish` call.
+     * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + */ + public Builder setPublishTime(com.google.protobuf.Timestamp value) { + if (publishTimeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + publishTime_ = value; + } else { + publishTimeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * The time at which the message was published, populated by the server when
+     * it receives the `Publish` call. It must not be populated by the
+     * publisher in a `Publish` call.
+     * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + */ + public Builder setPublishTime(com.google.protobuf.Timestamp.Builder builderForValue) { + if (publishTimeBuilder_ == null) { + publishTime_ = builderForValue.build(); + } else { + publishTimeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * The time at which the message was published, populated by the server when
+     * it receives the `Publish` call. It must not be populated by the
+     * publisher in a `Publish` call.
+     * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + */ + public Builder mergePublishTime(com.google.protobuf.Timestamp value) { + if (publishTimeBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) + && publishTime_ != null + && publishTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getPublishTimeBuilder().mergeFrom(value); + } else { + publishTime_ = value; + } + } else { + publishTimeBuilder_.mergeFrom(value); + } + if (publishTime_ != null) { + bitField0_ |= 0x00000008; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * The time at which the message was published, populated by the server when
+     * it receives the `Publish` call. It must not be populated by the
+     * publisher in a `Publish` call.
+     * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + */ + public Builder clearPublishTime() { + bitField0_ = (bitField0_ & ~0x00000008); + publishTime_ = null; + if (publishTimeBuilder_ != null) { + publishTimeBuilder_.dispose(); + publishTimeBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * The time at which the message was published, populated by the server when
+     * it receives the `Publish` call. It must not be populated by the
+     * publisher in a `Publish` call.
+     * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + */ + public com.google.protobuf.Timestamp.Builder getPublishTimeBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return internalGetPublishTimeFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * The time at which the message was published, populated by the server when
+     * it receives the `Publish` call. It must not be populated by the
+     * publisher in a `Publish` call.
+     * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + */ + public com.google.protobuf.TimestampOrBuilder getPublishTimeOrBuilder() { + if (publishTimeBuilder_ != null) { + return publishTimeBuilder_.getMessageOrBuilder(); + } else { + return publishTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : publishTime_; + } + } + + /** + * + * + *
+     * The time at which the message was published, populated by the server when
+     * it receives the `Publish` call. It must not be populated by the
+     * publisher in a `Publish` call.
+     * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetPublishTimeFieldBuilder() { + if (publishTimeBuilder_ == null) { + publishTimeBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getPublishTime(), getParentForChildren(), isClean()); + publishTime_ = null; + } + return publishTimeBuilder_; + } + + private java.lang.Object orderingKey_ = ""; + + /** + * + * + *
+     * Optional. If non-empty, identifies related messages for which publish order
+     * should be respected. If a `Subscription` has `enable_message_ordering` set
+     * to `true`, messages published with the same non-empty `ordering_key` value
+     * will be delivered to subscribers in the order in which they are received by
+     * the Pub/Sub system. All `PubsubMessage`s published in a given
+     * `PublishRequest` must specify the same `ordering_key` value. For more
+     * information, see [ordering
+     * messages](https://cloud.google.com/pubsub/docs/ordering).
+     * 
+ * + * string ordering_key = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The orderingKey. + */ + public java.lang.String getOrderingKey() { + java.lang.Object ref = orderingKey_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + orderingKey_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. If non-empty, identifies related messages for which publish order
+     * should be respected. If a `Subscription` has `enable_message_ordering` set
+     * to `true`, messages published with the same non-empty `ordering_key` value
+     * will be delivered to subscribers in the order in which they are received by
+     * the Pub/Sub system. All `PubsubMessage`s published in a given
+     * `PublishRequest` must specify the same `ordering_key` value. For more
+     * information, see [ordering
+     * messages](https://cloud.google.com/pubsub/docs/ordering).
+     * 
+ * + * string ordering_key = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for orderingKey. + */ + public com.google.protobuf.ByteString getOrderingKeyBytes() { + java.lang.Object ref = orderingKey_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + orderingKey_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. If non-empty, identifies related messages for which publish order
+     * should be respected. If a `Subscription` has `enable_message_ordering` set
+     * to `true`, messages published with the same non-empty `ordering_key` value
+     * will be delivered to subscribers in the order in which they are received by
+     * the Pub/Sub system. All `PubsubMessage`s published in a given
+     * `PublishRequest` must specify the same `ordering_key` value. For more
+     * information, see [ordering
+     * messages](https://cloud.google.com/pubsub/docs/ordering).
+     * 
+ * + * string ordering_key = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The orderingKey to set. + * @return This builder for chaining. + */ + public Builder setOrderingKey(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + orderingKey_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If non-empty, identifies related messages for which publish order
+     * should be respected. If a `Subscription` has `enable_message_ordering` set
+     * to `true`, messages published with the same non-empty `ordering_key` value
+     * will be delivered to subscribers in the order in which they are received by
+     * the Pub/Sub system. All `PubsubMessage`s published in a given
+     * `PublishRequest` must specify the same `ordering_key` value. For more
+     * information, see [ordering
+     * messages](https://cloud.google.com/pubsub/docs/ordering).
+     * 
+ * + * string ordering_key = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearOrderingKey() { + orderingKey_ = getDefaultInstance().getOrderingKey(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If non-empty, identifies related messages for which publish order
+     * should be respected. If a `Subscription` has `enable_message_ordering` set
+     * to `true`, messages published with the same non-empty `ordering_key` value
+     * will be delivered to subscribers in the order in which they are received by
+     * the Pub/Sub system. All `PubsubMessage`s published in a given
+     * `PublishRequest` must specify the same `ordering_key` value. For more
+     * information, see [ordering
+     * messages](https://cloud.google.com/pubsub/docs/ordering).
+     * 
+ * + * string ordering_key = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for orderingKey to set. + * @return This builder for chaining. + */ + public Builder setOrderingKeyBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + orderingKey_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.PubsubMessage) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.PubsubMessage) + private static final com.google.pubsub.v1.PubsubMessage DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.PubsubMessage(); + } + + public static com.google.pubsub.v1.PubsubMessage getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PubsubMessage parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.PubsubMessage getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PubsubMessageOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PubsubMessageOrBuilder.java new file mode 100644 index 000000000000..801741079a47 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PubsubMessageOrBuilder.java @@ -0,0 +1,235 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface PubsubMessageOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.PubsubMessage) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The message data field. If this field is empty, the message must
+   * contain at least one attribute.
+   * 
+ * + * bytes data = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The data. + */ + com.google.protobuf.ByteString getData(); + + /** + * + * + *
+   * Optional. Attributes for this message. If this field is empty, the message
+   * must contain non-empty data. This can be used to filter messages on the
+   * subscription.
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getAttributesCount(); + + /** + * + * + *
+   * Optional. Attributes for this message. If this field is empty, the message
+   * must contain non-empty data. This can be used to filter messages on the
+   * subscription.
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + boolean containsAttributes(java.lang.String key); + + /** Use {@link #getAttributesMap()} instead. */ + @java.lang.Deprecated + java.util.Map getAttributes(); + + /** + * + * + *
+   * Optional. Attributes for this message. If this field is empty, the message
+   * must contain non-empty data. This can be used to filter messages on the
+   * subscription.
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.Map getAttributesMap(); + + /** + * + * + *
+   * Optional. Attributes for this message. If this field is empty, the message
+   * must contain non-empty data. This can be used to filter messages on the
+   * subscription.
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + /* nullable */ + java.lang.String getAttributesOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue); + + /** + * + * + *
+   * Optional. Attributes for this message. If this field is empty, the message
+   * must contain non-empty data. This can be used to filter messages on the
+   * subscription.
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.lang.String getAttributesOrThrow(java.lang.String key); + + /** + * + * + *
+   * ID of this message, assigned by the server when the message is published.
+   * Guaranteed to be unique within the topic. This value may be read by a
+   * subscriber that receives a `PubsubMessage` via a `Pull` call or a push
+   * delivery. It must not be populated by the publisher in a `Publish` call.
+   * 
+ * + * string message_id = 3; + * + * @return The messageId. + */ + java.lang.String getMessageId(); + + /** + * + * + *
+   * ID of this message, assigned by the server when the message is published.
+   * Guaranteed to be unique within the topic. This value may be read by a
+   * subscriber that receives a `PubsubMessage` via a `Pull` call or a push
+   * delivery. It must not be populated by the publisher in a `Publish` call.
+   * 
+ * + * string message_id = 3; + * + * @return The bytes for messageId. + */ + com.google.protobuf.ByteString getMessageIdBytes(); + + /** + * + * + *
+   * The time at which the message was published, populated by the server when
+   * it receives the `Publish` call. It must not be populated by the
+   * publisher in a `Publish` call.
+   * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + * + * @return Whether the publishTime field is set. + */ + boolean hasPublishTime(); + + /** + * + * + *
+   * The time at which the message was published, populated by the server when
+   * it receives the `Publish` call. It must not be populated by the
+   * publisher in a `Publish` call.
+   * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + * + * @return The publishTime. + */ + com.google.protobuf.Timestamp getPublishTime(); + + /** + * + * + *
+   * The time at which the message was published, populated by the server when
+   * it receives the `Publish` call. It must not be populated by the
+   * publisher in a `Publish` call.
+   * 
+ * + * .google.protobuf.Timestamp publish_time = 4; + */ + com.google.protobuf.TimestampOrBuilder getPublishTimeOrBuilder(); + + /** + * + * + *
+   * Optional. If non-empty, identifies related messages for which publish order
+   * should be respected. If a `Subscription` has `enable_message_ordering` set
+   * to `true`, messages published with the same non-empty `ordering_key` value
+   * will be delivered to subscribers in the order in which they are received by
+   * the Pub/Sub system. All `PubsubMessage`s published in a given
+   * `PublishRequest` must specify the same `ordering_key` value. For more
+   * information, see [ordering
+   * messages](https://cloud.google.com/pubsub/docs/ordering).
+   * 
+ * + * string ordering_key = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The orderingKey. + */ + java.lang.String getOrderingKey(); + + /** + * + * + *
+   * Optional. If non-empty, identifies related messages for which publish order
+   * should be respected. If a `Subscription` has `enable_message_ordering` set
+   * to `true`, messages published with the same non-empty `ordering_key` value
+   * will be delivered to subscribers in the order in which they are received by
+   * the Pub/Sub system. All `PubsubMessage`s published in a given
+   * `PublishRequest` must specify the same `ordering_key` value. For more
+   * information, see [ordering
+   * messages](https://cloud.google.com/pubsub/docs/ordering).
+   * 
+ * + * string ordering_key = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for orderingKey. + */ + com.google.protobuf.ByteString getOrderingKeyBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PubsubProto.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PubsubProto.java new file mode 100644 index 000000000000..10ab7cdd2daa --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PubsubProto.java @@ -0,0 +1,1961 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public final class PubsubProto extends com.google.protobuf.GeneratedFile { + private PubsubProto() {} + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PubsubProto"); + } + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); + } + + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_MessageStoragePolicy_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_MessageStoragePolicy_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_SchemaSettings_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_SchemaSettings_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionDataSourceSettings_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionDataSourceSettings_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsKinesis_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsKinesis_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_TextFormat_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_TextFormat_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_AvroFormat_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_AvroFormat_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_PubSubAvroFormat_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_PubSubAvroFormat_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AzureEventHubs_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AzureEventHubs_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsMsk_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsMsk_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionDataSourceSettings_ConfluentCloud_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionDataSourceSettings_ConfluentCloud_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_PlatformLogsSettings_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_PlatformLogsSettings_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionFailureEvent_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionFailureEvent_ApiViolationReason_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionFailureEvent_ApiViolationReason_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionFailureEvent_AvroFailureReason_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionFailureEvent_AvroFailureReason_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionFailureEvent_SchemaViolationReason_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionFailureEvent_SchemaViolationReason_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionFailureEvent_MessageTransformationFailureReason_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionFailureEvent_MessageTransformationFailureReason_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionFailureEvent_CloudStorageFailure_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionFailureEvent_CloudStorageFailure_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionFailureEvent_AwsMskFailureReason_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionFailureEvent_AwsMskFailureReason_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionFailureEvent_AzureEventHubsFailureReason_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionFailureEvent_AzureEventHubsFailureReason_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionFailureEvent_ConfluentCloudFailureReason_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionFailureEvent_ConfluentCloudFailureReason_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_IngestionFailureEvent_AwsKinesisFailureReason_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_IngestionFailureEvent_AwsKinesisFailureReason_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_JavaScriptUDF_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_JavaScriptUDF_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_AIInference_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_AIInference_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_AIInference_UnstructuredInference_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_AIInference_UnstructuredInference_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_MessageTransform_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_MessageTransform_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_Topic_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_Topic_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_Topic_LabelsEntry_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_Topic_LabelsEntry_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_Topic_TagsEntry_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_Topic_TagsEntry_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_PubsubMessage_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_PubsubMessage_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_PubsubMessage_AttributesEntry_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_PubsubMessage_AttributesEntry_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_GetTopicRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_GetTopicRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_UpdateTopicRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_UpdateTopicRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_PublishRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_PublishRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_PublishResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_PublishResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListTopicsRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListTopicsRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListTopicsResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListTopicsResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListTopicSubscriptionsRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListTopicSubscriptionsRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListTopicSubscriptionsResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListTopicSubscriptionsResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListTopicSnapshotsRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListTopicSnapshotsRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListTopicSnapshotsResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListTopicSnapshotsResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_DeleteTopicRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_DeleteTopicRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_DetachSubscriptionRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_DetachSubscriptionRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_DetachSubscriptionResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_DetachSubscriptionResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_Subscription_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_Subscription_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_Subscription_AnalyticsHubSubscriptionInfo_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_Subscription_AnalyticsHubSubscriptionInfo_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_Subscription_LabelsEntry_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_Subscription_LabelsEntry_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_Subscription_TagsEntry_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_Subscription_TagsEntry_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_RetryPolicy_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_RetryPolicy_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_DeadLetterPolicy_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_DeadLetterPolicy_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ExpirationPolicy_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ExpirationPolicy_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_PushConfig_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_PushConfig_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_PushConfig_OidcToken_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_PushConfig_OidcToken_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_PushConfig_PubsubWrapper_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_PushConfig_PubsubWrapper_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_PushConfig_NoWrapper_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_PushConfig_NoWrapper_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_PushConfig_AttributesEntry_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_PushConfig_AttributesEntry_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_BigQueryConfig_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_BigQueryConfig_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_BigtableConfig_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_BigtableConfig_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_CloudStorageConfig_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_CloudStorageConfig_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_CloudStorageConfig_TextConfig_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_CloudStorageConfig_TextConfig_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_CloudStorageConfig_AvroConfig_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_CloudStorageConfig_AvroConfig_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ReceivedMessage_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ReceivedMessage_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_GetSubscriptionRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_GetSubscriptionRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_UpdateSubscriptionRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_UpdateSubscriptionRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListSubscriptionsRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListSubscriptionsRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListSubscriptionsResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListSubscriptionsResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_DeleteSubscriptionRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_DeleteSubscriptionRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ModifyPushConfigRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ModifyPushConfigRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_PullRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_PullRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_PullResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_PullResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ModifyAckDeadlineRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ModifyAckDeadlineRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_AcknowledgeRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_AcknowledgeRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_StreamingPullRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_StreamingPullRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_StreamingPullResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_StreamingPullResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_StreamingPullResponse_AcknowledgeConfirmation_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_StreamingPullResponse_AcknowledgeConfirmation_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_StreamingPullResponse_ModifyAckDeadlineConfirmation_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_StreamingPullResponse_ModifyAckDeadlineConfirmation_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_StreamingPullResponse_SubscriptionProperties_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_StreamingPullResponse_SubscriptionProperties_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_CreateSnapshotRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_CreateSnapshotRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_CreateSnapshotRequest_LabelsEntry_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_CreateSnapshotRequest_LabelsEntry_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_CreateSnapshotRequest_TagsEntry_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_CreateSnapshotRequest_TagsEntry_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_UpdateSnapshotRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_UpdateSnapshotRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_Snapshot_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_Snapshot_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_Snapshot_LabelsEntry_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_Snapshot_LabelsEntry_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_GetSnapshotRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_GetSnapshotRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListSnapshotsRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListSnapshotsRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListSnapshotsResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListSnapshotsResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_DeleteSnapshotRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_DeleteSnapshotRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_SeekRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_SeekRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_SeekResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_SeekResponse_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + + static { + java.lang.String[] descriptorData = { + "\n" + + "\035google/pubsub/v1/pubsub.proto\022\020google." + + "pubsub.v1\032\034google/api/annotations.proto\032" + + "\027google/api/client.proto\032\037google/api/fie" + + "ld_behavior.proto\032\031google/api/resource.p" + + "roto\032\036google/protobuf/duration.proto\032\033google/protobuf/empty.proto\032" + + " google/protobuf/field_mask.proto\032\034google/protobuf/str" + + "uct.proto\032\037google/protobuf/timestamp.proto\032\035google/pubsub/v1/schema.proto\"a\n" + + "\024MessageStoragePolicy\022(\n" + + "\033allowed_persistence_regions\030\001 \003(\tB\003\340A\001\022\037\n" + + "\022enforce_in_transit\030\002 \001(\010B\003\340A\001\"\270\001\n" + + "\016SchemaSettings\0224\n" + + "\006schema\030\001 \001(\tB$\340A\002\372A\036\n" + + "\034pubsub.googleapis.com/Schema\0221\n" + + "\010encoding\030\002 \001(\0162\032.google.pubsub.v1.EncodingB\003\340A\001\022\036\n" + + "\021first_revision_id\030\003 \001(\tB\003\340A\001\022\035\n" + + "\020last_revision_id\030\004 \001(\tB\003\340A\001\"\350\027\n" + + "\033IngestionDataSourceSettings\022T\n" + + "\013aws_kinesis\030\001" + + " \001(\01328.google.pubsub.v1.IngestionDataSourceSettings.AwsKinesisB\003\340A\001H\000\022X\n" + + "\r" + + "cloud_storage\030\002 \001(\0132:.google.pubsub.v1." + + "IngestionDataSourceSettings.CloudStorageB\003\340A\001H\000\022]\n" + + "\020azure_event_hubs\030\003 \001(\0132<.goog" + + "le.pubsub.v1.IngestionDataSourceSettings.AzureEventHubsB\003\340A\001H\000\022L\n" + + "\007aws_msk\030\005 \001(\0132" + + "4.google.pubsub.v1.IngestionDataSourceSettings.AwsMskB\003\340A\001H\000\022\\\n" + + "\017confluent_cloud\030\006" + + " \001(\0132<.google.pubsub.v1.IngestionDataSourceSettings.ConfluentCloudB\003\340A\001H\000\022K\n" + + "\026platform_logs_settings\030\004" + + " \001(\0132&.google.pubsub.v1.PlatformLogsSettingsB\003\340A\001\032\352\002\n\n" + + "AwsKinesis\022R\n" + + "\005state\030\001 \001(\0162>.google.pubsub.v1" + + ".IngestionDataSourceSettings.AwsKinesis.StateB\003\340A\003\022\027\n\n" + + "stream_arn\030\002 \001(\tB\003\340A\002\022\031\n" + + "\014consumer_arn\030\003 \001(\tB\003\340A\002\022\031\n" + + "\014aws_role_arn\030\004 \001(\tB\003\340A\002\022 \n" + + "\023gcp_service_account\030\005 \001(\tB\003\340A\002\"\226\001\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\n\n" + + "\006ACTIVE\020\001\022\035\n" + + "\031KINESIS_PERMISSION_DENIED\020\002\022\035\n" + + "\031PUBLISH_PERMISSION_DENIED\020\003\022\024\n" + + "\020STREAM_NOT_FOUND\020\004\022\026\n" + + "\022CONSUMER_NOT_FOUND\020\005\032\225\006\n" + + "\014CloudStorage\022T\n" + + "\005state\030\001 \001(\0162@.google.pu" + + "bsub.v1.IngestionDataSourceSettings.CloudStorage.StateB\003\340A\003\022\023\n" + + "\006bucket\030\002 \001(\tB\003\340A\001\022a\n" + + "\013text_format\030\003 \001(\0132E.google.pubsub.v1" + + ".IngestionDataSourceSettings.CloudStorage.TextFormatB\003\340A\001H\000\022a\n" + + "\013avro_format\030\004 \001(\0132E.google.pubsub.v1.IngestionDataSourceS" + + "ettings.CloudStorage.AvroFormatB\003\340A\001H\000\022n\n" + + "\022pubsub_avro_format\030\005 \001(\0132K.google.pubs" + + "ub.v1.IngestionDataSourceSettings.CloudStorage.PubSubAvroFormatB\003\340A\001H\000\022C\n" + + "\032minimum_object_create_time\030\006" + + " \001(\0132\032.google.protobuf.TimestampB\003\340A\001\022\027\n\n" + + "match_glob\030\t \001(\tB\003\340A\001\0327\n\n" + + "TextFormat\022\033\n" + + "\tdelimiter\030\001 \001(\tB\003\340A\001H\000\210\001\001B\014\n\n" + + "_delimiter\032\014\n\n" + + "AvroFormat\032\022\n" + + "\020PubSubAvroFormat\"\232\001\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\n\n" + + "\006ACTIVE\020\001\022#\n" + + "\037CLOUD_STORAGE_PERMISSION_DENIED\020\002\022\035\n" + + "\031PUBLISH_PERMISSION_DENIED\020\003\022\024\n" + + "\020BUCKET_NOT_FOUND\020\004\022\024\n" + + "\020TOO_MANY_OBJECTS\020\005B\016\n" + + "\014input_format\032\377\003\n" + + "\016AzureEventHubs\022V\n" + + "\005state\030\001 \001(\0162B.google.pubsub.v" + + "1.IngestionDataSourceSettings.AzureEventHubs.StateB\003\340A\003\022\033\n" + + "\016resource_group\030\002 \001(\tB\003\340A\001\022\026\n" + + "\tnamespace\030\003 \001(\tB\003\340A\001\022\026\n" + + "\tevent_hub\030\004 \001(\tB\003\340A\001\022\026\n" + + "\tclient_id\030\005 \001(\tB\003\340A\001\022\026\n" + + "\ttenant_id\030\006 \001(\tB\003\340A\001\022\034\n" + + "\017subscription_id\030\007 \001(\tB\003\340A\001\022 \n" + + "\023gcp_service_account\030\010 \001(\tB\003\340A\001\"\327\001\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\n\n" + + "\006ACTIVE\020\001\022 \n" + + "\034EVENT_HUBS_PERMISSION_DENIED\020\002\022\035\n" + + "\031PUBLISH_PERMISSION_DENIED\020\003\022\027\n" + + "\023NAMESPACE_NOT_FOUND\020\004\022\027\n" + + "\023EVENT_HUB_NOT_FOUND\020\005\022\032\n" + + "\026SUBSCRIPTION_NOT_FOUND\020\006\022\034\n" + + "\030RESOURCE_GROUP_NOT_FOUND\020\007\032\366\002\n" + + "\006AwsMsk\022N\n" + + "\005state\030\001" + + " \001(\0162:.google.pubsub.v1.IngestionDataSourceSettings.AwsMsk.StateB\003\340A\003\022\030\n" + + "\013cluster_arn\030\002 \001(\tB\003\340A\002\0222\n" + + "\005topic\030\003 \001(\tB#\340A\002\372A\035\n" + + "\033pubsub.googleapis.com/Topic\022\031\n" + + "\014aws_role_arn\030\004 \001(\tB\003\340A\002\022 \n" + + "\023gcp_service_account\030\005 \001(\tB\003\340A\002\"\220\001\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\n\n" + + "\006ACTIVE\020\001\022\031\n" + + "\025MSK_PERMISSION_DENIED\020\002\022\035\n" + + "\031PUBLISH_PERMISSION_DENIED\020\003\022\025\n" + + "\021CLUSTER_NOT_FOUND\020\004\022\023\n" + + "\017TOPIC_NOT_FOUND\020\005\032\266\003\n" + + "\016ConfluentCloud\022V\n" + + "\005state\030\001 \001(\0162B.goog" + + "le.pubsub.v1.IngestionDataSourceSettings.ConfluentCloud.StateB\003\340A\003\022\035\n" + + "\020bootstrap_server\030\002 \001(\tB\003\340A\002\022\027\n\n" + + "cluster_id\030\003 \001(\tB\003\340A\002\022\022\n" + + "\005topic\030\004 \001(\tB\003\340A\002\022\035\n" + + "\020identity_pool_id\030\005 \001(\tB\003\340A\002\022 \n" + + "\023gcp_service_account\030\006 \001(\tB\003\340A\002\"\276\001\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\n\n" + + "\006ACTIVE\020\001\022%\n" + + "!CONFLUENT_CLOUD_PERMISSION_DENIED\020\002\022\035\n" + + "\031PUBLISH_PERMISSION_DENIED\020\003\022 \n" + + "\034UNREACHABLE_BOOTSTRAP_SERVER\020\004\022\025\n" + + "\021CLUSTER_NOT_FOUND\020\005\022\023\n" + + "\017TOPIC_NOT_FOUND\020\006B\010\n" + + "\006source\"\277\001\n" + + "\024PlatformLogsSettings\022F\n" + + "\010severity\030\001" + + " \001(\0162/.google.pubsub.v1.PlatformLogsSettings.SeverityB\003\340A\001\"_\n" + + "\010Severity\022\030\n" + + "\024SEVERITY_UNSPECIFIED\020\000\022\014\n" + + "\010DISABLED\020\001\022\t\n" + + "\005DEBUG\020\002\022\010\n" + + "\004INFO\020\003\022\013\n" + + "\007WARNING\020\004\022\t\n" + + "\005ERROR\020\005\"\271\030\n" + + "\025IngestionFailureEvent\0222\n" + + "\005topic\030\001 \001(\tB#\340A\002\372A\035\n" + + "\033pubsub.googleapis.com/Topic\022\032\n\r" + + "error_message\030\002 \001(\tB\003\340A\002\022a\n" + + "\025cloud_storage_failure\030\003 \001(\0132;.google.pubsub.v1" + + ".IngestionFailureEvent.CloudStorageFailureB\003\340A\001H\000\022[\n" + + "\017aws_msk_failure\030\004 \001(\0132;.goo" + + "gle.pubsub.v1.IngestionFailureEvent.AwsMskFailureReasonB\003\340A\001H\000\022l\n" + + "\030azure_event_hubs_failure\030\005 \001(\0132C.google.pubsub.v1.Inge" + + "stionFailureEvent.AzureEventHubsFailureReasonB\003\340A\001H\000\022k\n" + + "\027confluent_cloud_failure\030\006 \001(\0132C.google.pubsub.v1.IngestionFailur" + + "eEvent.ConfluentCloudFailureReasonB\003\340A\001H\000\022c\n" + + "\023aws_kinesis_failure\030\007 \001(\0132?.google." + + "pubsub.v1.IngestionFailureEvent.AwsKinesisFailureReasonB\003\340A\001H\000\032\024\n" + + "\022ApiViolationReason\032\023\n" + + "\021AvroFailureReason\032\027\n" + + "\025SchemaViolationReason\032$\n" + + "\"MessageTransformationFailureReason\032\230\004\n" + + "\023CloudStorageFailure\022\023\n" + + "\006bucket\030\001 \001(\tB\003\340A\001\022\030\n" + + "\013object_name\030\002 \001(\tB\003\340A\001\022\036\n" + + "\021object_generation\030\003 \001(\003B\003\340A\001\022]\n" + + "\023avro_failure_reason\030\005 \001(\01329.google.pubsub.v1." + + "IngestionFailureEvent.AvroFailureReasonB\003\340A\001H\000\022_\n" + + "\024api_violation_reason\030\006 \001(\0132:.g" + + "oogle.pubsub.v1.IngestionFailureEvent.ApiViolationReasonB\003\340A\001H\000\022e\n" + + "\027schema_violation_reason\030\007 \001(\0132=.google.pubsub.v1.Inge" + + "stionFailureEvent.SchemaViolationReasonB\003\340A\001H\000\022\200\001\n" + + "%message_transformation_failure_reason\030\010 \001(\0132J.google.pubsub.v1.Ingest" + + "ionFailureEvent.MessageTransformationFailureReasonB\003\340A\001H\000B\010\n" + + "\006reason\032\316\003\n" + + "\023AwsMskFailureReason\022\030\n" + + "\013cluster_arn\030\001 \001(\tB\003\340A\001\022\030\n" + + "\013kafka_topic\030\002 \001(\tB\003\340A\001\022\031\n" + + "\014partition_id\030\003 \001(\003B\003\340A\001\022\023\n" + + "\006offset\030\004 \001(\003B\003\340A\001\022_\n" + + "\024api_violation_reason\030\005 \001(\0132:.google.pubsub.v1" + + ".IngestionFailureEvent.ApiViolationReasonB\003\340A\001H\000\022e\n" + + "\027schema_violation_reason\030\006 \001(" + + "\0132=.google.pubsub.v1.IngestionFailureEvent.SchemaViolationReasonB\003\340A\001H\000\022\200\001\n" + + "%message_transformation_failure_reason\030\007 \001(\0132" + + "J.google.pubsub.v1.IngestionFailureEvent" + + ".MessageTransformationFailureReasonB\003\340A\001H\000B\010\n" + + "\006reason\032\322\003\n" + + "\033AzureEventHubsFailureReason\022\026\n" + + "\tnamespace\030\001 \001(\tB\003\340A\001\022\026\n" + + "\tevent_hub\030\002 \001(\tB\003\340A\001\022\031\n" + + "\014partition_id\030\003 \001(\003B\003\340A\001\022\023\n" + + "\006offset\030\004 \001(\003B\003\340A\001\022_\n" + + "\024api_violation_reason\030\005" + + " \001(\0132:.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonB\003\340A\001H\000\022e\n" + + "\027schema_violation_reason\030\006 \001(\0132=.google." + + "pubsub.v1.IngestionFailureEvent.SchemaViolationReasonB\003\340A\001H\000\022\200\001\n" + + "%message_transformation_failure_reason\030\007 \001(\0132J.google.pu" + + "bsub.v1.IngestionFailureEvent.MessageTransformationFailureReasonB\003\340A\001H\000B\010\n" + + "\006reason\032\325\003\n" + + "\033ConfluentCloudFailureReason\022\027\n\n" + + "cluster_id\030\001 \001(\tB\003\340A\001\022\030\n" + + "\013kafka_topic\030\002 \001(\tB\003\340A\001\022\031\n" + + "\014partition_id\030\003 \001(\003B\003\340A\001\022\023\n" + + "\006offset\030\004 \001(\003B\003\340A\001\022_\n" + + "\024api_violation_reason\030\005 \001" + + "(\0132:.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonB\003\340A\001H\000\022e\n" + + "\027schema_violation_reason\030\006 \001(\0132=.google.pubsub.v" + + "1.IngestionFailureEvent.SchemaViolationReasonB\003\340A\001H\000\022\200\001\n" + + "%message_transformation_failure_reason\030\007 \001(\0132J.google.pubsub.v1." + + "IngestionFailureEvent.MessageTransformationFailureReasonB\003\340A\001H\000B\010\n" + + "\006reason\032\301\003\n" + + "\027AwsKinesisFailureReason\022\027\n\n" + + "stream_arn\030\001 \001(\tB\003\340A\001\022\032\n\r" + + "partition_key\030\002 \001(\tB\003\340A\001\022\034\n" + + "\017sequence_number\030\003 \001(\tB\003\340A\001\022e\n" + + "\027schema_violation_reason\030\004 \001(\0132=.google.pubsub.v1.Ing" + + "estionFailureEvent.SchemaViolationReasonB\003\340A\001H\000\022\200\001\n" + + "%message_transformation_failure_reason\030\005 \001(\0132J.google.pubsub.v1.Inges" + + "tionFailureEvent.MessageTransformationFailureReasonB\003\340A\001H\000\022_\n" + + "\024api_violation_reason\030\006" + + " \001(\0132:.google.pubsub.v1.IngestionFailureEvent.ApiViolationReasonB\003\340A\001H\000B\010\n" + + "\006reasonB\t\n" + + "\007failure\">\n\r" + + "JavaScriptUDF\022\032\n\r" + + "function_name\030\001 \001(\tB\003\340A\002\022\021\n" + + "\004code\030\002 \001(\tB\003\340A\002\"\201\002\n" + + "\013AIInference\022\025\n" + + "\010endpoint\030\001 \001(\tB\003\340A\002\022Z\n" + + "\026unstructured_inference\030\002 \001(\01323.google" + + ".pubsub.v1.AIInference.UnstructuredInferenceB\003\340A\001H\000\022\"\n" + + "\025service_account_email\030\003 \001(\tB\003\340A\001\032I\n" + + "\025UnstructuredInference\0220\n\n" + + "parameters\030\001 \001(\0132\027.google.protobuf.StructB\003\340A\001B\020\n" + + "\016inference_mode\"\312\001\n" + + "\020MessageTransform\022>\n" + + "\016javascript_udf\030\002" + + " \001(\0132\037.google.pubsub.v1.JavaScriptUDFB\003\340A\001H\000\022:\n" + + "\014ai_inference\030\006" + + " \001(\0132\035.google.pubsub.v1.AIInferenceB\003\340A\001H\000\022\026\n" + + "\007enabled\030\003 \001(\010B\005\030\001\340A\001\022\025\n" + + "\010disabled\030\004 \001(\010B\003\340A\001B\013\n" + + "\ttransform\"\240\007\n" + + "\005Topic\022\024\n" + + "\004name\030\001 \001(\tB\006\340A\002\340A\010\0228\n" + + "\006labels\030\002 \003(\0132#.google.pubsub.v1.Topic.LabelsEntryB\003\340A\001\022K\n" + + "\026message_storage_policy\030\003" + + " \001(\0132&.google.pubsub.v1.MessageStoragePolicyB\003\340A\001\022?\n" + + "\014kms_key_name\030\005 \001(\tB)\340A\001\372A#\n" + + "!cloudkms.googleapis.com/CryptoKey\022>\n" + + "\017schema_settings\030\006 \001(\0132" + + " .google.pubsub.v1.SchemaSettingsB\003\340A\001\022\032\n\r" + + "satisfies_pzs\030\007 \001(\010B\003\340A\001\022B\n" + + "\032message_retention_duration\030\010" + + " \001(\0132\031.google.protobuf.DurationB\003\340A\001\0221\n" + + "\005state\030\t \001(\0162\035.google.pubsub.v1.Topic.StateB\003\340A\003\022Z\n" + + "\036ingestion_data_source_settings\030\n" + + " \001(\0132-.google.pubsub.v1.IngestionDataSourceSettingsB\003\340A\001\022C\n" + + "\022message_transforms\030\r" + + " \003(\0132\".google.pubsub.v1.MessageTransformB\003\340A\001\022:\n" + + "\004tags\030\016 \003(\0132!.google.pubsub.v1.Topic.TagsEntryB" + + "\t\340A\004\340A\005\340A\001\032-\n" + + "\013LabelsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001\032+\n" + + "\tTagsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001\"H\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\n\n" + + "\006ACTIVE\020\001\022\034\n" + + "\030INGESTION_RESOURCE_ERROR\020\002:c\352A`\n" + + "\033pubsub.googleapis." + + "com/Topic\022!projects/{project}/topics/{topic}\022\017_deleted-topic_*\006topics2\005topic\"\200\002\n" + + "\r" + + "PubsubMessage\022\021\n" + + "\004data\030\001 \001(\014B\003\340A\001\022H\n\n" + + "attributes\030\002" + + " \003(\0132/.google.pubsub.v1.PubsubMessage.AttributesEntryB\003\340A\001\022\022\n\n" + + "message_id\030\003 \001(\t\0220\n" + + "\014publish_time\030\004 \001(\0132\032.google.protobuf.Timestamp\022\031\n" + + "\014ordering_key\030\005 \001(\tB\003\340A\001\0321\n" + + "\017AttributesEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001\"E\n" + + "\017GetTopicRequest\0222\n" + + "\005topic\030\001 \001(\tB#\340A\002\372A\035\n" + + "\033pubsub.googleapis.com/Topic\"w\n" + + "\022UpdateTopicRequest\022+\n" + + "\005topic\030\001 \001(\0132\027.google.pubsub.v1.TopicB\003\340A\002\0224\n" + + "\013update_mask\030\002 \001(\0132\032.google.protobuf.FieldMaskB\003\340A\002\"|\n" + + "\016PublishRequest\0222\n" + + "\005topic\030\001 \001(\tB#\340A\002\372A\035\n" + + "\033pubsub.googleapis.com/Topic\0226\n" + + "\010messages\030\002 \003(\0132\037.google.pubsub.v1.PubsubMessageB\003\340A\002\"+\n" + + "\017PublishResponse\022\030\n" + + "\013message_ids\030\001 \003(\tB\003\340A\001\"\212\001\n" + + "\021ListTopicsRequest\022D\n" + + "\007project\030\001 \001(\tB3\340A\002\372A-\n" + + "+cloudresourcemanager.googleapis.com/Project\022\026\n" + + "\tpage_size\030\002 \001(\005B\003\340A\001\022\027\n\n" + + "page_token\030\003 \001(\tB\003\340A\001\"`\n" + + "\022ListTopicsResponse\022,\n" + + "\006topics\030\001 \003(\0132\027.google.pubsub.v1.TopicB\003\340A\001\022\034\n" + + "\017next_page_token\030\002 \001(\tB\003\340A\001\"\204\001\n" + + "\035ListTopicSubscriptionsRequest\0222\n" + + "\005topic\030\001 \001(\tB#\340A\002\372A\035\n" + + "\033pubsub.googleapis.com/Topic\022\026\n" + + "\tpage_size\030\002 \001(\005B\003\340A\001\022\027\n\n" + + "page_token\030\003 \001(\tB\003\340A\001\"\201\001\n" + + "\036ListTopicSubscriptionsResponse\022A\n\r" + + "subscriptions\030\001 \003(\tB*\340A\001\372A$\n" + + "\"pubsub.googleapis.com/Subscription\022\034\n" + + "\017next_page_token\030\002 \001(\tB\003\340A\001\"\200\001\n" + + "\031ListTopicSnapshotsRequest\0222\n" + + "\005topic\030\001 \001(\tB#\340A\002\372A\035\n" + + "\033pubsub.googleapis.com/Topic\022\026\n" + + "\tpage_size\030\002 \001(\005B\003\340A\001\022\027\n\n" + + "page_token\030\003 \001(\tB\003\340A\001\"u\n" + + "\032ListTopicSnapshotsResponse\0229\n" + + "\tsnapshots\030\001 \003(\tB&\340A\001\372A \n" + + "\036pubsub.googleapis.com/Snapshot\022\034\n" + + "\017next_page_token\030\002 \001(\tB\003\340A\001\"H\n" + + "\022DeleteTopicRequest\0222\n" + + "\005topic\030\001 \001(\tB#\340A\002\372A\035\n" + + "\033pubsub.googleapis.com/Topic\"]\n" + + "\031DetachSubscriptionRequest\022@\n" + + "\014subscription\030\001 \001(\tB*\340A\002\372A$\n" + + "\"pubsub.googleapis.com/Subscription\"\034\n" + + "\032DetachSubscriptionResponse\"\350\014\n" + + "\014Subscription\022\024\n" + + "\004name\030\001 \001(\tB\006\340A\002\340A\010\0222\n" + + "\005topic\030\002 \001(\tB#\340A\002\372A\035\n" + + "\033pubsub.googleapis.com/Topic\0226\n" + + "\013push_config\030\004" + + " \001(\0132\034.google.pubsub.v1.PushConfigB\003\340A\001\022>\n" + + "\017bigquery_config\030\022 \001(\0132" + + " .google.pubsub.v1.BigQueryConfigB\003\340A\001\022G\n" + + "\024cloud_storage_config\030\026" + + " \001(\0132$.google.pubsub.v1.CloudStorageConfigB\003\340A\001\022>\n" + + "\017bigtable_config\030\033 \001(\0132" + + " .google.pubsub.v1.BigtableConfigB\003\340A\001\022!\n" + + "\024ack_deadline_seconds\030\005 \001(\005B\003\340A\001\022\"\n" + + "\025retain_acked_messages\030\007 \001(\010B\003\340A\001\022B\n" + + "\032message_retention_duration\030\010" + + " \001(\0132\031.google.protobuf.DurationB\003\340A\001\022?\n" + + "\006labels\030\t \003(\0132*.g" + + "oogle.pubsub.v1.Subscription.LabelsEntryB\003\340A\001\022$\n" + + "\027enable_message_ordering\030\n" + + " \001(\010B\003\340A\001\022B\n" + + "\021expiration_policy\030\013" + + " \001(\0132\".google.pubsub.v1.ExpirationPolicyB\003\340A\001\022\023\n" + + "\006filter\030\014 \001(\tB\003\340A\001\022C\n" + + "\022dead_letter_policy\030\r" + + " \001(\0132\".google.pubsub.v1.DeadLetterPolicyB\003\340A\001\0228\n" + + "\014retry_policy\030\016" + + " \001(\0132\035.google.pubsub.v1.RetryPolicyB\003\340A\001\022\025\n" + + "\010detached\030\017 \001(\010B\003\340A\001\022)\n" + + "\034enable_exactly_once_delivery\030\020 \001(\010B\003\340A\001\022H\n" + + " topic_message_retention_duration\030\021" + + " \001(\0132\031.google.protobuf.DurationB\003\340A\003\0228\n" + + "\005state\030\023 \001(\0162$.google.pubsub.v1.Subscription.StateB\003\340A\003\022i\n" + + "\037analytics_hub_subscription_info\030\027 \001(\0132;.google.pubsub.v1.Su" + + "bscription.AnalyticsHubSubscriptionInfoB\003\340A\003\022C\n" + + "\022message_transforms\030\031" + + " \003(\0132\".google.pubsub.v1.MessageTransformB\003\340A\001\022A\n" + + "\004tags\030\032 \003(\0132(.google.pubsub.v1.Subscription.TagsEntryB" + + "\t\340A\004\340A\005\340A\001\032w\n" + + "\034AnalyticsHubSubscriptionInfo\022<\n" + + "\007listing\030\001 \001(\tB+\340A\001\372A%\n" + + "#analyticshub.googleapis.com/Listing\022\031\n" + + "\014subscription\030\002 \001(\tB\003\340A\001\032-\n" + + "\013LabelsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001\032+\n" + + "\tTagsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001\">\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\n\n" + + "\006ACTIVE\020\001\022\022\n" + + "\016RESOURCE_ERROR\020\002:u\352Ar\n" + + "\"pubsub.googleapi" + + "s.com/Subscription\022/projects/{project}/subscriptions/{subscription}*\r" + + "subscriptions2\014subscription\"\177\n" + + "\013RetryPolicy\0227\n" + + "\017minimum_backoff\030\001" + + " \001(\0132\031.google.protobuf.DurationB\003\340A\001\0227\n" + + "\017maximum_backoff\030\002 \001(\0132\031.google.protobuf.DurationB\003\340A\001\"v\n" + + "\020DeadLetterPolicy\022>\n" + + "\021dead_letter_topic\030\001 \001(\tB#\340A\001\372A\035\n" + + "\033pubsub.googleapis.com/Topic\022\"\n" + + "\025max_delivery_attempts\030\002 \001(\005B\003\340A\001\"?\n" + + "\020ExpirationPolicy\022+\n" + + "\003ttl\030\001 \001(\0132\031.google.protobuf.DurationB\003\340A\001\"\232\004\n\n" + + "PushConfig\022\032\n\r" + + "push_endpoint\030\001 \001(\tB\003\340A\001\022E\n\n" + + "attributes\030\002 \003(\0132,.goog" + + "le.pubsub.v1.PushConfig.AttributesEntryB\003\340A\001\022A\n\n" + + "oidc_token\030\003" + + " \001(\0132&.google.pubsub.v1.PushConfig.OidcTokenB\003\340A\001H\000\022I\n" + + "\016pubsub_wrapper\030\004" + + " \001(\0132*.google.pubsub.v1.PushConfig.PubsubWrapperB\003\340A\001H\001\022A\n\n" + + "no_wrapper\030\005" + + " \001(\0132&.google.pubsub.v1.PushConfig.NoWrapperB\003\340A\001H\001\032F\n" + + "\tOidcToken\022\"\n" + + "\025service_account_email\030\001 \001(\tB\003\340A\001\022\025\n" + + "\010audience\030\002 \001(\tB\003\340A\001\032\017\n\r" + + "PubsubWrapper\032(\n" + + "\tNoWrapper\022\033\n" + + "\016write_metadata\030\001 \001(\010B\003\340A\001\0321\n" + + "\017AttributesEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001B\027\n" + + "\025authentication_methodB\t\n" + + "\007wrapper\"\262\003\n" + + "\016BigQueryConfig\022\022\n" + + "\005table\030\001 \001(\tB\003\340A\001\022\035\n" + + "\020use_topic_schema\030\002 \001(\010B\003\340A\001\022\033\n" + + "\016write_metadata\030\003 \001(\010B\003\340A\001\022 \n" + + "\023drop_unknown_fields\030\004 \001(\010B\003\340A\001\022:\n" + + "\005state\030\005" + + " \001(\0162&.google.pubsub.v1.BigQueryConfig.StateB\003\340A\003\022\035\n" + + "\020use_table_schema\030\006 \001(\010B\003\340A\001\022\"\n" + + "\025service_account_email\030\007 \001(\tB\003\340A\001\"\256\001\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\n\n" + + "\006ACTIVE\020\001\022\025\n" + + "\021PERMISSION_DENIED\020\002\022\r\n" + + "\tNOT_FOUND\020\003\022\023\n" + + "\017SCHEMA_MISMATCH\020\004\022#\n" + + "\037IN_TRANSIT_LOCATION_RESTRICTION\020\005\022\"\n" + + "\036VERTEX_AI_LOCATION_RESTRICTION\020\006\"\216\003\n" + + "\016BigtableConfig\022\022\n" + + "\005table\030\001 \001(\tB\003\340A\001\022\033\n" + + "\016app_profile_id\030\002 \001(\tB\003\340A\001\022\"\n" + + "\025service_account_email\030\003 \001(\tB\003\340A\001\022\033\n" + + "\016write_metadata\030\005 \001(\010B\003\340A\001\022:\n" + + "\005state\030\004" + + " \001(\0162&.google.pubsub.v1.BigtableConfig.StateB\003\340A\003\"\315\001\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\n\n" + + "\006ACTIVE\020\001\022\r\n" + + "\tNOT_FOUND\020\002\022\035\n" + + "\031APP_PROFILE_MISCONFIGURED\020\003\022\025\n" + + "\021PERMISSION_DENIED\020\004\022\023\n" + + "\017SCHEMA_MISMATCH\020\005\022#\n" + + "\037IN_TRANSIT_LOCATION_RESTRICTION\020\006\022\"\n" + + "\036VERTEX_AI_LOCATION_RESTRICTION\020\007\"\215\006\n" + + "\022CloudStorageConfig\022\023\n" + + "\006bucket\030\001 \001(\tB\003\340A\002\022\034\n" + + "\017filename_prefix\030\002 \001(\tB\003\340A\001\022\034\n" + + "\017filename_suffix\030\003 \001(\tB\003\340A\001\022%\n" + + "\030filename_datetime_format\030\n" + + " \001(\tB\003\340A\001\022K\n" + + "\013text_config\030\004 \001(\0132/.goog" + + "le.pubsub.v1.CloudStorageConfig.TextConfigB\003\340A\001H\000\022K\n" + + "\013avro_config\030\005 \001(\0132/.google." + + "pubsub.v1.CloudStorageConfig.AvroConfigB\003\340A\001H\000\0224\n" + + "\014max_duration\030\006" + + " \001(\0132\031.google.protobuf.DurationB\003\340A\001\022\026\n" + + "\tmax_bytes\030\007 \001(\003B\003\340A\001\022\031\n" + + "\014max_messages\030\010 \001(\003B\003\340A\001\022>\n" + + "\005state\030\t" + + " \001(\0162*.google.pubsub.v1.CloudStorageConfig.StateB\003\340A\003\022\"\n" + + "\025service_account_email\030\013 \001(\tB\003\340A\001\032\014\n\n" + + "TextConfig\032H\n\n" + + "AvroConfig\022\033\n" + + "\016write_metadata\030\001 \001(\010B\003\340A\001\022\035\n" + + "\020use_topic_schema\030\002 \001(\010B\003\340A\001\"\256\001\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\n\n" + + "\006ACTIVE\020\001\022\025\n" + + "\021PERMISSION_DENIED\020\002\022\r\n" + + "\tNOT_FOUND\020\003\022#\n" + + "\037IN_TRANSIT_LOCATION_RESTRICTION\020\004\022\023\n" + + "\017SCHEMA_MISMATCH\020\005\022\"\n" + + "\036VERTEX_AI_LOCATION_RESTRICTION\020\006B\017\n\r" + + "output_format\"|\n" + + "\017ReceivedMessage\022\023\n" + + "\006ack_id\030\001 \001(\tB\003\340A\001\0225\n" + + "\007message\030\002" + + " \001(\0132\037.google.pubsub.v1.PubsubMessageB\003\340A\001\022\035\n" + + "\020delivery_attempt\030\003 \001(\005B\003\340A\001\"Z\n" + + "\026GetSubscriptionRequest\022@\n" + + "\014subscription\030\001 \001(\tB*\340A\002\372A$\n" + + "\"pubsub.googleapis.com/Subscription\"\214\001\n" + + "\031UpdateSubscriptionRequest\0229\n" + + "\014subscription\030\001 " + + "\001(\0132\036.google.pubsub.v1.SubscriptionB\003\340A\002\0224\n" + + "\013update_mask\030\002" + + " \001(\0132\032.google.protobuf.FieldMaskB\003\340A\002\"\221\001\n" + + "\030ListSubscriptionsRequest\022D\n" + + "\007project\030\001 \001(\tB3\340A\002\372A-\n" + + "+cloudresourcemanager.googleapis.com/Project\022\026\n" + + "\tpage_size\030\002 \001(\005B\003\340A\001\022\027\n\n" + + "page_token\030\003 \001(\tB\003\340A\001\"u\n" + + "\031ListSubscriptionsResponse\022:\n\r" + + "subscriptions\030\001" + + " \003(\0132\036.google.pubsub.v1.SubscriptionB\003\340A\001\022\034\n" + + "\017next_page_token\030\002 \001(\tB\003\340A\001\"]\n" + + "\031DeleteSubscriptionRequest\022@\n" + + "\014subscription\030\001 \001(\tB*\340A\002\372A$\n" + + "\"pubsub.googleapis.com/Subscription\"\223\001\n" + + "\027ModifyPushConfigRequest\022@\n" + + "\014subscription\030\001 \001(\tB*\340A\002\372A$\n" + + "\"pubsub.googleapis.com/Subscription\0226\n" + + "\013push_config\030\002" + + " \001(\0132\034.google.pubsub.v1.PushConfigB\003\340A\002\"\215\001\n" + + "\013PullRequest\022@\n" + + "\014subscription\030\001 \001(\tB*\340A\002\372A$\n" + + "\"pubsub.googleapis.com/Subscription\022!\n" + + "\022return_immediately\030\002 \001(\010B\005\030\001\340A\001\022\031\n" + + "\014max_messages\030\003 \001(\005B\003\340A\002\"Q\n" + + "\014PullResponse\022A\n" + + "\021received_messages\030\001" + + " \003(\0132!.google.pubsub.v1.ReceivedMessageB\003\340A\001\"\225\001\n" + + "\030ModifyAckDeadlineRequest\022@\n" + + "\014subscription\030\001 \001(\tB*\340A\002\372A$\n" + + "\"pubsub.googleapis.com/Subscription\022\024\n" + + "\007ack_ids\030\004 \003(\tB\003\340A\002\022!\n" + + "\024ack_deadline_seconds\030\003 \001(\005B\003\340A\002\"l\n" + + "\022AcknowledgeRequest\022@\n" + + "\014subscription\030\001 \001(\tB*\340A\002\372A$\n" + + "\"pubsub.googleapis.com/Subscription\022\024\n" + + "\007ack_ids\030\002 \003(\tB\003\340A\002\"\346\002\n" + + "\024StreamingPullRequest\022@\n" + + "\014subscription\030\001 \001(\tB*\340A\002\372A$\n" + + "\"pubsub.googleapis.com/Subscription\022\024\n" + + "\007ack_ids\030\002 \003(\tB\003\340A\001\022$\n" + + "\027modify_deadline_seconds\030\003 \003(\005B\003\340A\001\022$\n" + + "\027modify_deadline_ack_ids\030\004 \003(\tB\003\340A\001\022(\n" + + "\033stream_ack_deadline_seconds\030\005 \001(\005B\003\340A\002\022\026\n" + + "\tclient_id\030\006 \001(\tB\003\340A\001\022%\n" + + "\030max_outstanding_messages\030\007 \001(\003B\003\340A\001\022\"\n" + + "\025max_outstanding_bytes\030\010 \001(\003B\003\340A\001\022\035\n" + + "\020protocol_version\030\n" + + " \001(\003B\003\340A\001\"\236\006\n" + + "\025StreamingPullResponse\022A\n" + + "\021received_messages\030\001" + + " \003(\0132!.google.pubsub.v1.ReceivedMessageB\003\340A\001\022f\n" + + "\030acknowl", + "edge_confirmation\030\005 \001(\0132?.google.pubsub." + + "v1.StreamingPullResponse.AcknowledgeConf" + + "irmationB\003\340A\001\022t\n modify_ack_deadline_con" + + "firmation\030\003 \001(\0132E.google.pubsub.v1.Strea" + + "mingPullResponse.ModifyAckDeadlineConfir" + + "mationB\003\340A\001\022d\n\027subscription_properties\030\004" + + " \001(\0132>.google.pubsub.v1.StreamingPullRes" + + "ponse.SubscriptionPropertiesB\003\340A\001\032\224\001\n\027Ac" + + "knowledgeConfirmation\022\024\n\007ack_ids\030\001 \003(\tB\003" + + "\340A\001\022\034\n\017invalid_ack_ids\030\002 \003(\tB\003\340A\001\022\036\n\021uno" + + "rdered_ack_ids\030\003 \003(\tB\003\340A\001\022%\n\030temporary_f" + + "ailed_ack_ids\030\004 \003(\tB\003\340A\001\032z\n\035ModifyAckDea" + + "dlineConfirmation\022\024\n\007ack_ids\030\001 \003(\tB\003\340A\001\022" + + "\034\n\017invalid_ack_ids\030\002 \003(\tB\003\340A\001\022%\n\030tempora" + + "ry_failed_ack_ids\030\003 \003(\tB\003\340A\001\032k\n\026Subscrip" + + "tionProperties\022*\n\035exactly_once_delivery_" + + "enabled\030\001 \001(\010B\003\340A\001\022%\n\030message_ordering_e" + + "nabled\030\002 \001(\010B\003\340A\001\"\201\003\n\025CreateSnapshotRequ" + + "est\0224\n\004name\030\001 \001(\tB&\340A\002\372A \n\036pubsub.google" + + "apis.com/Snapshot\022@\n\014subscription\030\002 \001(\tB" + + "*\340A\002\372A$\n\"pubsub.googleapis.com/Subscript" + + "ion\022H\n\006labels\030\003 \003(\01323.google.pubsub.v1.C" + + "reateSnapshotRequest.LabelsEntryB\003\340A\001\022J\n" + + "\004tags\030\004 \003(\01321.google.pubsub.v1.CreateSna" + + "pshotRequest.TagsEntryB\t\340A\004\340A\005\340A\001\032-\n\013Lab" + + "elsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001" + + "\032+\n\tTagsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(" + + "\t:\0028\001\"\200\001\n\025UpdateSnapshotRequest\0221\n\010snaps" + + "hot\030\001 \001(\0132\032.google.pubsub.v1.SnapshotB\003\340" + + "A\002\0224\n\013update_mask\030\002 \001(\0132\032.google.protobu" + + "f.FieldMaskB\003\340A\002\"\326\002\n\010Snapshot\022\021\n\004name\030\001 " + + "\001(\tB\003\340A\001\0222\n\005topic\030\002 \001(\tB#\340A\001\372A\035\n\033pubsub." + + "googleapis.com/Topic\0224\n\013expire_time\030\003 \001(" + + "\0132\032.google.protobuf.TimestampB\003\340A\001\022;\n\006la" + + "bels\030\004 \003(\0132&.google.pubsub.v1.Snapshot.L" + + "abelsEntryB\003\340A\001\032-\n\013LabelsEntry\022\013\n\003key\030\001 " + + "\001(\t\022\r\n\005value\030\002 \001(\t:\0028\001:a\352A^\n\036pubsub.goog" + + "leapis.com/Snapshot\022\'projects/{project}/" + + "snapshots/{snapshot}*\tsnapshots2\010snapsho" + + "t\"N\n\022GetSnapshotRequest\0228\n\010snapshot\030\001 \001(" + + "\tB&\340A\002\372A \n\036pubsub.googleapis.com/Snapsho" + + "t\"\215\001\n\024ListSnapshotsRequest\022D\n\007project\030\001 " + + "\001(\tB3\340A\002\372A-\n+cloudresourcemanager.google" + + "apis.com/Project\022\026\n\tpage_size\030\002 \001(\005B\003\340A\001" + + "\022\027\n\npage_token\030\003 \001(\tB\003\340A\001\"i\n\025ListSnapsho" + + "tsResponse\0222\n\tsnapshots\030\001 \003(\0132\032.google.p" + + "ubsub.v1.SnapshotB\003\340A\001\022\034\n\017next_page_toke" + + "n\030\002 \001(\tB\003\340A\001\"Q\n\025DeleteSnapshotRequest\0228\n" + + "\010snapshot\030\001 \001(\tB&\340A\002\372A \n\036pubsub.googleap" + + "is.com/Snapshot\"\306\001\n\013SeekRequest\022@\n\014subsc" + + "ription\030\001 \001(\tB*\340A\002\372A$\n\"pubsub.googleapis" + + ".com/Subscription\022/\n\004time\030\002 \001(\0132\032.google" + + ".protobuf.TimestampB\003\340A\001H\000\022:\n\010snapshot\030\003" + + " \001(\tB&\340A\001\372A \n\036pubsub.googleapis.com/Snap" + + "shotH\000B\010\n\006target\"\016\n\014SeekResponse2\270\013\n\tPub" + + "lisher\022q\n\013CreateTopic\022\027.google.pubsub.v1" + + ".Topic\032\027.google.pubsub.v1.Topic\"0\332A\004name" + + "\202\323\344\223\002#\032\036/v1/{name=projects/*/topics/*}:\001" + + "*\022\221\001\n\013UpdateTopic\022$.google.pubsub.v1.Upd" + + "ateTopicRequest\032\027.google.pubsub.v1.Topic" + + "\"C\332A\021topic,update_mask\202\323\344\223\002)2$/v1/{topic" + + ".name=projects/*/topics/*}:\001*\022\223\001\n\007Publis" + + "h\022 .google.pubsub.v1.PublishRequest\032!.go" + + "ogle.pubsub.v1.PublishResponse\"C\332A\016topic" + + ",messages\202\323\344\223\002,\"\'/v1/{topic=projects/*/t" + + "opics/*}:publish:\001*\022w\n\010GetTopic\022!.google" + + ".pubsub.v1.GetTopicRequest\032\027.google.pubs" + + "ub.v1.Topic\"/\332A\005topic\202\323\344\223\002!\022\037/v1/{topic=" + + "projects/*/topics/*}\022\212\001\n\nListTopics\022#.go" + + "ogle.pubsub.v1.ListTopicsRequest\032$.googl" + + "e.pubsub.v1.ListTopicsResponse\"1\332A\007proje" + + "ct\202\323\344\223\002!\022\037/v1/{project=projects/*}/topic" + + "s\022\272\001\n\026ListTopicSubscriptions\022/.google.pu" + + "bsub.v1.ListTopicSubscriptionsRequest\0320." + + "google.pubsub.v1.ListTopicSubscriptionsR" + + "esponse\"=\332A\005topic\202\323\344\223\002/\022-/v1/{topic=proj" + + "ects/*/topics/*}/subscriptions\022\252\001\n\022ListT" + + "opicSnapshots\022+.google.pubsub.v1.ListTop" + + "icSnapshotsRequest\032,.google.pubsub.v1.Li" + + "stTopicSnapshotsResponse\"9\332A\005topic\202\323\344\223\002+" + + "\022)/v1/{topic=projects/*/topics/*}/snapsh" + + "ots\022|\n\013DeleteTopic\022$.google.pubsub.v1.De" + + "leteTopicRequest\032\026.google.protobuf.Empty" + + "\"/\332A\005topic\202\323\344\223\002!*\037/v1/{topic=projects/*/" + + "topics/*}\022\255\001\n\022DetachSubscription\022+.googl" + + "e.pubsub.v1.DetachSubscriptionRequest\032,." + + "google.pubsub.v1.DetachSubscriptionRespo" + + "nse\"<\202\323\344\223\0026\"4/v1/{subscription=projects/" + + "*/subscriptions/*}:detach\032p\312A\025pubsub.goo" + + "gleapis.com\322AUhttps://www.googleapis.com" + + "/auth/cloud-platform,https://www.googlea" + + "pis.com/auth/pubsub2\322\025\n\nSubscriber\022\264\001\n\022C" + + "reateSubscription\022\036.google.pubsub.v1.Sub" + + "scription\032\036.google.pubsub.v1.Subscriptio" + + "n\"^\332A+name,topic,push_config,ack_deadlin" + + "e_seconds\202\323\344\223\002*\032%/v1/{name=projects/*/su" + + "bscriptions/*}:\001*\022\241\001\n\017GetSubscription\022(." + + "google.pubsub.v1.GetSubscriptionRequest\032" + + "\036.google.pubsub.v1.Subscription\"D\332A\014subs" + + "cription\202\323\344\223\002/\022-/v1/{subscription=projec" + + "ts/*/subscriptions/*}\022\273\001\n\022UpdateSubscrip" + + "tion\022+.google.pubsub.v1.UpdateSubscripti" + + "onRequest\032\036.google.pubsub.v1.Subscriptio" + + "n\"X\332A\030subscription,update_mask\202\323\344\223\002722/v" + + "1/{subscription.name=projects/*/subscrip" + + "tions/*}:\001*\022\246\001\n\021ListSubscriptions\022*.goog" + + "le.pubsub.v1.ListSubscriptionsRequest\032+." + + "google.pubsub.v1.ListSubscriptionsRespon" + + "se\"8\332A\007project\202\323\344\223\002(\022&/v1/{project=proje" + + "cts/*}/subscriptions\022\237\001\n\022DeleteSubscript" + + "ion\022+.google.pubsub.v1.DeleteSubscriptio" + + "nRequest\032\026.google.protobuf.Empty\"D\332A\014sub" + + "scription\202\323\344\223\002/*-/v1/{subscription=proje" + + "cts/*/subscriptions/*}\022\317\001\n\021ModifyAckDead" + + "line\022*.google.pubsub.v1.ModifyAckDeadlin" + + "eRequest\032\026.google.protobuf.Empty\"v\332A)sub" + + "scription,ack_ids,ack_deadline_seconds\202\323" + + "\344\223\002D\"?/v1/{subscription=projects/*/subsc" + + "riptions/*}:modifyAckDeadline:\001*\022\250\001\n\013Ack" + + "nowledge\022$.google.pubsub.v1.AcknowledgeR" + + "equest\032\026.google.protobuf.Empty\"[\332A\024subsc" + + "ription,ack_ids\202\323\344\223\002>\"9/v1/{subscription" + + "=projects/*/subscriptions/*}:acknowledge" + + ":\001*\022\320\001\n\004Pull\022\035.google.pubsub.v1.PullRequ" + + "est\032\036.google.pubsub.v1.PullResponse\"\210\001\332A" + + ",subscription,return_immediately,max_mes" + + "sages\332A\031subscription,max_messages\202\323\344\223\0027\"" + + "2/v1/{subscription=projects/*/subscripti" + + "ons/*}:pull:\001*\022f\n\rStreamingPull\022&.google" + + ".pubsub.v1.StreamingPullRequest\032\'.google" + + ".pubsub.v1.StreamingPullResponse\"\000(\0010\001\022\273" + + "\001\n\020ModifyPushConfig\022).google.pubsub.v1.M" + + "odifyPushConfigRequest\032\026.google.protobuf" + + ".Empty\"d\332A\030subscription,push_config\202\323\344\223\002" + + "C\">/v1/{subscription=projects/*/subscrip" + + "tions/*}:modifyPushConfig:\001*\022\211\001\n\013GetSnap" + + "shot\022$.google.pubsub.v1.GetSnapshotReque" + + "st\032\032.google.pubsub.v1.Snapshot\"8\332A\010snaps" + + "hot\202\323\344\223\002\'\022%/v1/{snapshot=projects/*/snap" + + "shots/*}\022\226\001\n\rListSnapshots\022&.google.pubs" + + "ub.v1.ListSnapshotsRequest\032\'.google.pubs" + + "ub.v1.ListSnapshotsResponse\"4\332A\007project\202" + + "\323\344\223\002$\022\"/v1/{project=projects/*}/snapshot" + + "s\022\227\001\n\016CreateSnapshot\022\'.google.pubsub.v1." + + "CreateSnapshotRequest\032\032.google.pubsub.v1" + + ".Snapshot\"@\332A\021name,subscription\202\323\344\223\002&\032!/" + + "v1/{name=projects/*/snapshots/*}:\001*\022\243\001\n\016" + + "UpdateSnapshot\022\'.google.pubsub.v1.Update" + + "SnapshotRequest\032\032.google.pubsub.v1.Snaps" + + "hot\"L\332A\024snapshot,update_mask\202\323\344\223\002/2*/v1/" + + "{snapshot.name=projects/*/snapshots/*}:\001" + + "*\022\213\001\n\016DeleteSnapshot\022\'.google.pubsub.v1." + + "DeleteSnapshotRequest\032\026.google.protobuf." + + "Empty\"8\332A\010snapshot\202\323\344\223\002\'*%/v1/{snapshot=" + + "projects/*/snapshots/*}\022\204\001\n\004Seek\022\035.googl" + + "e.pubsub.v1.SeekRequest\032\036.google.pubsub." + + "v1.SeekResponse\"=\202\323\344\223\0027\"2/v1/{subscripti" + + "on=projects/*/subscriptions/*}:seek:\001*\032p" + + "\312A\025pubsub.googleapis.com\322AUhttps://www.g" + + "oogleapis.com/auth/cloud-platform,https:" + + "//www.googleapis.com/auth/pubsubB\247\003\n\024com" + + ".google.pubsub.v1B\013PubsubProtoP\001Z5cloud." + + "google.com/go/pubsub/v2/apiv1/pubsubpb;p" + + "ubsubpb\252\002\026Google.Cloud.PubSub.V1\312\002\026Googl" + + "e\\Cloud\\PubSub\\V1\352\002\031Google::Cloud::PubSu" + + "b::V1\352Ax\n!cloudkms.googleapis.com/Crypto" + + "Key\022Sprojects/{project}/locations/{locat" + + "ion}/keyRings/{key_ring}/cryptoKeys/{cry" + + "pto_key}\352A\177\n#analyticshub.googleapis.com" + + "/Listing\022Xprojects/{project}/locations/{" + + "location}/dataExchanges/{data_exchange}/" + + "listings/{listing}b\006proto3" + }; + descriptor = + com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( + descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + com.google.api.AnnotationsProto.getDescriptor(), + com.google.api.ClientProto.getDescriptor(), + com.google.api.FieldBehaviorProto.getDescriptor(), + com.google.api.ResourceProto.getDescriptor(), + com.google.protobuf.DurationProto.getDescriptor(), + com.google.protobuf.EmptyProto.getDescriptor(), + com.google.protobuf.FieldMaskProto.getDescriptor(), + com.google.protobuf.StructProto.getDescriptor(), + com.google.protobuf.TimestampProto.getDescriptor(), + com.google.pubsub.v1.SchemaProto.getDescriptor(), + }); + internal_static_google_pubsub_v1_MessageStoragePolicy_descriptor = + getDescriptor().getMessageType(0); + internal_static_google_pubsub_v1_MessageStoragePolicy_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_MessageStoragePolicy_descriptor, + new java.lang.String[] { + "AllowedPersistenceRegions", "EnforceInTransit", + }); + internal_static_google_pubsub_v1_SchemaSettings_descriptor = getDescriptor().getMessageType(1); + internal_static_google_pubsub_v1_SchemaSettings_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_SchemaSettings_descriptor, + new java.lang.String[] { + "Schema", "Encoding", "FirstRevisionId", "LastRevisionId", + }); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_descriptor = + getDescriptor().getMessageType(2); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionDataSourceSettings_descriptor, + new java.lang.String[] { + "AwsKinesis", + "CloudStorage", + "AzureEventHubs", + "AwsMsk", + "ConfluentCloud", + "PlatformLogsSettings", + "Source", + }); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsKinesis_descriptor = + internal_static_google_pubsub_v1_IngestionDataSourceSettings_descriptor.getNestedType(0); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsKinesis_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsKinesis_descriptor, + new java.lang.String[] { + "State", "StreamArn", "ConsumerArn", "AwsRoleArn", "GcpServiceAccount", + }); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_descriptor = + internal_static_google_pubsub_v1_IngestionDataSourceSettings_descriptor.getNestedType(1); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_descriptor, + new java.lang.String[] { + "State", + "Bucket", + "TextFormat", + "AvroFormat", + "PubsubAvroFormat", + "MinimumObjectCreateTime", + "MatchGlob", + "InputFormat", + }); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_TextFormat_descriptor = + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_descriptor + .getNestedType(0); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_TextFormat_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_TextFormat_descriptor, + new java.lang.String[] { + "Delimiter", + }); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_AvroFormat_descriptor = + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_descriptor + .getNestedType(1); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_AvroFormat_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_AvroFormat_descriptor, + new java.lang.String[] {}); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_PubSubAvroFormat_descriptor = + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_descriptor + .getNestedType(2); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_PubSubAvroFormat_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionDataSourceSettings_CloudStorage_PubSubAvroFormat_descriptor, + new java.lang.String[] {}); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AzureEventHubs_descriptor = + internal_static_google_pubsub_v1_IngestionDataSourceSettings_descriptor.getNestedType(2); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AzureEventHubs_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AzureEventHubs_descriptor, + new java.lang.String[] { + "State", + "ResourceGroup", + "Namespace", + "EventHub", + "ClientId", + "TenantId", + "SubscriptionId", + "GcpServiceAccount", + }); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsMsk_descriptor = + internal_static_google_pubsub_v1_IngestionDataSourceSettings_descriptor.getNestedType(3); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsMsk_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionDataSourceSettings_AwsMsk_descriptor, + new java.lang.String[] { + "State", "ClusterArn", "Topic", "AwsRoleArn", "GcpServiceAccount", + }); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_ConfluentCloud_descriptor = + internal_static_google_pubsub_v1_IngestionDataSourceSettings_descriptor.getNestedType(4); + internal_static_google_pubsub_v1_IngestionDataSourceSettings_ConfluentCloud_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionDataSourceSettings_ConfluentCloud_descriptor, + new java.lang.String[] { + "State", + "BootstrapServer", + "ClusterId", + "Topic", + "IdentityPoolId", + "GcpServiceAccount", + }); + internal_static_google_pubsub_v1_PlatformLogsSettings_descriptor = + getDescriptor().getMessageType(3); + internal_static_google_pubsub_v1_PlatformLogsSettings_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_PlatformLogsSettings_descriptor, + new java.lang.String[] { + "Severity", + }); + internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor = + getDescriptor().getMessageType(4); + internal_static_google_pubsub_v1_IngestionFailureEvent_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor, + new java.lang.String[] { + "Topic", + "ErrorMessage", + "CloudStorageFailure", + "AwsMskFailure", + "AzureEventHubsFailure", + "ConfluentCloudFailure", + "AwsKinesisFailure", + "Failure", + }); + internal_static_google_pubsub_v1_IngestionFailureEvent_ApiViolationReason_descriptor = + internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor.getNestedType(0); + internal_static_google_pubsub_v1_IngestionFailureEvent_ApiViolationReason_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionFailureEvent_ApiViolationReason_descriptor, + new java.lang.String[] {}); + internal_static_google_pubsub_v1_IngestionFailureEvent_AvroFailureReason_descriptor = + internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor.getNestedType(1); + internal_static_google_pubsub_v1_IngestionFailureEvent_AvroFailureReason_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionFailureEvent_AvroFailureReason_descriptor, + new java.lang.String[] {}); + internal_static_google_pubsub_v1_IngestionFailureEvent_SchemaViolationReason_descriptor = + internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor.getNestedType(2); + internal_static_google_pubsub_v1_IngestionFailureEvent_SchemaViolationReason_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionFailureEvent_SchemaViolationReason_descriptor, + new java.lang.String[] {}); + internal_static_google_pubsub_v1_IngestionFailureEvent_MessageTransformationFailureReason_descriptor = + internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor.getNestedType(3); + internal_static_google_pubsub_v1_IngestionFailureEvent_MessageTransformationFailureReason_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionFailureEvent_MessageTransformationFailureReason_descriptor, + new java.lang.String[] {}); + internal_static_google_pubsub_v1_IngestionFailureEvent_CloudStorageFailure_descriptor = + internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor.getNestedType(4); + internal_static_google_pubsub_v1_IngestionFailureEvent_CloudStorageFailure_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionFailureEvent_CloudStorageFailure_descriptor, + new java.lang.String[] { + "Bucket", + "ObjectName", + "ObjectGeneration", + "AvroFailureReason", + "ApiViolationReason", + "SchemaViolationReason", + "MessageTransformationFailureReason", + "Reason", + }); + internal_static_google_pubsub_v1_IngestionFailureEvent_AwsMskFailureReason_descriptor = + internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor.getNestedType(5); + internal_static_google_pubsub_v1_IngestionFailureEvent_AwsMskFailureReason_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionFailureEvent_AwsMskFailureReason_descriptor, + new java.lang.String[] { + "ClusterArn", + "KafkaTopic", + "PartitionId", + "Offset", + "ApiViolationReason", + "SchemaViolationReason", + "MessageTransformationFailureReason", + "Reason", + }); + internal_static_google_pubsub_v1_IngestionFailureEvent_AzureEventHubsFailureReason_descriptor = + internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor.getNestedType(6); + internal_static_google_pubsub_v1_IngestionFailureEvent_AzureEventHubsFailureReason_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionFailureEvent_AzureEventHubsFailureReason_descriptor, + new java.lang.String[] { + "Namespace", + "EventHub", + "PartitionId", + "Offset", + "ApiViolationReason", + "SchemaViolationReason", + "MessageTransformationFailureReason", + "Reason", + }); + internal_static_google_pubsub_v1_IngestionFailureEvent_ConfluentCloudFailureReason_descriptor = + internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor.getNestedType(7); + internal_static_google_pubsub_v1_IngestionFailureEvent_ConfluentCloudFailureReason_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionFailureEvent_ConfluentCloudFailureReason_descriptor, + new java.lang.String[] { + "ClusterId", + "KafkaTopic", + "PartitionId", + "Offset", + "ApiViolationReason", + "SchemaViolationReason", + "MessageTransformationFailureReason", + "Reason", + }); + internal_static_google_pubsub_v1_IngestionFailureEvent_AwsKinesisFailureReason_descriptor = + internal_static_google_pubsub_v1_IngestionFailureEvent_descriptor.getNestedType(8); + internal_static_google_pubsub_v1_IngestionFailureEvent_AwsKinesisFailureReason_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_IngestionFailureEvent_AwsKinesisFailureReason_descriptor, + new java.lang.String[] { + "StreamArn", + "PartitionKey", + "SequenceNumber", + "SchemaViolationReason", + "MessageTransformationFailureReason", + "ApiViolationReason", + "Reason", + }); + internal_static_google_pubsub_v1_JavaScriptUDF_descriptor = getDescriptor().getMessageType(5); + internal_static_google_pubsub_v1_JavaScriptUDF_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_JavaScriptUDF_descriptor, + new java.lang.String[] { + "FunctionName", "Code", + }); + internal_static_google_pubsub_v1_AIInference_descriptor = getDescriptor().getMessageType(6); + internal_static_google_pubsub_v1_AIInference_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_AIInference_descriptor, + new java.lang.String[] { + "Endpoint", "UnstructuredInference", "ServiceAccountEmail", "InferenceMode", + }); + internal_static_google_pubsub_v1_AIInference_UnstructuredInference_descriptor = + internal_static_google_pubsub_v1_AIInference_descriptor.getNestedType(0); + internal_static_google_pubsub_v1_AIInference_UnstructuredInference_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_AIInference_UnstructuredInference_descriptor, + new java.lang.String[] { + "Parameters", + }); + internal_static_google_pubsub_v1_MessageTransform_descriptor = + getDescriptor().getMessageType(7); + internal_static_google_pubsub_v1_MessageTransform_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_MessageTransform_descriptor, + new java.lang.String[] { + "JavascriptUdf", "AiInference", "Enabled", "Disabled", "Transform", + }); + internal_static_google_pubsub_v1_Topic_descriptor = getDescriptor().getMessageType(8); + internal_static_google_pubsub_v1_Topic_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_Topic_descriptor, + new java.lang.String[] { + "Name", + "Labels", + "MessageStoragePolicy", + "KmsKeyName", + "SchemaSettings", + "SatisfiesPzs", + "MessageRetentionDuration", + "State", + "IngestionDataSourceSettings", + "MessageTransforms", + "Tags", + }); + internal_static_google_pubsub_v1_Topic_LabelsEntry_descriptor = + internal_static_google_pubsub_v1_Topic_descriptor.getNestedType(0); + internal_static_google_pubsub_v1_Topic_LabelsEntry_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_Topic_LabelsEntry_descriptor, + new java.lang.String[] { + "Key", "Value", + }); + internal_static_google_pubsub_v1_Topic_TagsEntry_descriptor = + internal_static_google_pubsub_v1_Topic_descriptor.getNestedType(1); + internal_static_google_pubsub_v1_Topic_TagsEntry_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_Topic_TagsEntry_descriptor, + new java.lang.String[] { + "Key", "Value", + }); + internal_static_google_pubsub_v1_PubsubMessage_descriptor = getDescriptor().getMessageType(9); + internal_static_google_pubsub_v1_PubsubMessage_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_PubsubMessage_descriptor, + new java.lang.String[] { + "Data", "Attributes", "MessageId", "PublishTime", "OrderingKey", + }); + internal_static_google_pubsub_v1_PubsubMessage_AttributesEntry_descriptor = + internal_static_google_pubsub_v1_PubsubMessage_descriptor.getNestedType(0); + internal_static_google_pubsub_v1_PubsubMessage_AttributesEntry_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_PubsubMessage_AttributesEntry_descriptor, + new java.lang.String[] { + "Key", "Value", + }); + internal_static_google_pubsub_v1_GetTopicRequest_descriptor = + getDescriptor().getMessageType(10); + internal_static_google_pubsub_v1_GetTopicRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_GetTopicRequest_descriptor, + new java.lang.String[] { + "Topic", + }); + internal_static_google_pubsub_v1_UpdateTopicRequest_descriptor = + getDescriptor().getMessageType(11); + internal_static_google_pubsub_v1_UpdateTopicRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_UpdateTopicRequest_descriptor, + new java.lang.String[] { + "Topic", "UpdateMask", + }); + internal_static_google_pubsub_v1_PublishRequest_descriptor = getDescriptor().getMessageType(12); + internal_static_google_pubsub_v1_PublishRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_PublishRequest_descriptor, + new java.lang.String[] { + "Topic", "Messages", + }); + internal_static_google_pubsub_v1_PublishResponse_descriptor = + getDescriptor().getMessageType(13); + internal_static_google_pubsub_v1_PublishResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_PublishResponse_descriptor, + new java.lang.String[] { + "MessageIds", + }); + internal_static_google_pubsub_v1_ListTopicsRequest_descriptor = + getDescriptor().getMessageType(14); + internal_static_google_pubsub_v1_ListTopicsRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListTopicsRequest_descriptor, + new java.lang.String[] { + "Project", "PageSize", "PageToken", + }); + internal_static_google_pubsub_v1_ListTopicsResponse_descriptor = + getDescriptor().getMessageType(15); + internal_static_google_pubsub_v1_ListTopicsResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListTopicsResponse_descriptor, + new java.lang.String[] { + "Topics", "NextPageToken", + }); + internal_static_google_pubsub_v1_ListTopicSubscriptionsRequest_descriptor = + getDescriptor().getMessageType(16); + internal_static_google_pubsub_v1_ListTopicSubscriptionsRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListTopicSubscriptionsRequest_descriptor, + new java.lang.String[] { + "Topic", "PageSize", "PageToken", + }); + internal_static_google_pubsub_v1_ListTopicSubscriptionsResponse_descriptor = + getDescriptor().getMessageType(17); + internal_static_google_pubsub_v1_ListTopicSubscriptionsResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListTopicSubscriptionsResponse_descriptor, + new java.lang.String[] { + "Subscriptions", "NextPageToken", + }); + internal_static_google_pubsub_v1_ListTopicSnapshotsRequest_descriptor = + getDescriptor().getMessageType(18); + internal_static_google_pubsub_v1_ListTopicSnapshotsRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListTopicSnapshotsRequest_descriptor, + new java.lang.String[] { + "Topic", "PageSize", "PageToken", + }); + internal_static_google_pubsub_v1_ListTopicSnapshotsResponse_descriptor = + getDescriptor().getMessageType(19); + internal_static_google_pubsub_v1_ListTopicSnapshotsResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListTopicSnapshotsResponse_descriptor, + new java.lang.String[] { + "Snapshots", "NextPageToken", + }); + internal_static_google_pubsub_v1_DeleteTopicRequest_descriptor = + getDescriptor().getMessageType(20); + internal_static_google_pubsub_v1_DeleteTopicRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_DeleteTopicRequest_descriptor, + new java.lang.String[] { + "Topic", + }); + internal_static_google_pubsub_v1_DetachSubscriptionRequest_descriptor = + getDescriptor().getMessageType(21); + internal_static_google_pubsub_v1_DetachSubscriptionRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_DetachSubscriptionRequest_descriptor, + new java.lang.String[] { + "Subscription", + }); + internal_static_google_pubsub_v1_DetachSubscriptionResponse_descriptor = + getDescriptor().getMessageType(22); + internal_static_google_pubsub_v1_DetachSubscriptionResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_DetachSubscriptionResponse_descriptor, + new java.lang.String[] {}); + internal_static_google_pubsub_v1_Subscription_descriptor = getDescriptor().getMessageType(23); + internal_static_google_pubsub_v1_Subscription_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_Subscription_descriptor, + new java.lang.String[] { + "Name", + "Topic", + "PushConfig", + "BigqueryConfig", + "CloudStorageConfig", + "BigtableConfig", + "AckDeadlineSeconds", + "RetainAckedMessages", + "MessageRetentionDuration", + "Labels", + "EnableMessageOrdering", + "ExpirationPolicy", + "Filter", + "DeadLetterPolicy", + "RetryPolicy", + "Detached", + "EnableExactlyOnceDelivery", + "TopicMessageRetentionDuration", + "State", + "AnalyticsHubSubscriptionInfo", + "MessageTransforms", + "Tags", + }); + internal_static_google_pubsub_v1_Subscription_AnalyticsHubSubscriptionInfo_descriptor = + internal_static_google_pubsub_v1_Subscription_descriptor.getNestedType(0); + internal_static_google_pubsub_v1_Subscription_AnalyticsHubSubscriptionInfo_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_Subscription_AnalyticsHubSubscriptionInfo_descriptor, + new java.lang.String[] { + "Listing", "Subscription", + }); + internal_static_google_pubsub_v1_Subscription_LabelsEntry_descriptor = + internal_static_google_pubsub_v1_Subscription_descriptor.getNestedType(1); + internal_static_google_pubsub_v1_Subscription_LabelsEntry_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_Subscription_LabelsEntry_descriptor, + new java.lang.String[] { + "Key", "Value", + }); + internal_static_google_pubsub_v1_Subscription_TagsEntry_descriptor = + internal_static_google_pubsub_v1_Subscription_descriptor.getNestedType(2); + internal_static_google_pubsub_v1_Subscription_TagsEntry_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_Subscription_TagsEntry_descriptor, + new java.lang.String[] { + "Key", "Value", + }); + internal_static_google_pubsub_v1_RetryPolicy_descriptor = getDescriptor().getMessageType(24); + internal_static_google_pubsub_v1_RetryPolicy_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_RetryPolicy_descriptor, + new java.lang.String[] { + "MinimumBackoff", "MaximumBackoff", + }); + internal_static_google_pubsub_v1_DeadLetterPolicy_descriptor = + getDescriptor().getMessageType(25); + internal_static_google_pubsub_v1_DeadLetterPolicy_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_DeadLetterPolicy_descriptor, + new java.lang.String[] { + "DeadLetterTopic", "MaxDeliveryAttempts", + }); + internal_static_google_pubsub_v1_ExpirationPolicy_descriptor = + getDescriptor().getMessageType(26); + internal_static_google_pubsub_v1_ExpirationPolicy_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ExpirationPolicy_descriptor, + new java.lang.String[] { + "Ttl", + }); + internal_static_google_pubsub_v1_PushConfig_descriptor = getDescriptor().getMessageType(27); + internal_static_google_pubsub_v1_PushConfig_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_PushConfig_descriptor, + new java.lang.String[] { + "PushEndpoint", + "Attributes", + "OidcToken", + "PubsubWrapper", + "NoWrapper", + "AuthenticationMethod", + "Wrapper", + }); + internal_static_google_pubsub_v1_PushConfig_OidcToken_descriptor = + internal_static_google_pubsub_v1_PushConfig_descriptor.getNestedType(0); + internal_static_google_pubsub_v1_PushConfig_OidcToken_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_PushConfig_OidcToken_descriptor, + new java.lang.String[] { + "ServiceAccountEmail", "Audience", + }); + internal_static_google_pubsub_v1_PushConfig_PubsubWrapper_descriptor = + internal_static_google_pubsub_v1_PushConfig_descriptor.getNestedType(1); + internal_static_google_pubsub_v1_PushConfig_PubsubWrapper_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_PushConfig_PubsubWrapper_descriptor, + new java.lang.String[] {}); + internal_static_google_pubsub_v1_PushConfig_NoWrapper_descriptor = + internal_static_google_pubsub_v1_PushConfig_descriptor.getNestedType(2); + internal_static_google_pubsub_v1_PushConfig_NoWrapper_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_PushConfig_NoWrapper_descriptor, + new java.lang.String[] { + "WriteMetadata", + }); + internal_static_google_pubsub_v1_PushConfig_AttributesEntry_descriptor = + internal_static_google_pubsub_v1_PushConfig_descriptor.getNestedType(3); + internal_static_google_pubsub_v1_PushConfig_AttributesEntry_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_PushConfig_AttributesEntry_descriptor, + new java.lang.String[] { + "Key", "Value", + }); + internal_static_google_pubsub_v1_BigQueryConfig_descriptor = getDescriptor().getMessageType(28); + internal_static_google_pubsub_v1_BigQueryConfig_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_BigQueryConfig_descriptor, + new java.lang.String[] { + "Table", + "UseTopicSchema", + "WriteMetadata", + "DropUnknownFields", + "State", + "UseTableSchema", + "ServiceAccountEmail", + }); + internal_static_google_pubsub_v1_BigtableConfig_descriptor = getDescriptor().getMessageType(29); + internal_static_google_pubsub_v1_BigtableConfig_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_BigtableConfig_descriptor, + new java.lang.String[] { + "Table", "AppProfileId", "ServiceAccountEmail", "WriteMetadata", "State", + }); + internal_static_google_pubsub_v1_CloudStorageConfig_descriptor = + getDescriptor().getMessageType(30); + internal_static_google_pubsub_v1_CloudStorageConfig_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_CloudStorageConfig_descriptor, + new java.lang.String[] { + "Bucket", + "FilenamePrefix", + "FilenameSuffix", + "FilenameDatetimeFormat", + "TextConfig", + "AvroConfig", + "MaxDuration", + "MaxBytes", + "MaxMessages", + "State", + "ServiceAccountEmail", + "OutputFormat", + }); + internal_static_google_pubsub_v1_CloudStorageConfig_TextConfig_descriptor = + internal_static_google_pubsub_v1_CloudStorageConfig_descriptor.getNestedType(0); + internal_static_google_pubsub_v1_CloudStorageConfig_TextConfig_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_CloudStorageConfig_TextConfig_descriptor, + new java.lang.String[] {}); + internal_static_google_pubsub_v1_CloudStorageConfig_AvroConfig_descriptor = + internal_static_google_pubsub_v1_CloudStorageConfig_descriptor.getNestedType(1); + internal_static_google_pubsub_v1_CloudStorageConfig_AvroConfig_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_CloudStorageConfig_AvroConfig_descriptor, + new java.lang.String[] { + "WriteMetadata", "UseTopicSchema", + }); + internal_static_google_pubsub_v1_ReceivedMessage_descriptor = + getDescriptor().getMessageType(31); + internal_static_google_pubsub_v1_ReceivedMessage_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ReceivedMessage_descriptor, + new java.lang.String[] { + "AckId", "Message", "DeliveryAttempt", + }); + internal_static_google_pubsub_v1_GetSubscriptionRequest_descriptor = + getDescriptor().getMessageType(32); + internal_static_google_pubsub_v1_GetSubscriptionRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_GetSubscriptionRequest_descriptor, + new java.lang.String[] { + "Subscription", + }); + internal_static_google_pubsub_v1_UpdateSubscriptionRequest_descriptor = + getDescriptor().getMessageType(33); + internal_static_google_pubsub_v1_UpdateSubscriptionRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_UpdateSubscriptionRequest_descriptor, + new java.lang.String[] { + "Subscription", "UpdateMask", + }); + internal_static_google_pubsub_v1_ListSubscriptionsRequest_descriptor = + getDescriptor().getMessageType(34); + internal_static_google_pubsub_v1_ListSubscriptionsRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListSubscriptionsRequest_descriptor, + new java.lang.String[] { + "Project", "PageSize", "PageToken", + }); + internal_static_google_pubsub_v1_ListSubscriptionsResponse_descriptor = + getDescriptor().getMessageType(35); + internal_static_google_pubsub_v1_ListSubscriptionsResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListSubscriptionsResponse_descriptor, + new java.lang.String[] { + "Subscriptions", "NextPageToken", + }); + internal_static_google_pubsub_v1_DeleteSubscriptionRequest_descriptor = + getDescriptor().getMessageType(36); + internal_static_google_pubsub_v1_DeleteSubscriptionRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_DeleteSubscriptionRequest_descriptor, + new java.lang.String[] { + "Subscription", + }); + internal_static_google_pubsub_v1_ModifyPushConfigRequest_descriptor = + getDescriptor().getMessageType(37); + internal_static_google_pubsub_v1_ModifyPushConfigRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ModifyPushConfigRequest_descriptor, + new java.lang.String[] { + "Subscription", "PushConfig", + }); + internal_static_google_pubsub_v1_PullRequest_descriptor = getDescriptor().getMessageType(38); + internal_static_google_pubsub_v1_PullRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_PullRequest_descriptor, + new java.lang.String[] { + "Subscription", "ReturnImmediately", "MaxMessages", + }); + internal_static_google_pubsub_v1_PullResponse_descriptor = getDescriptor().getMessageType(39); + internal_static_google_pubsub_v1_PullResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_PullResponse_descriptor, + new java.lang.String[] { + "ReceivedMessages", + }); + internal_static_google_pubsub_v1_ModifyAckDeadlineRequest_descriptor = + getDescriptor().getMessageType(40); + internal_static_google_pubsub_v1_ModifyAckDeadlineRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ModifyAckDeadlineRequest_descriptor, + new java.lang.String[] { + "Subscription", "AckIds", "AckDeadlineSeconds", + }); + internal_static_google_pubsub_v1_AcknowledgeRequest_descriptor = + getDescriptor().getMessageType(41); + internal_static_google_pubsub_v1_AcknowledgeRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_AcknowledgeRequest_descriptor, + new java.lang.String[] { + "Subscription", "AckIds", + }); + internal_static_google_pubsub_v1_StreamingPullRequest_descriptor = + getDescriptor().getMessageType(42); + internal_static_google_pubsub_v1_StreamingPullRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_StreamingPullRequest_descriptor, + new java.lang.String[] { + "Subscription", + "AckIds", + "ModifyDeadlineSeconds", + "ModifyDeadlineAckIds", + "StreamAckDeadlineSeconds", + "ClientId", + "MaxOutstandingMessages", + "MaxOutstandingBytes", + "ProtocolVersion", + }); + internal_static_google_pubsub_v1_StreamingPullResponse_descriptor = + getDescriptor().getMessageType(43); + internal_static_google_pubsub_v1_StreamingPullResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_StreamingPullResponse_descriptor, + new java.lang.String[] { + "ReceivedMessages", + "AcknowledgeConfirmation", + "ModifyAckDeadlineConfirmation", + "SubscriptionProperties", + }); + internal_static_google_pubsub_v1_StreamingPullResponse_AcknowledgeConfirmation_descriptor = + internal_static_google_pubsub_v1_StreamingPullResponse_descriptor.getNestedType(0); + internal_static_google_pubsub_v1_StreamingPullResponse_AcknowledgeConfirmation_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_StreamingPullResponse_AcknowledgeConfirmation_descriptor, + new java.lang.String[] { + "AckIds", "InvalidAckIds", "UnorderedAckIds", "TemporaryFailedAckIds", + }); + internal_static_google_pubsub_v1_StreamingPullResponse_ModifyAckDeadlineConfirmation_descriptor = + internal_static_google_pubsub_v1_StreamingPullResponse_descriptor.getNestedType(1); + internal_static_google_pubsub_v1_StreamingPullResponse_ModifyAckDeadlineConfirmation_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_StreamingPullResponse_ModifyAckDeadlineConfirmation_descriptor, + new java.lang.String[] { + "AckIds", "InvalidAckIds", "TemporaryFailedAckIds", + }); + internal_static_google_pubsub_v1_StreamingPullResponse_SubscriptionProperties_descriptor = + internal_static_google_pubsub_v1_StreamingPullResponse_descriptor.getNestedType(2); + internal_static_google_pubsub_v1_StreamingPullResponse_SubscriptionProperties_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_StreamingPullResponse_SubscriptionProperties_descriptor, + new java.lang.String[] { + "ExactlyOnceDeliveryEnabled", "MessageOrderingEnabled", + }); + internal_static_google_pubsub_v1_CreateSnapshotRequest_descriptor = + getDescriptor().getMessageType(44); + internal_static_google_pubsub_v1_CreateSnapshotRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_CreateSnapshotRequest_descriptor, + new java.lang.String[] { + "Name", "Subscription", "Labels", "Tags", + }); + internal_static_google_pubsub_v1_CreateSnapshotRequest_LabelsEntry_descriptor = + internal_static_google_pubsub_v1_CreateSnapshotRequest_descriptor.getNestedType(0); + internal_static_google_pubsub_v1_CreateSnapshotRequest_LabelsEntry_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_CreateSnapshotRequest_LabelsEntry_descriptor, + new java.lang.String[] { + "Key", "Value", + }); + internal_static_google_pubsub_v1_CreateSnapshotRequest_TagsEntry_descriptor = + internal_static_google_pubsub_v1_CreateSnapshotRequest_descriptor.getNestedType(1); + internal_static_google_pubsub_v1_CreateSnapshotRequest_TagsEntry_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_CreateSnapshotRequest_TagsEntry_descriptor, + new java.lang.String[] { + "Key", "Value", + }); + internal_static_google_pubsub_v1_UpdateSnapshotRequest_descriptor = + getDescriptor().getMessageType(45); + internal_static_google_pubsub_v1_UpdateSnapshotRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_UpdateSnapshotRequest_descriptor, + new java.lang.String[] { + "Snapshot", "UpdateMask", + }); + internal_static_google_pubsub_v1_Snapshot_descriptor = getDescriptor().getMessageType(46); + internal_static_google_pubsub_v1_Snapshot_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_Snapshot_descriptor, + new java.lang.String[] { + "Name", "Topic", "ExpireTime", "Labels", + }); + internal_static_google_pubsub_v1_Snapshot_LabelsEntry_descriptor = + internal_static_google_pubsub_v1_Snapshot_descriptor.getNestedType(0); + internal_static_google_pubsub_v1_Snapshot_LabelsEntry_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_Snapshot_LabelsEntry_descriptor, + new java.lang.String[] { + "Key", "Value", + }); + internal_static_google_pubsub_v1_GetSnapshotRequest_descriptor = + getDescriptor().getMessageType(47); + internal_static_google_pubsub_v1_GetSnapshotRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_GetSnapshotRequest_descriptor, + new java.lang.String[] { + "Snapshot", + }); + internal_static_google_pubsub_v1_ListSnapshotsRequest_descriptor = + getDescriptor().getMessageType(48); + internal_static_google_pubsub_v1_ListSnapshotsRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListSnapshotsRequest_descriptor, + new java.lang.String[] { + "Project", "PageSize", "PageToken", + }); + internal_static_google_pubsub_v1_ListSnapshotsResponse_descriptor = + getDescriptor().getMessageType(49); + internal_static_google_pubsub_v1_ListSnapshotsResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListSnapshotsResponse_descriptor, + new java.lang.String[] { + "Snapshots", "NextPageToken", + }); + internal_static_google_pubsub_v1_DeleteSnapshotRequest_descriptor = + getDescriptor().getMessageType(50); + internal_static_google_pubsub_v1_DeleteSnapshotRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_DeleteSnapshotRequest_descriptor, + new java.lang.String[] { + "Snapshot", + }); + internal_static_google_pubsub_v1_SeekRequest_descriptor = getDescriptor().getMessageType(51); + internal_static_google_pubsub_v1_SeekRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_SeekRequest_descriptor, + new java.lang.String[] { + "Subscription", "Time", "Snapshot", "Target", + }); + internal_static_google_pubsub_v1_SeekResponse_descriptor = getDescriptor().getMessageType(52); + internal_static_google_pubsub_v1_SeekResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_SeekResponse_descriptor, new java.lang.String[] {}); + descriptor.resolveAllFeaturesImmutable(); + com.google.api.AnnotationsProto.getDescriptor(); + com.google.api.ClientProto.getDescriptor(); + com.google.api.FieldBehaviorProto.getDescriptor(); + com.google.api.ResourceProto.getDescriptor(); + com.google.protobuf.DurationProto.getDescriptor(); + com.google.protobuf.EmptyProto.getDescriptor(); + com.google.protobuf.FieldMaskProto.getDescriptor(); + com.google.protobuf.StructProto.getDescriptor(); + com.google.protobuf.TimestampProto.getDescriptor(); + com.google.pubsub.v1.SchemaProto.getDescriptor(); + com.google.protobuf.ExtensionRegistry registry = + com.google.protobuf.ExtensionRegistry.newInstance(); + registry.add(com.google.api.ClientProto.defaultHost); + registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); + registry.add(com.google.api.AnnotationsProto.http); + registry.add(com.google.api.ClientProto.methodSignature); + registry.add(com.google.api.ClientProto.oauthScopes); + registry.add(com.google.api.ResourceProto.resource); + registry.add(com.google.api.ResourceProto.resourceDefinition); + registry.add(com.google.api.ResourceProto.resourceReference); + com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( + descriptor, registry); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PullRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PullRequest.java new file mode 100644 index 000000000000..79c5b0775c19 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PullRequest.java @@ -0,0 +1,856 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `Pull` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.PullRequest} + */ +@com.google.protobuf.Generated +public final class PullRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.PullRequest) + PullRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PullRequest"); + } + + // Use PullRequest.newBuilder() to construct. + private PullRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private PullRequest() { + subscription_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto.internal_static_google_pubsub_v1_PullRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PullRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PullRequest.class, com.google.pubsub.v1.PullRequest.Builder.class); + } + + public static final int SUBSCRIPTION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object subscription_ = ""; + + /** + * + * + *
+   * Required. The subscription from which messages should be pulled.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + @java.lang.Override + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The subscription from which messages should be pulled.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int RETURN_IMMEDIATELY_FIELD_NUMBER = 2; + private boolean returnImmediately_ = false; + + /** + * + * + *
+   * Optional. If this field set to true, the system will respond immediately
+   * even if it there are no messages available to return in the `Pull`
+   * response. Otherwise, the system may wait (for a bounded amount of time)
+   * until at least one message is available, rather than returning no messages.
+   * Warning: setting this field to `true` is discouraged because it adversely
+   * impacts the performance of `Pull` operations. We recommend that users do
+   * not set this field.
+   * 
+ * + * bool return_immediately = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.PullRequest.return_immediately is deprecated. See + * google/pubsub/v1/pubsub.proto;l=2180 + * @return The returnImmediately. + */ + @java.lang.Override + @java.lang.Deprecated + public boolean getReturnImmediately() { + return returnImmediately_; + } + + public static final int MAX_MESSAGES_FIELD_NUMBER = 3; + private int maxMessages_ = 0; + + /** + * + * + *
+   * Required. The maximum number of messages to return for this request. Must
+   * be a positive integer. The Pub/Sub system may return fewer than the number
+   * specified.
+   * 
+ * + * int32 max_messages = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The maxMessages. + */ + @java.lang.Override + public int getMaxMessages() { + return maxMessages_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, subscription_); + } + if (returnImmediately_ != false) { + output.writeBool(2, returnImmediately_); + } + if (maxMessages_ != 0) { + output.writeInt32(3, maxMessages_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, subscription_); + } + if (returnImmediately_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(2, returnImmediately_); + } + if (maxMessages_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, maxMessages_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.PullRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.PullRequest other = (com.google.pubsub.v1.PullRequest) obj; + + if (!getSubscription().equals(other.getSubscription())) return false; + if (getReturnImmediately() != other.getReturnImmediately()) return false; + if (getMaxMessages() != other.getMaxMessages()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SUBSCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getSubscription().hashCode(); + hash = (37 * hash) + RETURN_IMMEDIATELY_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getReturnImmediately()); + hash = (37 * hash) + MAX_MESSAGES_FIELD_NUMBER; + hash = (53 * hash) + getMaxMessages(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.PullRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PullRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PullRequest parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PullRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PullRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PullRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PullRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PullRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PullRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PullRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PullRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PullRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.PullRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `Pull` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.PullRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.PullRequest) + com.google.pubsub.v1.PullRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PullRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PullRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PullRequest.class, + com.google.pubsub.v1.PullRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.PullRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + subscription_ = ""; + returnImmediately_ = false; + maxMessages_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PullRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.PullRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.PullRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.PullRequest build() { + com.google.pubsub.v1.PullRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.PullRequest buildPartial() { + com.google.pubsub.v1.PullRequest result = new com.google.pubsub.v1.PullRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.PullRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.subscription_ = subscription_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.returnImmediately_ = returnImmediately_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.maxMessages_ = maxMessages_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.PullRequest) { + return mergeFrom((com.google.pubsub.v1.PullRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.PullRequest other) { + if (other == com.google.pubsub.v1.PullRequest.getDefaultInstance()) return this; + if (!other.getSubscription().isEmpty()) { + subscription_ = other.subscription_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.getReturnImmediately() != false) { + setReturnImmediately(other.getReturnImmediately()); + } + if (other.getMaxMessages() != 0) { + setMaxMessages(other.getMaxMessages()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + subscription_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + returnImmediately_ = input.readBool(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: + { + maxMessages_ = input.readInt32(); + bitField0_ |= 0x00000004; + break; + } // case 24 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object subscription_ = ""; + + /** + * + * + *
+     * Required. The subscription from which messages should be pulled.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The subscription from which messages should be pulled.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The subscription from which messages should be pulled.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscription(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription from which messages should be pulled.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSubscription() { + subscription_ = getDefaultInstance().getSubscription(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription from which messages should be pulled.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscriptionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private boolean returnImmediately_; + + /** + * + * + *
+     * Optional. If this field set to true, the system will respond immediately
+     * even if it there are no messages available to return in the `Pull`
+     * response. Otherwise, the system may wait (for a bounded amount of time)
+     * until at least one message is available, rather than returning no messages.
+     * Warning: setting this field to `true` is discouraged because it adversely
+     * impacts the performance of `Pull` operations. We recommend that users do
+     * not set this field.
+     * 
+ * + * + * bool return_immediately = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.PullRequest.return_immediately is deprecated. See + * google/pubsub/v1/pubsub.proto;l=2180 + * @return The returnImmediately. + */ + @java.lang.Override + @java.lang.Deprecated + public boolean getReturnImmediately() { + return returnImmediately_; + } + + /** + * + * + *
+     * Optional. If this field set to true, the system will respond immediately
+     * even if it there are no messages available to return in the `Pull`
+     * response. Otherwise, the system may wait (for a bounded amount of time)
+     * until at least one message is available, rather than returning no messages.
+     * Warning: setting this field to `true` is discouraged because it adversely
+     * impacts the performance of `Pull` operations. We recommend that users do
+     * not set this field.
+     * 
+ * + * + * bool return_immediately = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.PullRequest.return_immediately is deprecated. See + * google/pubsub/v1/pubsub.proto;l=2180 + * @param value The returnImmediately to set. + * @return This builder for chaining. + */ + @java.lang.Deprecated + public Builder setReturnImmediately(boolean value) { + + returnImmediately_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If this field set to true, the system will respond immediately
+     * even if it there are no messages available to return in the `Pull`
+     * response. Otherwise, the system may wait (for a bounded amount of time)
+     * until at least one message is available, rather than returning no messages.
+     * Warning: setting this field to `true` is discouraged because it adversely
+     * impacts the performance of `Pull` operations. We recommend that users do
+     * not set this field.
+     * 
+ * + * + * bool return_immediately = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.PullRequest.return_immediately is deprecated. See + * google/pubsub/v1/pubsub.proto;l=2180 + * @return This builder for chaining. + */ + @java.lang.Deprecated + public Builder clearReturnImmediately() { + bitField0_ = (bitField0_ & ~0x00000002); + returnImmediately_ = false; + onChanged(); + return this; + } + + private int maxMessages_; + + /** + * + * + *
+     * Required. The maximum number of messages to return for this request. Must
+     * be a positive integer. The Pub/Sub system may return fewer than the number
+     * specified.
+     * 
+ * + * int32 max_messages = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The maxMessages. + */ + @java.lang.Override + public int getMaxMessages() { + return maxMessages_; + } + + /** + * + * + *
+     * Required. The maximum number of messages to return for this request. Must
+     * be a positive integer. The Pub/Sub system may return fewer than the number
+     * specified.
+     * 
+ * + * int32 max_messages = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The maxMessages to set. + * @return This builder for chaining. + */ + public Builder setMaxMessages(int value) { + + maxMessages_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The maximum number of messages to return for this request. Must
+     * be a positive integer. The Pub/Sub system may return fewer than the number
+     * specified.
+     * 
+ * + * int32 max_messages = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearMaxMessages() { + bitField0_ = (bitField0_ & ~0x00000004); + maxMessages_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.PullRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.PullRequest) + private static final com.google.pubsub.v1.PullRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.PullRequest(); + } + + public static com.google.pubsub.v1.PullRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PullRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.PullRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PullRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PullRequestOrBuilder.java new file mode 100644 index 000000000000..1346ad309c4d --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PullRequestOrBuilder.java @@ -0,0 +1,98 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface PullRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.PullRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The subscription from which messages should be pulled.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + java.lang.String getSubscription(); + + /** + * + * + *
+   * Required. The subscription from which messages should be pulled.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + com.google.protobuf.ByteString getSubscriptionBytes(); + + /** + * + * + *
+   * Optional. If this field set to true, the system will respond immediately
+   * even if it there are no messages available to return in the `Pull`
+   * response. Otherwise, the system may wait (for a bounded amount of time)
+   * until at least one message is available, rather than returning no messages.
+   * Warning: setting this field to `true` is discouraged because it adversely
+   * impacts the performance of `Pull` operations. We recommend that users do
+   * not set this field.
+   * 
+ * + * bool return_immediately = 2 [deprecated = true, (.google.api.field_behavior) = OPTIONAL]; + * + * + * @deprecated google.pubsub.v1.PullRequest.return_immediately is deprecated. See + * google/pubsub/v1/pubsub.proto;l=2180 + * @return The returnImmediately. + */ + @java.lang.Deprecated + boolean getReturnImmediately(); + + /** + * + * + *
+   * Required. The maximum number of messages to return for this request. Must
+   * be a positive integer. The Pub/Sub system may return fewer than the number
+   * specified.
+   * 
+ * + * int32 max_messages = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The maxMessages. + */ + int getMaxMessages(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PullResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PullResponse.java new file mode 100644 index 000000000000..cad6472f0f9c --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PullResponse.java @@ -0,0 +1,1060 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the `Pull` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.PullResponse} + */ +@com.google.protobuf.Generated +public final class PullResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.PullResponse) + PullResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PullResponse"); + } + + // Use PullResponse.newBuilder() to construct. + private PullResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private PullResponse() { + receivedMessages_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PullResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PullResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PullResponse.class, + com.google.pubsub.v1.PullResponse.Builder.class); + } + + public static final int RECEIVED_MESSAGES_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private java.util.List receivedMessages_; + + /** + * + * + *
+   * Optional. Received Pub/Sub messages. The list will be empty if there are no
+   * more messages available in the backlog, or if no messages could be returned
+   * before the request timeout. For JSON, the response can be entirely
+   * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+   * even if there are more messages available in the backlog.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List getReceivedMessagesList() { + return receivedMessages_; + } + + /** + * + * + *
+   * Optional. Received Pub/Sub messages. The list will be empty if there are no
+   * more messages available in the backlog, or if no messages could be returned
+   * before the request timeout. For JSON, the response can be entirely
+   * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+   * even if there are more messages available in the backlog.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List + getReceivedMessagesOrBuilderList() { + return receivedMessages_; + } + + /** + * + * + *
+   * Optional. Received Pub/Sub messages. The list will be empty if there are no
+   * more messages available in the backlog, or if no messages could be returned
+   * before the request timeout. For JSON, the response can be entirely
+   * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+   * even if there are more messages available in the backlog.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public int getReceivedMessagesCount() { + return receivedMessages_.size(); + } + + /** + * + * + *
+   * Optional. Received Pub/Sub messages. The list will be empty if there are no
+   * more messages available in the backlog, or if no messages could be returned
+   * before the request timeout. For JSON, the response can be entirely
+   * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+   * even if there are more messages available in the backlog.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.ReceivedMessage getReceivedMessages(int index) { + return receivedMessages_.get(index); + } + + /** + * + * + *
+   * Optional. Received Pub/Sub messages. The list will be empty if there are no
+   * more messages available in the backlog, or if no messages could be returned
+   * before the request timeout. For JSON, the response can be entirely
+   * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+   * even if there are more messages available in the backlog.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.ReceivedMessageOrBuilder getReceivedMessagesOrBuilder(int index) { + return receivedMessages_.get(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < receivedMessages_.size(); i++) { + output.writeMessage(1, receivedMessages_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < receivedMessages_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, receivedMessages_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.PullResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.PullResponse other = (com.google.pubsub.v1.PullResponse) obj; + + if (!getReceivedMessagesList().equals(other.getReceivedMessagesList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getReceivedMessagesCount() > 0) { + hash = (37 * hash) + RECEIVED_MESSAGES_FIELD_NUMBER; + hash = (53 * hash) + getReceivedMessagesList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.PullResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PullResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PullResponse parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PullResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PullResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PullResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PullResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PullResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PullResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PullResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PullResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PullResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.PullResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the `Pull` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.PullResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.PullResponse) + com.google.pubsub.v1.PullResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PullResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PullResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PullResponse.class, + com.google.pubsub.v1.PullResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.PullResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (receivedMessagesBuilder_ == null) { + receivedMessages_ = java.util.Collections.emptyList(); + } else { + receivedMessages_ = null; + receivedMessagesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PullResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.PullResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.PullResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.PullResponse build() { + com.google.pubsub.v1.PullResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.PullResponse buildPartial() { + com.google.pubsub.v1.PullResponse result = new com.google.pubsub.v1.PullResponse(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.pubsub.v1.PullResponse result) { + if (receivedMessagesBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + receivedMessages_ = java.util.Collections.unmodifiableList(receivedMessages_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.receivedMessages_ = receivedMessages_; + } else { + result.receivedMessages_ = receivedMessagesBuilder_.build(); + } + } + + private void buildPartial0(com.google.pubsub.v1.PullResponse result) { + int from_bitField0_ = bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.PullResponse) { + return mergeFrom((com.google.pubsub.v1.PullResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.PullResponse other) { + if (other == com.google.pubsub.v1.PullResponse.getDefaultInstance()) return this; + if (receivedMessagesBuilder_ == null) { + if (!other.receivedMessages_.isEmpty()) { + if (receivedMessages_.isEmpty()) { + receivedMessages_ = other.receivedMessages_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureReceivedMessagesIsMutable(); + receivedMessages_.addAll(other.receivedMessages_); + } + onChanged(); + } + } else { + if (!other.receivedMessages_.isEmpty()) { + if (receivedMessagesBuilder_.isEmpty()) { + receivedMessagesBuilder_.dispose(); + receivedMessagesBuilder_ = null; + receivedMessages_ = other.receivedMessages_; + bitField0_ = (bitField0_ & ~0x00000001); + receivedMessagesBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetReceivedMessagesFieldBuilder() + : null; + } else { + receivedMessagesBuilder_.addAllMessages(other.receivedMessages_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + com.google.pubsub.v1.ReceivedMessage m = + input.readMessage( + com.google.pubsub.v1.ReceivedMessage.parser(), extensionRegistry); + if (receivedMessagesBuilder_ == null) { + ensureReceivedMessagesIsMutable(); + receivedMessages_.add(m); + } else { + receivedMessagesBuilder_.addMessage(m); + } + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.util.List receivedMessages_ = + java.util.Collections.emptyList(); + + private void ensureReceivedMessagesIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + receivedMessages_ = + new java.util.ArrayList(receivedMessages_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.ReceivedMessage, + com.google.pubsub.v1.ReceivedMessage.Builder, + com.google.pubsub.v1.ReceivedMessageOrBuilder> + receivedMessagesBuilder_; + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List getReceivedMessagesList() { + if (receivedMessagesBuilder_ == null) { + return java.util.Collections.unmodifiableList(receivedMessages_); + } else { + return receivedMessagesBuilder_.getMessageList(); + } + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public int getReceivedMessagesCount() { + if (receivedMessagesBuilder_ == null) { + return receivedMessages_.size(); + } else { + return receivedMessagesBuilder_.getCount(); + } + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.ReceivedMessage getReceivedMessages(int index) { + if (receivedMessagesBuilder_ == null) { + return receivedMessages_.get(index); + } else { + return receivedMessagesBuilder_.getMessage(index); + } + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setReceivedMessages(int index, com.google.pubsub.v1.ReceivedMessage value) { + if (receivedMessagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureReceivedMessagesIsMutable(); + receivedMessages_.set(index, value); + onChanged(); + } else { + receivedMessagesBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setReceivedMessages( + int index, com.google.pubsub.v1.ReceivedMessage.Builder builderForValue) { + if (receivedMessagesBuilder_ == null) { + ensureReceivedMessagesIsMutable(); + receivedMessages_.set(index, builderForValue.build()); + onChanged(); + } else { + receivedMessagesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addReceivedMessages(com.google.pubsub.v1.ReceivedMessage value) { + if (receivedMessagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureReceivedMessagesIsMutable(); + receivedMessages_.add(value); + onChanged(); + } else { + receivedMessagesBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addReceivedMessages(int index, com.google.pubsub.v1.ReceivedMessage value) { + if (receivedMessagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureReceivedMessagesIsMutable(); + receivedMessages_.add(index, value); + onChanged(); + } else { + receivedMessagesBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addReceivedMessages( + com.google.pubsub.v1.ReceivedMessage.Builder builderForValue) { + if (receivedMessagesBuilder_ == null) { + ensureReceivedMessagesIsMutable(); + receivedMessages_.add(builderForValue.build()); + onChanged(); + } else { + receivedMessagesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addReceivedMessages( + int index, com.google.pubsub.v1.ReceivedMessage.Builder builderForValue) { + if (receivedMessagesBuilder_ == null) { + ensureReceivedMessagesIsMutable(); + receivedMessages_.add(index, builderForValue.build()); + onChanged(); + } else { + receivedMessagesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addAllReceivedMessages( + java.lang.Iterable values) { + if (receivedMessagesBuilder_ == null) { + ensureReceivedMessagesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, receivedMessages_); + onChanged(); + } else { + receivedMessagesBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearReceivedMessages() { + if (receivedMessagesBuilder_ == null) { + receivedMessages_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + receivedMessagesBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeReceivedMessages(int index) { + if (receivedMessagesBuilder_ == null) { + ensureReceivedMessagesIsMutable(); + receivedMessages_.remove(index); + onChanged(); + } else { + receivedMessagesBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.ReceivedMessage.Builder getReceivedMessagesBuilder(int index) { + return internalGetReceivedMessagesFieldBuilder().getBuilder(index); + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.ReceivedMessageOrBuilder getReceivedMessagesOrBuilder(int index) { + if (receivedMessagesBuilder_ == null) { + return receivedMessages_.get(index); + } else { + return receivedMessagesBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getReceivedMessagesOrBuilderList() { + if (receivedMessagesBuilder_ != null) { + return receivedMessagesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(receivedMessages_); + } + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.ReceivedMessage.Builder addReceivedMessagesBuilder() { + return internalGetReceivedMessagesFieldBuilder() + .addBuilder(com.google.pubsub.v1.ReceivedMessage.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.ReceivedMessage.Builder addReceivedMessagesBuilder(int index) { + return internalGetReceivedMessagesFieldBuilder() + .addBuilder(index, com.google.pubsub.v1.ReceivedMessage.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages. The list will be empty if there are no
+     * more messages available in the backlog, or if no messages could be returned
+     * before the request timeout. For JSON, the response can be entirely
+     * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+     * even if there are more messages available in the backlog.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getReceivedMessagesBuilderList() { + return internalGetReceivedMessagesFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.ReceivedMessage, + com.google.pubsub.v1.ReceivedMessage.Builder, + com.google.pubsub.v1.ReceivedMessageOrBuilder> + internalGetReceivedMessagesFieldBuilder() { + if (receivedMessagesBuilder_ == null) { + receivedMessagesBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.ReceivedMessage, + com.google.pubsub.v1.ReceivedMessage.Builder, + com.google.pubsub.v1.ReceivedMessageOrBuilder>( + receivedMessages_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + receivedMessages_ = null; + } + return receivedMessagesBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.PullResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.PullResponse) + private static final com.google.pubsub.v1.PullResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.PullResponse(); + } + + public static com.google.pubsub.v1.PullResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PullResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.PullResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PullResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PullResponseOrBuilder.java new file mode 100644 index 000000000000..98cb9ba32b4b --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PullResponseOrBuilder.java @@ -0,0 +1,114 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface PullResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.PullResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. Received Pub/Sub messages. The list will be empty if there are no
+   * more messages available in the backlog, or if no messages could be returned
+   * before the request timeout. For JSON, the response can be entirely
+   * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+   * even if there are more messages available in the backlog.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List getReceivedMessagesList(); + + /** + * + * + *
+   * Optional. Received Pub/Sub messages. The list will be empty if there are no
+   * more messages available in the backlog, or if no messages could be returned
+   * before the request timeout. For JSON, the response can be entirely
+   * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+   * even if there are more messages available in the backlog.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.ReceivedMessage getReceivedMessages(int index); + + /** + * + * + *
+   * Optional. Received Pub/Sub messages. The list will be empty if there are no
+   * more messages available in the backlog, or if no messages could be returned
+   * before the request timeout. For JSON, the response can be entirely
+   * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+   * even if there are more messages available in the backlog.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getReceivedMessagesCount(); + + /** + * + * + *
+   * Optional. Received Pub/Sub messages. The list will be empty if there are no
+   * more messages available in the backlog, or if no messages could be returned
+   * before the request timeout. For JSON, the response can be entirely
+   * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+   * even if there are more messages available in the backlog.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List + getReceivedMessagesOrBuilderList(); + + /** + * + * + *
+   * Optional. Received Pub/Sub messages. The list will be empty if there are no
+   * more messages available in the backlog, or if no messages could be returned
+   * before the request timeout. For JSON, the response can be entirely
+   * empty. The Pub/Sub system may return fewer than the `maxMessages` requested
+   * even if there are more messages available in the backlog.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.ReceivedMessageOrBuilder getReceivedMessagesOrBuilder(int index); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PushConfig.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PushConfig.java new file mode 100644 index 000000000000..304cd75ab2f0 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PushConfig.java @@ -0,0 +1,4189 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Configuration for a push delivery endpoint.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.PushConfig} + */ +@com.google.protobuf.Generated +public final class PushConfig extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.PushConfig) + PushConfigOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PushConfig"); + } + + // Use PushConfig.newBuilder() to construct. + private PushConfig(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private PushConfig() { + pushEndpoint_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto.internal_static_google_pubsub_v1_PushConfig_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 2: + return internalGetAttributes(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PushConfig.class, com.google.pubsub.v1.PushConfig.Builder.class); + } + + public interface OidcTokenOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.PushConfig.OidcToken) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Optional. [Service account
+     * email](https://cloud.google.com/iam/docs/service-accounts)
+     * used for generating the OIDC token. For more information
+     * on setting up authentication, see
+     * [Push subscriptions](https://cloud.google.com/pubsub/docs/push).
+     * 
+ * + * string service_account_email = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + java.lang.String getServiceAccountEmail(); + + /** + * + * + *
+     * Optional. [Service account
+     * email](https://cloud.google.com/iam/docs/service-accounts)
+     * used for generating the OIDC token. For more information
+     * on setting up authentication, see
+     * [Push subscriptions](https://cloud.google.com/pubsub/docs/push).
+     * 
+ * + * string service_account_email = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + com.google.protobuf.ByteString getServiceAccountEmailBytes(); + + /** + * + * + *
+     * Optional. Audience to be used when generating OIDC token. The audience
+     * claim identifies the recipients that the JWT is intended for. The
+     * audience value is a single case-sensitive string. Having multiple values
+     * (array) for the audience field is not supported. More info about the OIDC
+     * JWT token audience here:
+     * https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified,
+     * the Push endpoint URL will be used.
+     * 
+ * + * string audience = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The audience. + */ + java.lang.String getAudience(); + + /** + * + * + *
+     * Optional. Audience to be used when generating OIDC token. The audience
+     * claim identifies the recipients that the JWT is intended for. The
+     * audience value is a single case-sensitive string. Having multiple values
+     * (array) for the audience field is not supported. More info about the OIDC
+     * JWT token audience here:
+     * https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified,
+     * the Push endpoint URL will be used.
+     * 
+ * + * string audience = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for audience. + */ + com.google.protobuf.ByteString getAudienceBytes(); + } + + /** + * + * + *
+   * Contains information needed for generating an
+   * [OpenID Connect
+   * token](https://developers.google.com/identity/protocols/OpenIDConnect).
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.PushConfig.OidcToken} + */ + public static final class OidcToken extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.PushConfig.OidcToken) + OidcTokenOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "OidcToken"); + } + + // Use OidcToken.newBuilder() to construct. + private OidcToken(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private OidcToken() { + serviceAccountEmail_ = ""; + audience_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_OidcToken_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_OidcToken_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PushConfig.OidcToken.class, + com.google.pubsub.v1.PushConfig.OidcToken.Builder.class); + } + + public static final int SERVICE_ACCOUNT_EMAIL_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object serviceAccountEmail_ = ""; + + /** + * + * + *
+     * Optional. [Service account
+     * email](https://cloud.google.com/iam/docs/service-accounts)
+     * used for generating the OIDC token. For more information
+     * on setting up authentication, see
+     * [Push subscriptions](https://cloud.google.com/pubsub/docs/push).
+     * 
+ * + * string service_account_email = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + @java.lang.Override + public java.lang.String getServiceAccountEmail() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceAccountEmail_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. [Service account
+     * email](https://cloud.google.com/iam/docs/service-accounts)
+     * used for generating the OIDC token. For more information
+     * on setting up authentication, see
+     * [Push subscriptions](https://cloud.google.com/pubsub/docs/push).
+     * 
+ * + * string service_account_email = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + @java.lang.Override + public com.google.protobuf.ByteString getServiceAccountEmailBytes() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serviceAccountEmail_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int AUDIENCE_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object audience_ = ""; + + /** + * + * + *
+     * Optional. Audience to be used when generating OIDC token. The audience
+     * claim identifies the recipients that the JWT is intended for. The
+     * audience value is a single case-sensitive string. Having multiple values
+     * (array) for the audience field is not supported. More info about the OIDC
+     * JWT token audience here:
+     * https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified,
+     * the Push endpoint URL will be used.
+     * 
+ * + * string audience = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The audience. + */ + @java.lang.Override + public java.lang.String getAudience() { + java.lang.Object ref = audience_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + audience_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. Audience to be used when generating OIDC token. The audience
+     * claim identifies the recipients that the JWT is intended for. The
+     * audience value is a single case-sensitive string. Having multiple values
+     * (array) for the audience field is not supported. More info about the OIDC
+     * JWT token audience here:
+     * https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified,
+     * the Push endpoint URL will be used.
+     * 
+ * + * string audience = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for audience. + */ + @java.lang.Override + public com.google.protobuf.ByteString getAudienceBytes() { + java.lang.Object ref = audience_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + audience_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serviceAccountEmail_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, serviceAccountEmail_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(audience_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, audience_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(serviceAccountEmail_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, serviceAccountEmail_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(audience_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, audience_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.PushConfig.OidcToken)) { + return super.equals(obj); + } + com.google.pubsub.v1.PushConfig.OidcToken other = + (com.google.pubsub.v1.PushConfig.OidcToken) obj; + + if (!getServiceAccountEmail().equals(other.getServiceAccountEmail())) return false; + if (!getAudience().equals(other.getAudience())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SERVICE_ACCOUNT_EMAIL_FIELD_NUMBER; + hash = (53 * hash) + getServiceAccountEmail().hashCode(); + hash = (37 * hash) + AUDIENCE_FIELD_NUMBER; + hash = (53 * hash) + getAudience().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.PushConfig.OidcToken parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PushConfig.OidcToken parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.OidcToken parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PushConfig.OidcToken parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.OidcToken parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PushConfig.OidcToken parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.OidcToken parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PushConfig.OidcToken parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.OidcToken parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PushConfig.OidcToken parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.OidcToken parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PushConfig.OidcToken parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.PushConfig.OidcToken prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Contains information needed for generating an
+     * [OpenID Connect
+     * token](https://developers.google.com/identity/protocols/OpenIDConnect).
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.PushConfig.OidcToken} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.PushConfig.OidcToken) + com.google.pubsub.v1.PushConfig.OidcTokenOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_OidcToken_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_OidcToken_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PushConfig.OidcToken.class, + com.google.pubsub.v1.PushConfig.OidcToken.Builder.class); + } + + // Construct using com.google.pubsub.v1.PushConfig.OidcToken.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + serviceAccountEmail_ = ""; + audience_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_OidcToken_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig.OidcToken getDefaultInstanceForType() { + return com.google.pubsub.v1.PushConfig.OidcToken.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig.OidcToken build() { + com.google.pubsub.v1.PushConfig.OidcToken result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig.OidcToken buildPartial() { + com.google.pubsub.v1.PushConfig.OidcToken result = + new com.google.pubsub.v1.PushConfig.OidcToken(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.PushConfig.OidcToken result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.serviceAccountEmail_ = serviceAccountEmail_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.audience_ = audience_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.PushConfig.OidcToken) { + return mergeFrom((com.google.pubsub.v1.PushConfig.OidcToken) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.PushConfig.OidcToken other) { + if (other == com.google.pubsub.v1.PushConfig.OidcToken.getDefaultInstance()) return this; + if (!other.getServiceAccountEmail().isEmpty()) { + serviceAccountEmail_ = other.serviceAccountEmail_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getAudience().isEmpty()) { + audience_ = other.audience_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + serviceAccountEmail_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + audience_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object serviceAccountEmail_ = ""; + + /** + * + * + *
+       * Optional. [Service account
+       * email](https://cloud.google.com/iam/docs/service-accounts)
+       * used for generating the OIDC token. For more information
+       * on setting up authentication, see
+       * [Push subscriptions](https://cloud.google.com/pubsub/docs/push).
+       * 
+ * + * string service_account_email = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The serviceAccountEmail. + */ + public java.lang.String getServiceAccountEmail() { + java.lang.Object ref = serviceAccountEmail_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceAccountEmail_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. [Service account
+       * email](https://cloud.google.com/iam/docs/service-accounts)
+       * used for generating the OIDC token. For more information
+       * on setting up authentication, see
+       * [Push subscriptions](https://cloud.google.com/pubsub/docs/push).
+       * 
+ * + * string service_account_email = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for serviceAccountEmail. + */ + public com.google.protobuf.ByteString getServiceAccountEmailBytes() { + java.lang.Object ref = serviceAccountEmail_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + serviceAccountEmail_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. [Service account
+       * email](https://cloud.google.com/iam/docs/service-accounts)
+       * used for generating the OIDC token. For more information
+       * on setting up authentication, see
+       * [Push subscriptions](https://cloud.google.com/pubsub/docs/push).
+       * 
+ * + * string service_account_email = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The serviceAccountEmail to set. + * @return This builder for chaining. + */ + public Builder setServiceAccountEmail(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + serviceAccountEmail_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. [Service account
+       * email](https://cloud.google.com/iam/docs/service-accounts)
+       * used for generating the OIDC token. For more information
+       * on setting up authentication, see
+       * [Push subscriptions](https://cloud.google.com/pubsub/docs/push).
+       * 
+ * + * string service_account_email = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearServiceAccountEmail() { + serviceAccountEmail_ = getDefaultInstance().getServiceAccountEmail(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. [Service account
+       * email](https://cloud.google.com/iam/docs/service-accounts)
+       * used for generating the OIDC token. For more information
+       * on setting up authentication, see
+       * [Push subscriptions](https://cloud.google.com/pubsub/docs/push).
+       * 
+ * + * string service_account_email = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for serviceAccountEmail to set. + * @return This builder for chaining. + */ + public Builder setServiceAccountEmailBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + serviceAccountEmail_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object audience_ = ""; + + /** + * + * + *
+       * Optional. Audience to be used when generating OIDC token. The audience
+       * claim identifies the recipients that the JWT is intended for. The
+       * audience value is a single case-sensitive string. Having multiple values
+       * (array) for the audience field is not supported. More info about the OIDC
+       * JWT token audience here:
+       * https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified,
+       * the Push endpoint URL will be used.
+       * 
+ * + * string audience = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The audience. + */ + public java.lang.String getAudience() { + java.lang.Object ref = audience_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + audience_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. Audience to be used when generating OIDC token. The audience
+       * claim identifies the recipients that the JWT is intended for. The
+       * audience value is a single case-sensitive string. Having multiple values
+       * (array) for the audience field is not supported. More info about the OIDC
+       * JWT token audience here:
+       * https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified,
+       * the Push endpoint URL will be used.
+       * 
+ * + * string audience = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for audience. + */ + public com.google.protobuf.ByteString getAudienceBytes() { + java.lang.Object ref = audience_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + audience_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. Audience to be used when generating OIDC token. The audience
+       * claim identifies the recipients that the JWT is intended for. The
+       * audience value is a single case-sensitive string. Having multiple values
+       * (array) for the audience field is not supported. More info about the OIDC
+       * JWT token audience here:
+       * https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified,
+       * the Push endpoint URL will be used.
+       * 
+ * + * string audience = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The audience to set. + * @return This builder for chaining. + */ + public Builder setAudience(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + audience_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Audience to be used when generating OIDC token. The audience
+       * claim identifies the recipients that the JWT is intended for. The
+       * audience value is a single case-sensitive string. Having multiple values
+       * (array) for the audience field is not supported. More info about the OIDC
+       * JWT token audience here:
+       * https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified,
+       * the Push endpoint URL will be used.
+       * 
+ * + * string audience = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearAudience() { + audience_ = getDefaultInstance().getAudience(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Audience to be used when generating OIDC token. The audience
+       * claim identifies the recipients that the JWT is intended for. The
+       * audience value is a single case-sensitive string. Having multiple values
+       * (array) for the audience field is not supported. More info about the OIDC
+       * JWT token audience here:
+       * https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified,
+       * the Push endpoint URL will be used.
+       * 
+ * + * string audience = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for audience to set. + * @return This builder for chaining. + */ + public Builder setAudienceBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + audience_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.PushConfig.OidcToken) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.PushConfig.OidcToken) + private static final com.google.pubsub.v1.PushConfig.OidcToken DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.PushConfig.OidcToken(); + } + + public static com.google.pubsub.v1.PushConfig.OidcToken getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public OidcToken parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig.OidcToken getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface PubsubWrapperOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.PushConfig.PubsubWrapper) + com.google.protobuf.MessageOrBuilder {} + + /** + * + * + *
+   * The payload to the push endpoint is in the form of the JSON representation
+   * of a PubsubMessage
+   * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.PushConfig.PubsubWrapper} + */ + public static final class PubsubWrapper extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.PushConfig.PubsubWrapper) + PubsubWrapperOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "PubsubWrapper"); + } + + // Use PubsubWrapper.newBuilder() to construct. + private PubsubWrapper(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private PubsubWrapper() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_PubsubWrapper_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_PubsubWrapper_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PushConfig.PubsubWrapper.class, + com.google.pubsub.v1.PushConfig.PubsubWrapper.Builder.class); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.PushConfig.PubsubWrapper)) { + return super.equals(obj); + } + com.google.pubsub.v1.PushConfig.PubsubWrapper other = + (com.google.pubsub.v1.PushConfig.PubsubWrapper) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.PushConfig.PubsubWrapper parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PushConfig.PubsubWrapper parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.PubsubWrapper parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PushConfig.PubsubWrapper parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.PubsubWrapper parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PushConfig.PubsubWrapper parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.PubsubWrapper parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PushConfig.PubsubWrapper parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.PubsubWrapper parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PushConfig.PubsubWrapper parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.PubsubWrapper parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PushConfig.PubsubWrapper parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.PushConfig.PubsubWrapper prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * The payload to the push endpoint is in the form of the JSON representation
+     * of a PubsubMessage
+     * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.PushConfig.PubsubWrapper} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.PushConfig.PubsubWrapper) + com.google.pubsub.v1.PushConfig.PubsubWrapperOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_PubsubWrapper_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_PubsubWrapper_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PushConfig.PubsubWrapper.class, + com.google.pubsub.v1.PushConfig.PubsubWrapper.Builder.class); + } + + // Construct using com.google.pubsub.v1.PushConfig.PubsubWrapper.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_PubsubWrapper_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig.PubsubWrapper getDefaultInstanceForType() { + return com.google.pubsub.v1.PushConfig.PubsubWrapper.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig.PubsubWrapper build() { + com.google.pubsub.v1.PushConfig.PubsubWrapper result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig.PubsubWrapper buildPartial() { + com.google.pubsub.v1.PushConfig.PubsubWrapper result = + new com.google.pubsub.v1.PushConfig.PubsubWrapper(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.PushConfig.PubsubWrapper) { + return mergeFrom((com.google.pubsub.v1.PushConfig.PubsubWrapper) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.PushConfig.PubsubWrapper other) { + if (other == com.google.pubsub.v1.PushConfig.PubsubWrapper.getDefaultInstance()) + return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.PushConfig.PubsubWrapper) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.PushConfig.PubsubWrapper) + private static final com.google.pubsub.v1.PushConfig.PubsubWrapper DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.PushConfig.PubsubWrapper(); + } + + public static com.google.pubsub.v1.PushConfig.PubsubWrapper getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PubsubWrapper parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig.PubsubWrapper getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface NoWrapperOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.PushConfig.NoWrapper) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Optional. When true, writes the Pub/Sub message metadata to
+     * `x-goog-pubsub-<KEY>:<VAL>` headers of the HTTP request. Writes the
+     * Pub/Sub message attributes to `<KEY>:<VAL>` headers of the HTTP request.
+     * 
+ * + * bool write_metadata = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The writeMetadata. + */ + boolean getWriteMetadata(); + } + + /** + * + * + *
+   * Sets the `data` field as the HTTP body for delivery.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.PushConfig.NoWrapper} + */ + public static final class NoWrapper extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.PushConfig.NoWrapper) + NoWrapperOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "NoWrapper"); + } + + // Use NoWrapper.newBuilder() to construct. + private NoWrapper(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private NoWrapper() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_NoWrapper_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_NoWrapper_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PushConfig.NoWrapper.class, + com.google.pubsub.v1.PushConfig.NoWrapper.Builder.class); + } + + public static final int WRITE_METADATA_FIELD_NUMBER = 1; + private boolean writeMetadata_ = false; + + /** + * + * + *
+     * Optional. When true, writes the Pub/Sub message metadata to
+     * `x-goog-pubsub-<KEY>:<VAL>` headers of the HTTP request. Writes the
+     * Pub/Sub message attributes to `<KEY>:<VAL>` headers of the HTTP request.
+     * 
+ * + * bool write_metadata = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The writeMetadata. + */ + @java.lang.Override + public boolean getWriteMetadata() { + return writeMetadata_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (writeMetadata_ != false) { + output.writeBool(1, writeMetadata_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (writeMetadata_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(1, writeMetadata_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.PushConfig.NoWrapper)) { + return super.equals(obj); + } + com.google.pubsub.v1.PushConfig.NoWrapper other = + (com.google.pubsub.v1.PushConfig.NoWrapper) obj; + + if (getWriteMetadata() != other.getWriteMetadata()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + WRITE_METADATA_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getWriteMetadata()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.PushConfig.NoWrapper parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PushConfig.NoWrapper parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.NoWrapper parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PushConfig.NoWrapper parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.NoWrapper parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PushConfig.NoWrapper parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.NoWrapper parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PushConfig.NoWrapper parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.NoWrapper parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PushConfig.NoWrapper parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig.NoWrapper parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PushConfig.NoWrapper parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.PushConfig.NoWrapper prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Sets the `data` field as the HTTP body for delivery.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.PushConfig.NoWrapper} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.PushConfig.NoWrapper) + com.google.pubsub.v1.PushConfig.NoWrapperOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_NoWrapper_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_NoWrapper_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PushConfig.NoWrapper.class, + com.google.pubsub.v1.PushConfig.NoWrapper.Builder.class); + } + + // Construct using com.google.pubsub.v1.PushConfig.NoWrapper.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + writeMetadata_ = false; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_NoWrapper_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig.NoWrapper getDefaultInstanceForType() { + return com.google.pubsub.v1.PushConfig.NoWrapper.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig.NoWrapper build() { + com.google.pubsub.v1.PushConfig.NoWrapper result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig.NoWrapper buildPartial() { + com.google.pubsub.v1.PushConfig.NoWrapper result = + new com.google.pubsub.v1.PushConfig.NoWrapper(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.PushConfig.NoWrapper result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.writeMetadata_ = writeMetadata_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.PushConfig.NoWrapper) { + return mergeFrom((com.google.pubsub.v1.PushConfig.NoWrapper) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.PushConfig.NoWrapper other) { + if (other == com.google.pubsub.v1.PushConfig.NoWrapper.getDefaultInstance()) return this; + if (other.getWriteMetadata() != false) { + setWriteMetadata(other.getWriteMetadata()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + writeMetadata_ = input.readBool(); + bitField0_ |= 0x00000001; + break; + } // case 8 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private boolean writeMetadata_; + + /** + * + * + *
+       * Optional. When true, writes the Pub/Sub message metadata to
+       * `x-goog-pubsub-<KEY>:<VAL>` headers of the HTTP request. Writes the
+       * Pub/Sub message attributes to `<KEY>:<VAL>` headers of the HTTP request.
+       * 
+ * + * bool write_metadata = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The writeMetadata. + */ + @java.lang.Override + public boolean getWriteMetadata() { + return writeMetadata_; + } + + /** + * + * + *
+       * Optional. When true, writes the Pub/Sub message metadata to
+       * `x-goog-pubsub-<KEY>:<VAL>` headers of the HTTP request. Writes the
+       * Pub/Sub message attributes to `<KEY>:<VAL>` headers of the HTTP request.
+       * 
+ * + * bool write_metadata = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The writeMetadata to set. + * @return This builder for chaining. + */ + public Builder setWriteMetadata(boolean value) { + + writeMetadata_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. When true, writes the Pub/Sub message metadata to
+       * `x-goog-pubsub-<KEY>:<VAL>` headers of the HTTP request. Writes the
+       * Pub/Sub message attributes to `<KEY>:<VAL>` headers of the HTTP request.
+       * 
+ * + * bool write_metadata = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearWriteMetadata() { + bitField0_ = (bitField0_ & ~0x00000001); + writeMetadata_ = false; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.PushConfig.NoWrapper) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.PushConfig.NoWrapper) + private static final com.google.pubsub.v1.PushConfig.NoWrapper DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.PushConfig.NoWrapper(); + } + + public static com.google.pubsub.v1.PushConfig.NoWrapper getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public NoWrapper parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig.NoWrapper getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int authenticationMethodCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object authenticationMethod_; + + public enum AuthenticationMethodCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + OIDC_TOKEN(3), + AUTHENTICATIONMETHOD_NOT_SET(0); + private final int value; + + private AuthenticationMethodCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static AuthenticationMethodCase valueOf(int value) { + return forNumber(value); + } + + public static AuthenticationMethodCase forNumber(int value) { + switch (value) { + case 3: + return OIDC_TOKEN; + case 0: + return AUTHENTICATIONMETHOD_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public AuthenticationMethodCase getAuthenticationMethodCase() { + return AuthenticationMethodCase.forNumber(authenticationMethodCase_); + } + + private int wrapperCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object wrapper_; + + public enum WrapperCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + PUBSUB_WRAPPER(4), + NO_WRAPPER(5), + WRAPPER_NOT_SET(0); + private final int value; + + private WrapperCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static WrapperCase valueOf(int value) { + return forNumber(value); + } + + public static WrapperCase forNumber(int value) { + switch (value) { + case 4: + return PUBSUB_WRAPPER; + case 5: + return NO_WRAPPER; + case 0: + return WRAPPER_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public WrapperCase getWrapperCase() { + return WrapperCase.forNumber(wrapperCase_); + } + + public static final int PUSH_ENDPOINT_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object pushEndpoint_ = ""; + + /** + * + * + *
+   * Optional. A URL locating the endpoint to which messages should be pushed.
+   * For example, a Webhook endpoint might use `https://example.com/push`.
+   * 
+ * + * string push_endpoint = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pushEndpoint. + */ + @java.lang.Override + public java.lang.String getPushEndpoint() { + java.lang.Object ref = pushEndpoint_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pushEndpoint_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. A URL locating the endpoint to which messages should be pushed.
+   * For example, a Webhook endpoint might use `https://example.com/push`.
+   * 
+ * + * string push_endpoint = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pushEndpoint. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPushEndpointBytes() { + java.lang.Object ref = pushEndpoint_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pushEndpoint_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ATTRIBUTES_FIELD_NUMBER = 2; + + private static final class AttributesDefaultEntryHolder { + static final com.google.protobuf.MapEntry defaultEntry = + com.google.protobuf.MapEntry.newDefaultInstance( + com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_AttributesEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + + @SuppressWarnings("serial") + private com.google.protobuf.MapField attributes_; + + private com.google.protobuf.MapField internalGetAttributes() { + if (attributes_ == null) { + return com.google.protobuf.MapField.emptyMapField(AttributesDefaultEntryHolder.defaultEntry); + } + return attributes_; + } + + public int getAttributesCount() { + return internalGetAttributes().getMap().size(); + } + + /** + * + * + *
+   * Optional. Endpoint configuration attributes that can be used to control
+   * different aspects of the message delivery.
+   *
+   * The only currently supported attribute is `x-goog-version`, which you can
+   * use to change the format of the pushed message. This attribute
+   * indicates the version of the data expected by the endpoint. This
+   * controls the shape of the pushed message (i.e., its fields and metadata).
+   *
+   * If not present during the `CreateSubscription` call, it will default to
+   * the version of the Pub/Sub API used to make such call. If not present in a
+   * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+   * calls will always return a valid version, even if the subscription was
+   * created without this attribute.
+   *
+   * The only supported values for the `x-goog-version` attribute are:
+   *
+   * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+   * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+   *
+   * For example:
+   * `attributes { "x-goog-version": "v1" }`
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsAttributes(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetAttributes().getMap().containsKey(key); + } + + /** Use {@link #getAttributesMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getAttributes() { + return getAttributesMap(); + } + + /** + * + * + *
+   * Optional. Endpoint configuration attributes that can be used to control
+   * different aspects of the message delivery.
+   *
+   * The only currently supported attribute is `x-goog-version`, which you can
+   * use to change the format of the pushed message. This attribute
+   * indicates the version of the data expected by the endpoint. This
+   * controls the shape of the pushed message (i.e., its fields and metadata).
+   *
+   * If not present during the `CreateSubscription` call, it will default to
+   * the version of the Pub/Sub API used to make such call. If not present in a
+   * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+   * calls will always return a valid version, even if the subscription was
+   * created without this attribute.
+   *
+   * The only supported values for the `x-goog-version` attribute are:
+   *
+   * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+   * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+   *
+   * For example:
+   * `attributes { "x-goog-version": "v1" }`
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getAttributesMap() { + return internalGetAttributes().getMap(); + } + + /** + * + * + *
+   * Optional. Endpoint configuration attributes that can be used to control
+   * different aspects of the message delivery.
+   *
+   * The only currently supported attribute is `x-goog-version`, which you can
+   * use to change the format of the pushed message. This attribute
+   * indicates the version of the data expected by the endpoint. This
+   * controls the shape of the pushed message (i.e., its fields and metadata).
+   *
+   * If not present during the `CreateSubscription` call, it will default to
+   * the version of the Pub/Sub API used to make such call. If not present in a
+   * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+   * calls will always return a valid version, even if the subscription was
+   * created without this attribute.
+   *
+   * The only supported values for the `x-goog-version` attribute are:
+   *
+   * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+   * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+   *
+   * For example:
+   * `attributes { "x-goog-version": "v1" }`
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getAttributesOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttributes().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+   * Optional. Endpoint configuration attributes that can be used to control
+   * different aspects of the message delivery.
+   *
+   * The only currently supported attribute is `x-goog-version`, which you can
+   * use to change the format of the pushed message. This attribute
+   * indicates the version of the data expected by the endpoint. This
+   * controls the shape of the pushed message (i.e., its fields and metadata).
+   *
+   * If not present during the `CreateSubscription` call, it will default to
+   * the version of the Pub/Sub API used to make such call. If not present in a
+   * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+   * calls will always return a valid version, even if the subscription was
+   * created without this attribute.
+   *
+   * The only supported values for the `x-goog-version` attribute are:
+   *
+   * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+   * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+   *
+   * For example:
+   * `attributes { "x-goog-version": "v1" }`
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getAttributesOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttributes().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public static final int OIDC_TOKEN_FIELD_NUMBER = 3; + + /** + * + * + *
+   * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+   * token as an `Authorization` header in the HTTP request for every pushed
+   * message.
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the oidcToken field is set. + */ + @java.lang.Override + public boolean hasOidcToken() { + return authenticationMethodCase_ == 3; + } + + /** + * + * + *
+   * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+   * token as an `Authorization` header in the HTTP request for every pushed
+   * message.
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The oidcToken. + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig.OidcToken getOidcToken() { + if (authenticationMethodCase_ == 3) { + return (com.google.pubsub.v1.PushConfig.OidcToken) authenticationMethod_; + } + return com.google.pubsub.v1.PushConfig.OidcToken.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+   * token as an `Authorization` header in the HTTP request for every pushed
+   * message.
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig.OidcTokenOrBuilder getOidcTokenOrBuilder() { + if (authenticationMethodCase_ == 3) { + return (com.google.pubsub.v1.PushConfig.OidcToken) authenticationMethod_; + } + return com.google.pubsub.v1.PushConfig.OidcToken.getDefaultInstance(); + } + + public static final int PUBSUB_WRAPPER_FIELD_NUMBER = 4; + + /** + * + * + *
+   * Optional. When set, the payload to the push endpoint is in the form of
+   * the JSON representation of a PubsubMessage
+   * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the pubsubWrapper field is set. + */ + @java.lang.Override + public boolean hasPubsubWrapper() { + return wrapperCase_ == 4; + } + + /** + * + * + *
+   * Optional. When set, the payload to the push endpoint is in the form of
+   * the JSON representation of a PubsubMessage
+   * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The pubsubWrapper. + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig.PubsubWrapper getPubsubWrapper() { + if (wrapperCase_ == 4) { + return (com.google.pubsub.v1.PushConfig.PubsubWrapper) wrapper_; + } + return com.google.pubsub.v1.PushConfig.PubsubWrapper.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. When set, the payload to the push endpoint is in the form of
+   * the JSON representation of a PubsubMessage
+   * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig.PubsubWrapperOrBuilder getPubsubWrapperOrBuilder() { + if (wrapperCase_ == 4) { + return (com.google.pubsub.v1.PushConfig.PubsubWrapper) wrapper_; + } + return com.google.pubsub.v1.PushConfig.PubsubWrapper.getDefaultInstance(); + } + + public static final int NO_WRAPPER_FIELD_NUMBER = 5; + + /** + * + * + *
+   * Optional. When set, the payload to the push endpoint is not wrapped.
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the noWrapper field is set. + */ + @java.lang.Override + public boolean hasNoWrapper() { + return wrapperCase_ == 5; + } + + /** + * + * + *
+   * Optional. When set, the payload to the push endpoint is not wrapped.
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The noWrapper. + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig.NoWrapper getNoWrapper() { + if (wrapperCase_ == 5) { + return (com.google.pubsub.v1.PushConfig.NoWrapper) wrapper_; + } + return com.google.pubsub.v1.PushConfig.NoWrapper.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. When set, the payload to the push endpoint is not wrapped.
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig.NoWrapperOrBuilder getNoWrapperOrBuilder() { + if (wrapperCase_ == 5) { + return (com.google.pubsub.v1.PushConfig.NoWrapper) wrapper_; + } + return com.google.pubsub.v1.PushConfig.NoWrapper.getDefaultInstance(); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pushEndpoint_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, pushEndpoint_); + } + com.google.protobuf.GeneratedMessage.serializeStringMapTo( + output, internalGetAttributes(), AttributesDefaultEntryHolder.defaultEntry, 2); + if (authenticationMethodCase_ == 3) { + output.writeMessage(3, (com.google.pubsub.v1.PushConfig.OidcToken) authenticationMethod_); + } + if (wrapperCase_ == 4) { + output.writeMessage(4, (com.google.pubsub.v1.PushConfig.PubsubWrapper) wrapper_); + } + if (wrapperCase_ == 5) { + output.writeMessage(5, (com.google.pubsub.v1.PushConfig.NoWrapper) wrapper_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(pushEndpoint_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, pushEndpoint_); + } + for (java.util.Map.Entry entry : + internalGetAttributes().getMap().entrySet()) { + com.google.protobuf.MapEntry attributes__ = + AttributesDefaultEntryHolder.defaultEntry + .newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, attributes__); + } + if (authenticationMethodCase_ == 3) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 3, (com.google.pubsub.v1.PushConfig.OidcToken) authenticationMethod_); + } + if (wrapperCase_ == 4) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 4, (com.google.pubsub.v1.PushConfig.PubsubWrapper) wrapper_); + } + if (wrapperCase_ == 5) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 5, (com.google.pubsub.v1.PushConfig.NoWrapper) wrapper_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.PushConfig)) { + return super.equals(obj); + } + com.google.pubsub.v1.PushConfig other = (com.google.pubsub.v1.PushConfig) obj; + + if (!getPushEndpoint().equals(other.getPushEndpoint())) return false; + if (!internalGetAttributes().equals(other.internalGetAttributes())) return false; + if (!getAuthenticationMethodCase().equals(other.getAuthenticationMethodCase())) return false; + switch (authenticationMethodCase_) { + case 3: + if (!getOidcToken().equals(other.getOidcToken())) return false; + break; + case 0: + default: + } + if (!getWrapperCase().equals(other.getWrapperCase())) return false; + switch (wrapperCase_) { + case 4: + if (!getPubsubWrapper().equals(other.getPubsubWrapper())) return false; + break; + case 5: + if (!getNoWrapper().equals(other.getNoWrapper())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PUSH_ENDPOINT_FIELD_NUMBER; + hash = (53 * hash) + getPushEndpoint().hashCode(); + if (!internalGetAttributes().getMap().isEmpty()) { + hash = (37 * hash) + ATTRIBUTES_FIELD_NUMBER; + hash = (53 * hash) + internalGetAttributes().hashCode(); + } + switch (authenticationMethodCase_) { + case 3: + hash = (37 * hash) + OIDC_TOKEN_FIELD_NUMBER; + hash = (53 * hash) + getOidcToken().hashCode(); + break; + case 0: + default: + } + switch (wrapperCase_) { + case 4: + hash = (37 * hash) + PUBSUB_WRAPPER_FIELD_NUMBER; + hash = (53 * hash) + getPubsubWrapper().hashCode(); + break; + case 5: + hash = (37 * hash) + NO_WRAPPER_FIELD_NUMBER; + hash = (53 * hash) + getNoWrapper().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.PushConfig parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PushConfig parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PushConfig parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.PushConfig parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PushConfig parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PushConfig parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.PushConfig parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.PushConfig parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.PushConfig prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Configuration for a push delivery endpoint.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.PushConfig} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.PushConfig) + com.google.pubsub.v1.PushConfigOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 2: + return internalGetAttributes(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 2: + return internalGetMutableAttributes(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.PushConfig.class, com.google.pubsub.v1.PushConfig.Builder.class); + } + + // Construct using com.google.pubsub.v1.PushConfig.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + pushEndpoint_ = ""; + internalGetMutableAttributes().clear(); + if (oidcTokenBuilder_ != null) { + oidcTokenBuilder_.clear(); + } + if (pubsubWrapperBuilder_ != null) { + pubsubWrapperBuilder_.clear(); + } + if (noWrapperBuilder_ != null) { + noWrapperBuilder_.clear(); + } + authenticationMethodCase_ = 0; + authenticationMethod_ = null; + wrapperCase_ = 0; + wrapper_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_PushConfig_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig getDefaultInstanceForType() { + return com.google.pubsub.v1.PushConfig.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig build() { + com.google.pubsub.v1.PushConfig result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig buildPartial() { + com.google.pubsub.v1.PushConfig result = new com.google.pubsub.v1.PushConfig(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.PushConfig result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.pushEndpoint_ = pushEndpoint_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.attributes_ = internalGetAttributes(); + result.attributes_.makeImmutable(); + } + } + + private void buildPartialOneofs(com.google.pubsub.v1.PushConfig result) { + result.authenticationMethodCase_ = authenticationMethodCase_; + result.authenticationMethod_ = this.authenticationMethod_; + if (authenticationMethodCase_ == 3 && oidcTokenBuilder_ != null) { + result.authenticationMethod_ = oidcTokenBuilder_.build(); + } + result.wrapperCase_ = wrapperCase_; + result.wrapper_ = this.wrapper_; + if (wrapperCase_ == 4 && pubsubWrapperBuilder_ != null) { + result.wrapper_ = pubsubWrapperBuilder_.build(); + } + if (wrapperCase_ == 5 && noWrapperBuilder_ != null) { + result.wrapper_ = noWrapperBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.PushConfig) { + return mergeFrom((com.google.pubsub.v1.PushConfig) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.PushConfig other) { + if (other == com.google.pubsub.v1.PushConfig.getDefaultInstance()) return this; + if (!other.getPushEndpoint().isEmpty()) { + pushEndpoint_ = other.pushEndpoint_; + bitField0_ |= 0x00000001; + onChanged(); + } + internalGetMutableAttributes().mergeFrom(other.internalGetAttributes()); + bitField0_ |= 0x00000002; + switch (other.getAuthenticationMethodCase()) { + case OIDC_TOKEN: + { + mergeOidcToken(other.getOidcToken()); + break; + } + case AUTHENTICATIONMETHOD_NOT_SET: + { + break; + } + } + switch (other.getWrapperCase()) { + case PUBSUB_WRAPPER: + { + mergePubsubWrapper(other.getPubsubWrapper()); + break; + } + case NO_WRAPPER: + { + mergeNoWrapper(other.getNoWrapper()); + break; + } + case WRAPPER_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + pushEndpoint_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + com.google.protobuf.MapEntry attributes__ = + input.readMessage( + AttributesDefaultEntryHolder.defaultEntry.getParserForType(), + extensionRegistry); + internalGetMutableAttributes() + .getMutableMap() + .put(attributes__.getKey(), attributes__.getValue()); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + input.readMessage( + internalGetOidcTokenFieldBuilder().getBuilder(), extensionRegistry); + authenticationMethodCase_ = 3; + break; + } // case 26 + case 34: + { + input.readMessage( + internalGetPubsubWrapperFieldBuilder().getBuilder(), extensionRegistry); + wrapperCase_ = 4; + break; + } // case 34 + case 42: + { + input.readMessage( + internalGetNoWrapperFieldBuilder().getBuilder(), extensionRegistry); + wrapperCase_ = 5; + break; + } // case 42 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int authenticationMethodCase_ = 0; + private java.lang.Object authenticationMethod_; + + public AuthenticationMethodCase getAuthenticationMethodCase() { + return AuthenticationMethodCase.forNumber(authenticationMethodCase_); + } + + public Builder clearAuthenticationMethod() { + authenticationMethodCase_ = 0; + authenticationMethod_ = null; + onChanged(); + return this; + } + + private int wrapperCase_ = 0; + private java.lang.Object wrapper_; + + public WrapperCase getWrapperCase() { + return WrapperCase.forNumber(wrapperCase_); + } + + public Builder clearWrapper() { + wrapperCase_ = 0; + wrapper_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private java.lang.Object pushEndpoint_ = ""; + + /** + * + * + *
+     * Optional. A URL locating the endpoint to which messages should be pushed.
+     * For example, a Webhook endpoint might use `https://example.com/push`.
+     * 
+ * + * string push_endpoint = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pushEndpoint. + */ + public java.lang.String getPushEndpoint() { + java.lang.Object ref = pushEndpoint_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + pushEndpoint_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. A URL locating the endpoint to which messages should be pushed.
+     * For example, a Webhook endpoint might use `https://example.com/push`.
+     * 
+ * + * string push_endpoint = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pushEndpoint. + */ + public com.google.protobuf.ByteString getPushEndpointBytes() { + java.lang.Object ref = pushEndpoint_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + pushEndpoint_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. A URL locating the endpoint to which messages should be pushed.
+     * For example, a Webhook endpoint might use `https://example.com/push`.
+     * 
+ * + * string push_endpoint = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The pushEndpoint to set. + * @return This builder for chaining. + */ + public Builder setPushEndpoint(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + pushEndpoint_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A URL locating the endpoint to which messages should be pushed.
+     * For example, a Webhook endpoint might use `https://example.com/push`.
+     * 
+ * + * string push_endpoint = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPushEndpoint() { + pushEndpoint_ = getDefaultInstance().getPushEndpoint(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A URL locating the endpoint to which messages should be pushed.
+     * For example, a Webhook endpoint might use `https://example.com/push`.
+     * 
+ * + * string push_endpoint = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for pushEndpoint to set. + * @return This builder for chaining. + */ + public Builder setPushEndpointBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + pushEndpoint_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.protobuf.MapField attributes_; + + private com.google.protobuf.MapField + internalGetAttributes() { + if (attributes_ == null) { + return com.google.protobuf.MapField.emptyMapField( + AttributesDefaultEntryHolder.defaultEntry); + } + return attributes_; + } + + private com.google.protobuf.MapField + internalGetMutableAttributes() { + if (attributes_ == null) { + attributes_ = + com.google.protobuf.MapField.newMapField(AttributesDefaultEntryHolder.defaultEntry); + } + if (!attributes_.isMutable()) { + attributes_ = attributes_.copy(); + } + bitField0_ |= 0x00000002; + onChanged(); + return attributes_; + } + + public int getAttributesCount() { + return internalGetAttributes().getMap().size(); + } + + /** + * + * + *
+     * Optional. Endpoint configuration attributes that can be used to control
+     * different aspects of the message delivery.
+     *
+     * The only currently supported attribute is `x-goog-version`, which you can
+     * use to change the format of the pushed message. This attribute
+     * indicates the version of the data expected by the endpoint. This
+     * controls the shape of the pushed message (i.e., its fields and metadata).
+     *
+     * If not present during the `CreateSubscription` call, it will default to
+     * the version of the Pub/Sub API used to make such call. If not present in a
+     * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+     * calls will always return a valid version, even if the subscription was
+     * created without this attribute.
+     *
+     * The only supported values for the `x-goog-version` attribute are:
+     *
+     * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+     * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+     *
+     * For example:
+     * `attributes { "x-goog-version": "v1" }`
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsAttributes(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetAttributes().getMap().containsKey(key); + } + + /** Use {@link #getAttributesMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getAttributes() { + return getAttributesMap(); + } + + /** + * + * + *
+     * Optional. Endpoint configuration attributes that can be used to control
+     * different aspects of the message delivery.
+     *
+     * The only currently supported attribute is `x-goog-version`, which you can
+     * use to change the format of the pushed message. This attribute
+     * indicates the version of the data expected by the endpoint. This
+     * controls the shape of the pushed message (i.e., its fields and metadata).
+     *
+     * If not present during the `CreateSubscription` call, it will default to
+     * the version of the Pub/Sub API used to make such call. If not present in a
+     * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+     * calls will always return a valid version, even if the subscription was
+     * created without this attribute.
+     *
+     * The only supported values for the `x-goog-version` attribute are:
+     *
+     * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+     * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+     *
+     * For example:
+     * `attributes { "x-goog-version": "v1" }`
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getAttributesMap() { + return internalGetAttributes().getMap(); + } + + /** + * + * + *
+     * Optional. Endpoint configuration attributes that can be used to control
+     * different aspects of the message delivery.
+     *
+     * The only currently supported attribute is `x-goog-version`, which you can
+     * use to change the format of the pushed message. This attribute
+     * indicates the version of the data expected by the endpoint. This
+     * controls the shape of the pushed message (i.e., its fields and metadata).
+     *
+     * If not present during the `CreateSubscription` call, it will default to
+     * the version of the Pub/Sub API used to make such call. If not present in a
+     * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+     * calls will always return a valid version, even if the subscription was
+     * created without this attribute.
+     *
+     * The only supported values for the `x-goog-version` attribute are:
+     *
+     * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+     * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+     *
+     * For example:
+     * `attributes { "x-goog-version": "v1" }`
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getAttributesOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttributes().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+     * Optional. Endpoint configuration attributes that can be used to control
+     * different aspects of the message delivery.
+     *
+     * The only currently supported attribute is `x-goog-version`, which you can
+     * use to change the format of the pushed message. This attribute
+     * indicates the version of the data expected by the endpoint. This
+     * controls the shape of the pushed message (i.e., its fields and metadata).
+     *
+     * If not present during the `CreateSubscription` call, it will default to
+     * the version of the Pub/Sub API used to make such call. If not present in a
+     * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+     * calls will always return a valid version, even if the subscription was
+     * created without this attribute.
+     *
+     * The only supported values for the `x-goog-version` attribute are:
+     *
+     * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+     * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+     *
+     * For example:
+     * `attributes { "x-goog-version": "v1" }`
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getAttributesOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttributes().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearAttributes() { + bitField0_ = (bitField0_ & ~0x00000002); + internalGetMutableAttributes().getMutableMap().clear(); + return this; + } + + /** + * + * + *
+     * Optional. Endpoint configuration attributes that can be used to control
+     * different aspects of the message delivery.
+     *
+     * The only currently supported attribute is `x-goog-version`, which you can
+     * use to change the format of the pushed message. This attribute
+     * indicates the version of the data expected by the endpoint. This
+     * controls the shape of the pushed message (i.e., its fields and metadata).
+     *
+     * If not present during the `CreateSubscription` call, it will default to
+     * the version of the Pub/Sub API used to make such call. If not present in a
+     * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+     * calls will always return a valid version, even if the subscription was
+     * created without this attribute.
+     *
+     * The only supported values for the `x-goog-version` attribute are:
+     *
+     * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+     * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+     *
+     * For example:
+     * `attributes { "x-goog-version": "v1" }`
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeAttributes(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + internalGetMutableAttributes().getMutableMap().remove(key); + return this; + } + + /** Use alternate mutation accessors instead. */ + @java.lang.Deprecated + public java.util.Map getMutableAttributes() { + bitField0_ |= 0x00000002; + return internalGetMutableAttributes().getMutableMap(); + } + + /** + * + * + *
+     * Optional. Endpoint configuration attributes that can be used to control
+     * different aspects of the message delivery.
+     *
+     * The only currently supported attribute is `x-goog-version`, which you can
+     * use to change the format of the pushed message. This attribute
+     * indicates the version of the data expected by the endpoint. This
+     * controls the shape of the pushed message (i.e., its fields and metadata).
+     *
+     * If not present during the `CreateSubscription` call, it will default to
+     * the version of the Pub/Sub API used to make such call. If not present in a
+     * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+     * calls will always return a valid version, even if the subscription was
+     * created without this attribute.
+     *
+     * The only supported values for the `x-goog-version` attribute are:
+     *
+     * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+     * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+     *
+     * For example:
+     * `attributes { "x-goog-version": "v1" }`
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putAttributes(java.lang.String key, java.lang.String value) { + if (key == null) { + throw new NullPointerException("map key"); + } + if (value == null) { + throw new NullPointerException("map value"); + } + internalGetMutableAttributes().getMutableMap().put(key, value); + bitField0_ |= 0x00000002; + return this; + } + + /** + * + * + *
+     * Optional. Endpoint configuration attributes that can be used to control
+     * different aspects of the message delivery.
+     *
+     * The only currently supported attribute is `x-goog-version`, which you can
+     * use to change the format of the pushed message. This attribute
+     * indicates the version of the data expected by the endpoint. This
+     * controls the shape of the pushed message (i.e., its fields and metadata).
+     *
+     * If not present during the `CreateSubscription` call, it will default to
+     * the version of the Pub/Sub API used to make such call. If not present in a
+     * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+     * calls will always return a valid version, even if the subscription was
+     * created without this attribute.
+     *
+     * The only supported values for the `x-goog-version` attribute are:
+     *
+     * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+     * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+     *
+     * For example:
+     * `attributes { "x-goog-version": "v1" }`
+     * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putAllAttributes(java.util.Map values) { + internalGetMutableAttributes().getMutableMap().putAll(values); + bitField0_ |= 0x00000002; + return this; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig.OidcToken, + com.google.pubsub.v1.PushConfig.OidcToken.Builder, + com.google.pubsub.v1.PushConfig.OidcTokenOrBuilder> + oidcTokenBuilder_; + + /** + * + * + *
+     * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+     * token as an `Authorization` header in the HTTP request for every pushed
+     * message.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the oidcToken field is set. + */ + @java.lang.Override + public boolean hasOidcToken() { + return authenticationMethodCase_ == 3; + } + + /** + * + * + *
+     * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+     * token as an `Authorization` header in the HTTP request for every pushed
+     * message.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The oidcToken. + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig.OidcToken getOidcToken() { + if (oidcTokenBuilder_ == null) { + if (authenticationMethodCase_ == 3) { + return (com.google.pubsub.v1.PushConfig.OidcToken) authenticationMethod_; + } + return com.google.pubsub.v1.PushConfig.OidcToken.getDefaultInstance(); + } else { + if (authenticationMethodCase_ == 3) { + return oidcTokenBuilder_.getMessage(); + } + return com.google.pubsub.v1.PushConfig.OidcToken.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+     * token as an `Authorization` header in the HTTP request for every pushed
+     * message.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setOidcToken(com.google.pubsub.v1.PushConfig.OidcToken value) { + if (oidcTokenBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + authenticationMethod_ = value; + onChanged(); + } else { + oidcTokenBuilder_.setMessage(value); + } + authenticationMethodCase_ = 3; + return this; + } + + /** + * + * + *
+     * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+     * token as an `Authorization` header in the HTTP request for every pushed
+     * message.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setOidcToken(com.google.pubsub.v1.PushConfig.OidcToken.Builder builderForValue) { + if (oidcTokenBuilder_ == null) { + authenticationMethod_ = builderForValue.build(); + onChanged(); + } else { + oidcTokenBuilder_.setMessage(builderForValue.build()); + } + authenticationMethodCase_ = 3; + return this; + } + + /** + * + * + *
+     * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+     * token as an `Authorization` header in the HTTP request for every pushed
+     * message.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeOidcToken(com.google.pubsub.v1.PushConfig.OidcToken value) { + if (oidcTokenBuilder_ == null) { + if (authenticationMethodCase_ == 3 + && authenticationMethod_ + != com.google.pubsub.v1.PushConfig.OidcToken.getDefaultInstance()) { + authenticationMethod_ = + com.google.pubsub.v1.PushConfig.OidcToken.newBuilder( + (com.google.pubsub.v1.PushConfig.OidcToken) authenticationMethod_) + .mergeFrom(value) + .buildPartial(); + } else { + authenticationMethod_ = value; + } + onChanged(); + } else { + if (authenticationMethodCase_ == 3) { + oidcTokenBuilder_.mergeFrom(value); + } else { + oidcTokenBuilder_.setMessage(value); + } + } + authenticationMethodCase_ = 3; + return this; + } + + /** + * + * + *
+     * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+     * token as an `Authorization` header in the HTTP request for every pushed
+     * message.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearOidcToken() { + if (oidcTokenBuilder_ == null) { + if (authenticationMethodCase_ == 3) { + authenticationMethodCase_ = 0; + authenticationMethod_ = null; + onChanged(); + } + } else { + if (authenticationMethodCase_ == 3) { + authenticationMethodCase_ = 0; + authenticationMethod_ = null; + } + oidcTokenBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+     * token as an `Authorization` header in the HTTP request for every pushed
+     * message.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.PushConfig.OidcToken.Builder getOidcTokenBuilder() { + return internalGetOidcTokenFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+     * token as an `Authorization` header in the HTTP request for every pushed
+     * message.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig.OidcTokenOrBuilder getOidcTokenOrBuilder() { + if ((authenticationMethodCase_ == 3) && (oidcTokenBuilder_ != null)) { + return oidcTokenBuilder_.getMessageOrBuilder(); + } else { + if (authenticationMethodCase_ == 3) { + return (com.google.pubsub.v1.PushConfig.OidcToken) authenticationMethod_; + } + return com.google.pubsub.v1.PushConfig.OidcToken.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+     * token as an `Authorization` header in the HTTP request for every pushed
+     * message.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig.OidcToken, + com.google.pubsub.v1.PushConfig.OidcToken.Builder, + com.google.pubsub.v1.PushConfig.OidcTokenOrBuilder> + internalGetOidcTokenFieldBuilder() { + if (oidcTokenBuilder_ == null) { + if (!(authenticationMethodCase_ == 3)) { + authenticationMethod_ = com.google.pubsub.v1.PushConfig.OidcToken.getDefaultInstance(); + } + oidcTokenBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig.OidcToken, + com.google.pubsub.v1.PushConfig.OidcToken.Builder, + com.google.pubsub.v1.PushConfig.OidcTokenOrBuilder>( + (com.google.pubsub.v1.PushConfig.OidcToken) authenticationMethod_, + getParentForChildren(), + isClean()); + authenticationMethod_ = null; + } + authenticationMethodCase_ = 3; + onChanged(); + return oidcTokenBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig.PubsubWrapper, + com.google.pubsub.v1.PushConfig.PubsubWrapper.Builder, + com.google.pubsub.v1.PushConfig.PubsubWrapperOrBuilder> + pubsubWrapperBuilder_; + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is in the form of
+     * the JSON representation of a PubsubMessage
+     * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the pubsubWrapper field is set. + */ + @java.lang.Override + public boolean hasPubsubWrapper() { + return wrapperCase_ == 4; + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is in the form of
+     * the JSON representation of a PubsubMessage
+     * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The pubsubWrapper. + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig.PubsubWrapper getPubsubWrapper() { + if (pubsubWrapperBuilder_ == null) { + if (wrapperCase_ == 4) { + return (com.google.pubsub.v1.PushConfig.PubsubWrapper) wrapper_; + } + return com.google.pubsub.v1.PushConfig.PubsubWrapper.getDefaultInstance(); + } else { + if (wrapperCase_ == 4) { + return pubsubWrapperBuilder_.getMessage(); + } + return com.google.pubsub.v1.PushConfig.PubsubWrapper.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is in the form of
+     * the JSON representation of a PubsubMessage
+     * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setPubsubWrapper(com.google.pubsub.v1.PushConfig.PubsubWrapper value) { + if (pubsubWrapperBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + wrapper_ = value; + onChanged(); + } else { + pubsubWrapperBuilder_.setMessage(value); + } + wrapperCase_ = 4; + return this; + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is in the form of
+     * the JSON representation of a PubsubMessage
+     * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setPubsubWrapper( + com.google.pubsub.v1.PushConfig.PubsubWrapper.Builder builderForValue) { + if (pubsubWrapperBuilder_ == null) { + wrapper_ = builderForValue.build(); + onChanged(); + } else { + pubsubWrapperBuilder_.setMessage(builderForValue.build()); + } + wrapperCase_ = 4; + return this; + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is in the form of
+     * the JSON representation of a PubsubMessage
+     * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergePubsubWrapper(com.google.pubsub.v1.PushConfig.PubsubWrapper value) { + if (pubsubWrapperBuilder_ == null) { + if (wrapperCase_ == 4 + && wrapper_ != com.google.pubsub.v1.PushConfig.PubsubWrapper.getDefaultInstance()) { + wrapper_ = + com.google.pubsub.v1.PushConfig.PubsubWrapper.newBuilder( + (com.google.pubsub.v1.PushConfig.PubsubWrapper) wrapper_) + .mergeFrom(value) + .buildPartial(); + } else { + wrapper_ = value; + } + onChanged(); + } else { + if (wrapperCase_ == 4) { + pubsubWrapperBuilder_.mergeFrom(value); + } else { + pubsubWrapperBuilder_.setMessage(value); + } + } + wrapperCase_ = 4; + return this; + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is in the form of
+     * the JSON representation of a PubsubMessage
+     * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearPubsubWrapper() { + if (pubsubWrapperBuilder_ == null) { + if (wrapperCase_ == 4) { + wrapperCase_ = 0; + wrapper_ = null; + onChanged(); + } + } else { + if (wrapperCase_ == 4) { + wrapperCase_ = 0; + wrapper_ = null; + } + pubsubWrapperBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is in the form of
+     * the JSON representation of a PubsubMessage
+     * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.PushConfig.PubsubWrapper.Builder getPubsubWrapperBuilder() { + return internalGetPubsubWrapperFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is in the form of
+     * the JSON representation of a PubsubMessage
+     * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig.PubsubWrapperOrBuilder getPubsubWrapperOrBuilder() { + if ((wrapperCase_ == 4) && (pubsubWrapperBuilder_ != null)) { + return pubsubWrapperBuilder_.getMessageOrBuilder(); + } else { + if (wrapperCase_ == 4) { + return (com.google.pubsub.v1.PushConfig.PubsubWrapper) wrapper_; + } + return com.google.pubsub.v1.PushConfig.PubsubWrapper.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is in the form of
+     * the JSON representation of a PubsubMessage
+     * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig.PubsubWrapper, + com.google.pubsub.v1.PushConfig.PubsubWrapper.Builder, + com.google.pubsub.v1.PushConfig.PubsubWrapperOrBuilder> + internalGetPubsubWrapperFieldBuilder() { + if (pubsubWrapperBuilder_ == null) { + if (!(wrapperCase_ == 4)) { + wrapper_ = com.google.pubsub.v1.PushConfig.PubsubWrapper.getDefaultInstance(); + } + pubsubWrapperBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig.PubsubWrapper, + com.google.pubsub.v1.PushConfig.PubsubWrapper.Builder, + com.google.pubsub.v1.PushConfig.PubsubWrapperOrBuilder>( + (com.google.pubsub.v1.PushConfig.PubsubWrapper) wrapper_, + getParentForChildren(), + isClean()); + wrapper_ = null; + } + wrapperCase_ = 4; + onChanged(); + return pubsubWrapperBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig.NoWrapper, + com.google.pubsub.v1.PushConfig.NoWrapper.Builder, + com.google.pubsub.v1.PushConfig.NoWrapperOrBuilder> + noWrapperBuilder_; + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is not wrapped.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the noWrapper field is set. + */ + @java.lang.Override + public boolean hasNoWrapper() { + return wrapperCase_ == 5; + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is not wrapped.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The noWrapper. + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig.NoWrapper getNoWrapper() { + if (noWrapperBuilder_ == null) { + if (wrapperCase_ == 5) { + return (com.google.pubsub.v1.PushConfig.NoWrapper) wrapper_; + } + return com.google.pubsub.v1.PushConfig.NoWrapper.getDefaultInstance(); + } else { + if (wrapperCase_ == 5) { + return noWrapperBuilder_.getMessage(); + } + return com.google.pubsub.v1.PushConfig.NoWrapper.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is not wrapped.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setNoWrapper(com.google.pubsub.v1.PushConfig.NoWrapper value) { + if (noWrapperBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + wrapper_ = value; + onChanged(); + } else { + noWrapperBuilder_.setMessage(value); + } + wrapperCase_ = 5; + return this; + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is not wrapped.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setNoWrapper(com.google.pubsub.v1.PushConfig.NoWrapper.Builder builderForValue) { + if (noWrapperBuilder_ == null) { + wrapper_ = builderForValue.build(); + onChanged(); + } else { + noWrapperBuilder_.setMessage(builderForValue.build()); + } + wrapperCase_ = 5; + return this; + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is not wrapped.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeNoWrapper(com.google.pubsub.v1.PushConfig.NoWrapper value) { + if (noWrapperBuilder_ == null) { + if (wrapperCase_ == 5 + && wrapper_ != com.google.pubsub.v1.PushConfig.NoWrapper.getDefaultInstance()) { + wrapper_ = + com.google.pubsub.v1.PushConfig.NoWrapper.newBuilder( + (com.google.pubsub.v1.PushConfig.NoWrapper) wrapper_) + .mergeFrom(value) + .buildPartial(); + } else { + wrapper_ = value; + } + onChanged(); + } else { + if (wrapperCase_ == 5) { + noWrapperBuilder_.mergeFrom(value); + } else { + noWrapperBuilder_.setMessage(value); + } + } + wrapperCase_ = 5; + return this; + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is not wrapped.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearNoWrapper() { + if (noWrapperBuilder_ == null) { + if (wrapperCase_ == 5) { + wrapperCase_ = 0; + wrapper_ = null; + onChanged(); + } + } else { + if (wrapperCase_ == 5) { + wrapperCase_ = 0; + wrapper_ = null; + } + noWrapperBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is not wrapped.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.PushConfig.NoWrapper.Builder getNoWrapperBuilder() { + return internalGetNoWrapperFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is not wrapped.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig.NoWrapperOrBuilder getNoWrapperOrBuilder() { + if ((wrapperCase_ == 5) && (noWrapperBuilder_ != null)) { + return noWrapperBuilder_.getMessageOrBuilder(); + } else { + if (wrapperCase_ == 5) { + return (com.google.pubsub.v1.PushConfig.NoWrapper) wrapper_; + } + return com.google.pubsub.v1.PushConfig.NoWrapper.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. When set, the payload to the push endpoint is not wrapped.
+     * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig.NoWrapper, + com.google.pubsub.v1.PushConfig.NoWrapper.Builder, + com.google.pubsub.v1.PushConfig.NoWrapperOrBuilder> + internalGetNoWrapperFieldBuilder() { + if (noWrapperBuilder_ == null) { + if (!(wrapperCase_ == 5)) { + wrapper_ = com.google.pubsub.v1.PushConfig.NoWrapper.getDefaultInstance(); + } + noWrapperBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig.NoWrapper, + com.google.pubsub.v1.PushConfig.NoWrapper.Builder, + com.google.pubsub.v1.PushConfig.NoWrapperOrBuilder>( + (com.google.pubsub.v1.PushConfig.NoWrapper) wrapper_, + getParentForChildren(), + isClean()); + wrapper_ = null; + } + wrapperCase_ = 5; + onChanged(); + return noWrapperBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.PushConfig) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.PushConfig) + private static final com.google.pubsub.v1.PushConfig DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.PushConfig(); + } + + public static com.google.pubsub.v1.PushConfig getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PushConfig parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.PushConfig getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PushConfigOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PushConfigOrBuilder.java new file mode 100644 index 000000000000..c789fff48050 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/PushConfigOrBuilder.java @@ -0,0 +1,369 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface PushConfigOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.PushConfig) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. A URL locating the endpoint to which messages should be pushed.
+   * For example, a Webhook endpoint might use `https://example.com/push`.
+   * 
+ * + * string push_endpoint = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The pushEndpoint. + */ + java.lang.String getPushEndpoint(); + + /** + * + * + *
+   * Optional. A URL locating the endpoint to which messages should be pushed.
+   * For example, a Webhook endpoint might use `https://example.com/push`.
+   * 
+ * + * string push_endpoint = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for pushEndpoint. + */ + com.google.protobuf.ByteString getPushEndpointBytes(); + + /** + * + * + *
+   * Optional. Endpoint configuration attributes that can be used to control
+   * different aspects of the message delivery.
+   *
+   * The only currently supported attribute is `x-goog-version`, which you can
+   * use to change the format of the pushed message. This attribute
+   * indicates the version of the data expected by the endpoint. This
+   * controls the shape of the pushed message (i.e., its fields and metadata).
+   *
+   * If not present during the `CreateSubscription` call, it will default to
+   * the version of the Pub/Sub API used to make such call. If not present in a
+   * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+   * calls will always return a valid version, even if the subscription was
+   * created without this attribute.
+   *
+   * The only supported values for the `x-goog-version` attribute are:
+   *
+   * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+   * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+   *
+   * For example:
+   * `attributes { "x-goog-version": "v1" }`
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getAttributesCount(); + + /** + * + * + *
+   * Optional. Endpoint configuration attributes that can be used to control
+   * different aspects of the message delivery.
+   *
+   * The only currently supported attribute is `x-goog-version`, which you can
+   * use to change the format of the pushed message. This attribute
+   * indicates the version of the data expected by the endpoint. This
+   * controls the shape of the pushed message (i.e., its fields and metadata).
+   *
+   * If not present during the `CreateSubscription` call, it will default to
+   * the version of the Pub/Sub API used to make such call. If not present in a
+   * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+   * calls will always return a valid version, even if the subscription was
+   * created without this attribute.
+   *
+   * The only supported values for the `x-goog-version` attribute are:
+   *
+   * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+   * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+   *
+   * For example:
+   * `attributes { "x-goog-version": "v1" }`
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + boolean containsAttributes(java.lang.String key); + + /** Use {@link #getAttributesMap()} instead. */ + @java.lang.Deprecated + java.util.Map getAttributes(); + + /** + * + * + *
+   * Optional. Endpoint configuration attributes that can be used to control
+   * different aspects of the message delivery.
+   *
+   * The only currently supported attribute is `x-goog-version`, which you can
+   * use to change the format of the pushed message. This attribute
+   * indicates the version of the data expected by the endpoint. This
+   * controls the shape of the pushed message (i.e., its fields and metadata).
+   *
+   * If not present during the `CreateSubscription` call, it will default to
+   * the version of the Pub/Sub API used to make such call. If not present in a
+   * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+   * calls will always return a valid version, even if the subscription was
+   * created without this attribute.
+   *
+   * The only supported values for the `x-goog-version` attribute are:
+   *
+   * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+   * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+   *
+   * For example:
+   * `attributes { "x-goog-version": "v1" }`
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.Map getAttributesMap(); + + /** + * + * + *
+   * Optional. Endpoint configuration attributes that can be used to control
+   * different aspects of the message delivery.
+   *
+   * The only currently supported attribute is `x-goog-version`, which you can
+   * use to change the format of the pushed message. This attribute
+   * indicates the version of the data expected by the endpoint. This
+   * controls the shape of the pushed message (i.e., its fields and metadata).
+   *
+   * If not present during the `CreateSubscription` call, it will default to
+   * the version of the Pub/Sub API used to make such call. If not present in a
+   * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+   * calls will always return a valid version, even if the subscription was
+   * created without this attribute.
+   *
+   * The only supported values for the `x-goog-version` attribute are:
+   *
+   * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+   * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+   *
+   * For example:
+   * `attributes { "x-goog-version": "v1" }`
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + /* nullable */ + java.lang.String getAttributesOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue); + + /** + * + * + *
+   * Optional. Endpoint configuration attributes that can be used to control
+   * different aspects of the message delivery.
+   *
+   * The only currently supported attribute is `x-goog-version`, which you can
+   * use to change the format of the pushed message. This attribute
+   * indicates the version of the data expected by the endpoint. This
+   * controls the shape of the pushed message (i.e., its fields and metadata).
+   *
+   * If not present during the `CreateSubscription` call, it will default to
+   * the version of the Pub/Sub API used to make such call. If not present in a
+   * `ModifyPushConfig` call, its value will not be changed. `GetSubscription`
+   * calls will always return a valid version, even if the subscription was
+   * created without this attribute.
+   *
+   * The only supported values for the `x-goog-version` attribute are:
+   *
+   * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.
+   * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
+   *
+   * For example:
+   * `attributes { "x-goog-version": "v1" }`
+   * 
+ * + * map<string, string> attributes = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.lang.String getAttributesOrThrow(java.lang.String key); + + /** + * + * + *
+   * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+   * token as an `Authorization` header in the HTTP request for every pushed
+   * message.
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the oidcToken field is set. + */ + boolean hasOidcToken(); + + /** + * + * + *
+   * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+   * token as an `Authorization` header in the HTTP request for every pushed
+   * message.
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The oidcToken. + */ + com.google.pubsub.v1.PushConfig.OidcToken getOidcToken(); + + /** + * + * + *
+   * Optional. If specified, Pub/Sub will generate and attach an OIDC JWT
+   * token as an `Authorization` header in the HTTP request for every pushed
+   * message.
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.OidcToken oidc_token = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.PushConfig.OidcTokenOrBuilder getOidcTokenOrBuilder(); + + /** + * + * + *
+   * Optional. When set, the payload to the push endpoint is in the form of
+   * the JSON representation of a PubsubMessage
+   * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the pubsubWrapper field is set. + */ + boolean hasPubsubWrapper(); + + /** + * + * + *
+   * Optional. When set, the payload to the push endpoint is in the form of
+   * the JSON representation of a PubsubMessage
+   * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The pubsubWrapper. + */ + com.google.pubsub.v1.PushConfig.PubsubWrapper getPubsubWrapper(); + + /** + * + * + *
+   * Optional. When set, the payload to the push endpoint is in the form of
+   * the JSON representation of a PubsubMessage
+   * (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage).
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.PubsubWrapper pubsub_wrapper = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.PushConfig.PubsubWrapperOrBuilder getPubsubWrapperOrBuilder(); + + /** + * + * + *
+   * Optional. When set, the payload to the push endpoint is not wrapped.
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the noWrapper field is set. + */ + boolean hasNoWrapper(); + + /** + * + * + *
+   * Optional. When set, the payload to the push endpoint is not wrapped.
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The noWrapper. + */ + com.google.pubsub.v1.PushConfig.NoWrapper getNoWrapper(); + + /** + * + * + *
+   * Optional. When set, the payload to the push endpoint is not wrapped.
+   * 
+ * + * + * .google.pubsub.v1.PushConfig.NoWrapper no_wrapper = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.PushConfig.NoWrapperOrBuilder getNoWrapperOrBuilder(); + + com.google.pubsub.v1.PushConfig.AuthenticationMethodCase getAuthenticationMethodCase(); + + com.google.pubsub.v1.PushConfig.WrapperCase getWrapperCase(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ReceivedMessage.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ReceivedMessage.java new file mode 100644 index 000000000000..116667ae5ee4 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ReceivedMessage.java @@ -0,0 +1,1048 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * A message and its corresponding acknowledgment ID.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ReceivedMessage} + */ +@com.google.protobuf.Generated +public final class ReceivedMessage extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ReceivedMessage) + ReceivedMessageOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ReceivedMessage"); + } + + // Use ReceivedMessage.newBuilder() to construct. + private ReceivedMessage(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ReceivedMessage() { + ackId_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ReceivedMessage_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ReceivedMessage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ReceivedMessage.class, + com.google.pubsub.v1.ReceivedMessage.Builder.class); + } + + private int bitField0_; + public static final int ACK_ID_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object ackId_ = ""; + + /** + * + * + *
+   * Optional. This ID can be used to acknowledge the received message.
+   * 
+ * + * string ack_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The ackId. + */ + @java.lang.Override + public java.lang.String getAckId() { + java.lang.Object ref = ackId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + ackId_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. This ID can be used to acknowledge the received message.
+   * 
+ * + * string ack_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for ackId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getAckIdBytes() { + java.lang.Object ref = ackId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + ackId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int MESSAGE_FIELD_NUMBER = 2; + private com.google.pubsub.v1.PubsubMessage message_; + + /** + * + * + *
+   * Optional. The message.
+   * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the message field is set. + */ + @java.lang.Override + public boolean hasMessage() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Optional. The message.
+   * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The message. + */ + @java.lang.Override + public com.google.pubsub.v1.PubsubMessage getMessage() { + return message_ == null ? com.google.pubsub.v1.PubsubMessage.getDefaultInstance() : message_; + } + + /** + * + * + *
+   * Optional. The message.
+   * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.PubsubMessageOrBuilder getMessageOrBuilder() { + return message_ == null ? com.google.pubsub.v1.PubsubMessage.getDefaultInstance() : message_; + } + + public static final int DELIVERY_ATTEMPT_FIELD_NUMBER = 3; + private int deliveryAttempt_ = 0; + + /** + * + * + *
+   * Optional. The approximate number of times that Pub/Sub has attempted to
+   * deliver the associated message to a subscriber.
+   *
+   * More precisely, this is 1 + (number of NACKs) +
+   * (number of ack_deadline exceeds) for this message.
+   *
+   * A NACK is any call to ModifyAckDeadline with a 0 deadline. An ack_deadline
+   * exceeds event is whenever a message is not acknowledged within
+   * ack_deadline. Note that ack_deadline is initially
+   * Subscription.ackDeadlineSeconds, but may get extended automatically by
+   * the client library.
+   *
+   * Upon the first delivery of a given message, `delivery_attempt` will have a
+   * value of 1. The value is calculated at best effort and is approximate.
+   *
+   * If a DeadLetterPolicy is not set on the subscription, this will be 0.
+   * 
+ * + * int32 delivery_attempt = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The deliveryAttempt. + */ + @java.lang.Override + public int getDeliveryAttempt() { + return deliveryAttempt_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(ackId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, ackId_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(2, getMessage()); + } + if (deliveryAttempt_ != 0) { + output.writeInt32(3, deliveryAttempt_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(ackId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, ackId_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getMessage()); + } + if (deliveryAttempt_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, deliveryAttempt_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ReceivedMessage)) { + return super.equals(obj); + } + com.google.pubsub.v1.ReceivedMessage other = (com.google.pubsub.v1.ReceivedMessage) obj; + + if (!getAckId().equals(other.getAckId())) return false; + if (hasMessage() != other.hasMessage()) return false; + if (hasMessage()) { + if (!getMessage().equals(other.getMessage())) return false; + } + if (getDeliveryAttempt() != other.getDeliveryAttempt()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ACK_ID_FIELD_NUMBER; + hash = (53 * hash) + getAckId().hashCode(); + if (hasMessage()) { + hash = (37 * hash) + MESSAGE_FIELD_NUMBER; + hash = (53 * hash) + getMessage().hashCode(); + } + hash = (37 * hash) + DELIVERY_ATTEMPT_FIELD_NUMBER; + hash = (53 * hash) + getDeliveryAttempt(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ReceivedMessage parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ReceivedMessage parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ReceivedMessage parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ReceivedMessage parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ReceivedMessage parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ReceivedMessage parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ReceivedMessage parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ReceivedMessage parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ReceivedMessage parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ReceivedMessage parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ReceivedMessage parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ReceivedMessage parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ReceivedMessage prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * A message and its corresponding acknowledgment ID.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ReceivedMessage} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ReceivedMessage) + com.google.pubsub.v1.ReceivedMessageOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ReceivedMessage_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ReceivedMessage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ReceivedMessage.class, + com.google.pubsub.v1.ReceivedMessage.Builder.class); + } + + // Construct using com.google.pubsub.v1.ReceivedMessage.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetMessageFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + ackId_ = ""; + message_ = null; + if (messageBuilder_ != null) { + messageBuilder_.dispose(); + messageBuilder_ = null; + } + deliveryAttempt_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_ReceivedMessage_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ReceivedMessage getDefaultInstanceForType() { + return com.google.pubsub.v1.ReceivedMessage.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ReceivedMessage build() { + com.google.pubsub.v1.ReceivedMessage result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ReceivedMessage buildPartial() { + com.google.pubsub.v1.ReceivedMessage result = new com.google.pubsub.v1.ReceivedMessage(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ReceivedMessage result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.ackId_ = ackId_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.message_ = messageBuilder_ == null ? message_ : messageBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.deliveryAttempt_ = deliveryAttempt_; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ReceivedMessage) { + return mergeFrom((com.google.pubsub.v1.ReceivedMessage) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ReceivedMessage other) { + if (other == com.google.pubsub.v1.ReceivedMessage.getDefaultInstance()) return this; + if (!other.getAckId().isEmpty()) { + ackId_ = other.ackId_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.hasMessage()) { + mergeMessage(other.getMessage()); + } + if (other.getDeliveryAttempt() != 0) { + setDeliveryAttempt(other.getDeliveryAttempt()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + ackId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage(internalGetMessageFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 24: + { + deliveryAttempt_ = input.readInt32(); + bitField0_ |= 0x00000004; + break; + } // case 24 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object ackId_ = ""; + + /** + * + * + *
+     * Optional. This ID can be used to acknowledge the received message.
+     * 
+ * + * string ack_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The ackId. + */ + public java.lang.String getAckId() { + java.lang.Object ref = ackId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + ackId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. This ID can be used to acknowledge the received message.
+     * 
+ * + * string ack_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for ackId. + */ + public com.google.protobuf.ByteString getAckIdBytes() { + java.lang.Object ref = ackId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + ackId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. This ID can be used to acknowledge the received message.
+     * 
+ * + * string ack_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The ackId to set. + * @return This builder for chaining. + */ + public Builder setAckId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ackId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. This ID can be used to acknowledge the received message.
+     * 
+ * + * string ack_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearAckId() { + ackId_ = getDefaultInstance().getAckId(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. This ID can be used to acknowledge the received message.
+     * 
+ * + * string ack_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for ackId to set. + * @return This builder for chaining. + */ + public Builder setAckIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ackId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.pubsub.v1.PubsubMessage message_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PubsubMessage, + com.google.pubsub.v1.PubsubMessage.Builder, + com.google.pubsub.v1.PubsubMessageOrBuilder> + messageBuilder_; + + /** + * + * + *
+     * Optional. The message.
+     * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the message field is set. + */ + public boolean hasMessage() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+     * Optional. The message.
+     * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The message. + */ + public com.google.pubsub.v1.PubsubMessage getMessage() { + if (messageBuilder_ == null) { + return message_ == null + ? com.google.pubsub.v1.PubsubMessage.getDefaultInstance() + : message_; + } else { + return messageBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. The message.
+     * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessage(com.google.pubsub.v1.PubsubMessage value) { + if (messageBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + message_ = value; + } else { + messageBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The message.
+     * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessage(com.google.pubsub.v1.PubsubMessage.Builder builderForValue) { + if (messageBuilder_ == null) { + message_ = builderForValue.build(); + } else { + messageBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The message.
+     * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeMessage(com.google.pubsub.v1.PubsubMessage value) { + if (messageBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && message_ != null + && message_ != com.google.pubsub.v1.PubsubMessage.getDefaultInstance()) { + getMessageBuilder().mergeFrom(value); + } else { + message_ = value; + } + } else { + messageBuilder_.mergeFrom(value); + } + if (message_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. The message.
+     * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMessage() { + bitField0_ = (bitField0_ & ~0x00000002); + message_ = null; + if (messageBuilder_ != null) { + messageBuilder_.dispose(); + messageBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The message.
+     * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.PubsubMessage.Builder getMessageBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetMessageFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. The message.
+     * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.PubsubMessageOrBuilder getMessageOrBuilder() { + if (messageBuilder_ != null) { + return messageBuilder_.getMessageOrBuilder(); + } else { + return message_ == null + ? com.google.pubsub.v1.PubsubMessage.getDefaultInstance() + : message_; + } + } + + /** + * + * + *
+     * Optional. The message.
+     * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PubsubMessage, + com.google.pubsub.v1.PubsubMessage.Builder, + com.google.pubsub.v1.PubsubMessageOrBuilder> + internalGetMessageFieldBuilder() { + if (messageBuilder_ == null) { + messageBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PubsubMessage, + com.google.pubsub.v1.PubsubMessage.Builder, + com.google.pubsub.v1.PubsubMessageOrBuilder>( + getMessage(), getParentForChildren(), isClean()); + message_ = null; + } + return messageBuilder_; + } + + private int deliveryAttempt_; + + /** + * + * + *
+     * Optional. The approximate number of times that Pub/Sub has attempted to
+     * deliver the associated message to a subscriber.
+     *
+     * More precisely, this is 1 + (number of NACKs) +
+     * (number of ack_deadline exceeds) for this message.
+     *
+     * A NACK is any call to ModifyAckDeadline with a 0 deadline. An ack_deadline
+     * exceeds event is whenever a message is not acknowledged within
+     * ack_deadline. Note that ack_deadline is initially
+     * Subscription.ackDeadlineSeconds, but may get extended automatically by
+     * the client library.
+     *
+     * Upon the first delivery of a given message, `delivery_attempt` will have a
+     * value of 1. The value is calculated at best effort and is approximate.
+     *
+     * If a DeadLetterPolicy is not set on the subscription, this will be 0.
+     * 
+ * + * int32 delivery_attempt = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The deliveryAttempt. + */ + @java.lang.Override + public int getDeliveryAttempt() { + return deliveryAttempt_; + } + + /** + * + * + *
+     * Optional. The approximate number of times that Pub/Sub has attempted to
+     * deliver the associated message to a subscriber.
+     *
+     * More precisely, this is 1 + (number of NACKs) +
+     * (number of ack_deadline exceeds) for this message.
+     *
+     * A NACK is any call to ModifyAckDeadline with a 0 deadline. An ack_deadline
+     * exceeds event is whenever a message is not acknowledged within
+     * ack_deadline. Note that ack_deadline is initially
+     * Subscription.ackDeadlineSeconds, but may get extended automatically by
+     * the client library.
+     *
+     * Upon the first delivery of a given message, `delivery_attempt` will have a
+     * value of 1. The value is calculated at best effort and is approximate.
+     *
+     * If a DeadLetterPolicy is not set on the subscription, this will be 0.
+     * 
+ * + * int32 delivery_attempt = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The deliveryAttempt to set. + * @return This builder for chaining. + */ + public Builder setDeliveryAttempt(int value) { + + deliveryAttempt_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The approximate number of times that Pub/Sub has attempted to
+     * deliver the associated message to a subscriber.
+     *
+     * More precisely, this is 1 + (number of NACKs) +
+     * (number of ack_deadline exceeds) for this message.
+     *
+     * A NACK is any call to ModifyAckDeadline with a 0 deadline. An ack_deadline
+     * exceeds event is whenever a message is not acknowledged within
+     * ack_deadline. Note that ack_deadline is initially
+     * Subscription.ackDeadlineSeconds, but may get extended automatically by
+     * the client library.
+     *
+     * Upon the first delivery of a given message, `delivery_attempt` will have a
+     * value of 1. The value is calculated at best effort and is approximate.
+     *
+     * If a DeadLetterPolicy is not set on the subscription, this will be 0.
+     * 
+ * + * int32 delivery_attempt = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearDeliveryAttempt() { + bitField0_ = (bitField0_ & ~0x00000004); + deliveryAttempt_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ReceivedMessage) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ReceivedMessage) + private static final com.google.pubsub.v1.ReceivedMessage DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ReceivedMessage(); + } + + public static com.google.pubsub.v1.ReceivedMessage getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ReceivedMessage parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ReceivedMessage getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ReceivedMessageOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ReceivedMessageOrBuilder.java new file mode 100644 index 000000000000..c5acfe765411 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ReceivedMessageOrBuilder.java @@ -0,0 +1,122 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ReceivedMessageOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ReceivedMessage) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. This ID can be used to acknowledge the received message.
+   * 
+ * + * string ack_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The ackId. + */ + java.lang.String getAckId(); + + /** + * + * + *
+   * Optional. This ID can be used to acknowledge the received message.
+   * 
+ * + * string ack_id = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for ackId. + */ + com.google.protobuf.ByteString getAckIdBytes(); + + /** + * + * + *
+   * Optional. The message.
+   * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the message field is set. + */ + boolean hasMessage(); + + /** + * + * + *
+   * Optional. The message.
+   * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The message. + */ + com.google.pubsub.v1.PubsubMessage getMessage(); + + /** + * + * + *
+   * Optional. The message.
+   * 
+ * + * .google.pubsub.v1.PubsubMessage message = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.PubsubMessageOrBuilder getMessageOrBuilder(); + + /** + * + * + *
+   * Optional. The approximate number of times that Pub/Sub has attempted to
+   * deliver the associated message to a subscriber.
+   *
+   * More precisely, this is 1 + (number of NACKs) +
+   * (number of ack_deadline exceeds) for this message.
+   *
+   * A NACK is any call to ModifyAckDeadline with a 0 deadline. An ack_deadline
+   * exceeds event is whenever a message is not acknowledged within
+   * ack_deadline. Note that ack_deadline is initially
+   * Subscription.ackDeadlineSeconds, but may get extended automatically by
+   * the client library.
+   *
+   * Upon the first delivery of a given message, `delivery_attempt` will have a
+   * value of 1. The value is calculated at best effort and is approximate.
+   *
+   * If a DeadLetterPolicy is not set on the subscription, this will be 0.
+   * 
+ * + * int32 delivery_attempt = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The deliveryAttempt. + */ + int getDeliveryAttempt(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/RetryPolicy.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/RetryPolicy.java new file mode 100644 index 000000000000..bc68bddfc3a6 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/RetryPolicy.java @@ -0,0 +1,1073 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * A policy that specifies how Pub/Sub retries message delivery.
+ *
+ * Retry delay will be exponential based on provided minimum and maximum
+ * backoffs. https://en.wikipedia.org/wiki/Exponential_backoff.
+ *
+ * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+ * events for a given message.
+ *
+ * Retry Policy is implemented on a best effort basis. At times, the delay
+ * between consecutive deliveries may not match the configuration. That is,
+ * delay can be more or less than configured backoff.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.RetryPolicy} + */ +@com.google.protobuf.Generated +public final class RetryPolicy extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.RetryPolicy) + RetryPolicyOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "RetryPolicy"); + } + + // Use RetryPolicy.newBuilder() to construct. + private RetryPolicy(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private RetryPolicy() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto.internal_static_google_pubsub_v1_RetryPolicy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_RetryPolicy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.RetryPolicy.class, com.google.pubsub.v1.RetryPolicy.Builder.class); + } + + private int bitField0_; + public static final int MINIMUM_BACKOFF_FIELD_NUMBER = 1; + private com.google.protobuf.Duration minimumBackoff_; + + /** + * + * + *
+   * Optional. The minimum delay between consecutive deliveries of a given
+   * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+   * 
+ * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the minimumBackoff field is set. + */ + @java.lang.Override + public boolean hasMinimumBackoff() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Optional. The minimum delay between consecutive deliveries of a given
+   * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+   * 
+ * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The minimumBackoff. + */ + @java.lang.Override + public com.google.protobuf.Duration getMinimumBackoff() { + return minimumBackoff_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : minimumBackoff_; + } + + /** + * + * + *
+   * Optional. The minimum delay between consecutive deliveries of a given
+   * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+   * 
+ * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.protobuf.DurationOrBuilder getMinimumBackoffOrBuilder() { + return minimumBackoff_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : minimumBackoff_; + } + + public static final int MAXIMUM_BACKOFF_FIELD_NUMBER = 2; + private com.google.protobuf.Duration maximumBackoff_; + + /** + * + * + *
+   * Optional. The maximum delay between consecutive deliveries of a given
+   * message. Value should be between 0 and 600 seconds. Defaults to 600
+   * seconds.
+   * 
+ * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the maximumBackoff field is set. + */ + @java.lang.Override + public boolean hasMaximumBackoff() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+   * Optional. The maximum delay between consecutive deliveries of a given
+   * message. Value should be between 0 and 600 seconds. Defaults to 600
+   * seconds.
+   * 
+ * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The maximumBackoff. + */ + @java.lang.Override + public com.google.protobuf.Duration getMaximumBackoff() { + return maximumBackoff_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : maximumBackoff_; + } + + /** + * + * + *
+   * Optional. The maximum delay between consecutive deliveries of a given
+   * message. Value should be between 0 and 600 seconds. Defaults to 600
+   * seconds.
+   * 
+ * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.protobuf.DurationOrBuilder getMaximumBackoffOrBuilder() { + return maximumBackoff_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : maximumBackoff_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getMinimumBackoff()); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(2, getMaximumBackoff()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getMinimumBackoff()); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getMaximumBackoff()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.RetryPolicy)) { + return super.equals(obj); + } + com.google.pubsub.v1.RetryPolicy other = (com.google.pubsub.v1.RetryPolicy) obj; + + if (hasMinimumBackoff() != other.hasMinimumBackoff()) return false; + if (hasMinimumBackoff()) { + if (!getMinimumBackoff().equals(other.getMinimumBackoff())) return false; + } + if (hasMaximumBackoff() != other.hasMaximumBackoff()) return false; + if (hasMaximumBackoff()) { + if (!getMaximumBackoff().equals(other.getMaximumBackoff())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasMinimumBackoff()) { + hash = (37 * hash) + MINIMUM_BACKOFF_FIELD_NUMBER; + hash = (53 * hash) + getMinimumBackoff().hashCode(); + } + if (hasMaximumBackoff()) { + hash = (37 * hash) + MAXIMUM_BACKOFF_FIELD_NUMBER; + hash = (53 * hash) + getMaximumBackoff().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.RetryPolicy parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.RetryPolicy parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.RetryPolicy parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.RetryPolicy parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.RetryPolicy parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.RetryPolicy parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.RetryPolicy parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.RetryPolicy parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.RetryPolicy parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.RetryPolicy parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.RetryPolicy parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.RetryPolicy parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.RetryPolicy prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * A policy that specifies how Pub/Sub retries message delivery.
+   *
+   * Retry delay will be exponential based on provided minimum and maximum
+   * backoffs. https://en.wikipedia.org/wiki/Exponential_backoff.
+   *
+   * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+   * events for a given message.
+   *
+   * Retry Policy is implemented on a best effort basis. At times, the delay
+   * between consecutive deliveries may not match the configuration. That is,
+   * delay can be more or less than configured backoff.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.RetryPolicy} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.RetryPolicy) + com.google.pubsub.v1.RetryPolicyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_RetryPolicy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_RetryPolicy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.RetryPolicy.class, + com.google.pubsub.v1.RetryPolicy.Builder.class); + } + + // Construct using com.google.pubsub.v1.RetryPolicy.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetMinimumBackoffFieldBuilder(); + internalGetMaximumBackoffFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + minimumBackoff_ = null; + if (minimumBackoffBuilder_ != null) { + minimumBackoffBuilder_.dispose(); + minimumBackoffBuilder_ = null; + } + maximumBackoff_ = null; + if (maximumBackoffBuilder_ != null) { + maximumBackoffBuilder_.dispose(); + maximumBackoffBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_RetryPolicy_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.RetryPolicy getDefaultInstanceForType() { + return com.google.pubsub.v1.RetryPolicy.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.RetryPolicy build() { + com.google.pubsub.v1.RetryPolicy result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.RetryPolicy buildPartial() { + com.google.pubsub.v1.RetryPolicy result = new com.google.pubsub.v1.RetryPolicy(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.RetryPolicy result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.minimumBackoff_ = + minimumBackoffBuilder_ == null ? minimumBackoff_ : minimumBackoffBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.maximumBackoff_ = + maximumBackoffBuilder_ == null ? maximumBackoff_ : maximumBackoffBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.RetryPolicy) { + return mergeFrom((com.google.pubsub.v1.RetryPolicy) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.RetryPolicy other) { + if (other == com.google.pubsub.v1.RetryPolicy.getDefaultInstance()) return this; + if (other.hasMinimumBackoff()) { + mergeMinimumBackoff(other.getMinimumBackoff()); + } + if (other.hasMaximumBackoff()) { + mergeMaximumBackoff(other.getMaximumBackoff()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage( + internalGetMinimumBackoffFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetMaximumBackoffFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.Duration minimumBackoff_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + minimumBackoffBuilder_; + + /** + * + * + *
+     * Optional. The minimum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+     * 
+ * + * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the minimumBackoff field is set. + */ + public boolean hasMinimumBackoff() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+     * Optional. The minimum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+     * 
+ * + * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The minimumBackoff. + */ + public com.google.protobuf.Duration getMinimumBackoff() { + if (minimumBackoffBuilder_ == null) { + return minimumBackoff_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : minimumBackoff_; + } else { + return minimumBackoffBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. The minimum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+     * 
+ * + * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMinimumBackoff(com.google.protobuf.Duration value) { + if (minimumBackoffBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + minimumBackoff_ = value; + } else { + minimumBackoffBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The minimum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+     * 
+ * + * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMinimumBackoff(com.google.protobuf.Duration.Builder builderForValue) { + if (minimumBackoffBuilder_ == null) { + minimumBackoff_ = builderForValue.build(); + } else { + minimumBackoffBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The minimum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+     * 
+ * + * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeMinimumBackoff(com.google.protobuf.Duration value) { + if (minimumBackoffBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && minimumBackoff_ != null + && minimumBackoff_ != com.google.protobuf.Duration.getDefaultInstance()) { + getMinimumBackoffBuilder().mergeFrom(value); + } else { + minimumBackoff_ = value; + } + } else { + minimumBackoffBuilder_.mergeFrom(value); + } + if (minimumBackoff_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. The minimum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+     * 
+ * + * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMinimumBackoff() { + bitField0_ = (bitField0_ & ~0x00000001); + minimumBackoff_ = null; + if (minimumBackoffBuilder_ != null) { + minimumBackoffBuilder_.dispose(); + minimumBackoffBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The minimum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+     * 
+ * + * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.Duration.Builder getMinimumBackoffBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetMinimumBackoffFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. The minimum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+     * 
+ * + * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.DurationOrBuilder getMinimumBackoffOrBuilder() { + if (minimumBackoffBuilder_ != null) { + return minimumBackoffBuilder_.getMessageOrBuilder(); + } else { + return minimumBackoff_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : minimumBackoff_; + } + } + + /** + * + * + *
+     * Optional. The minimum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+     * 
+ * + * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + internalGetMinimumBackoffFieldBuilder() { + if (minimumBackoffBuilder_ == null) { + minimumBackoffBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder>( + getMinimumBackoff(), getParentForChildren(), isClean()); + minimumBackoff_ = null; + } + return minimumBackoffBuilder_; + } + + private com.google.protobuf.Duration maximumBackoff_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + maximumBackoffBuilder_; + + /** + * + * + *
+     * Optional. The maximum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 600
+     * seconds.
+     * 
+ * + * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the maximumBackoff field is set. + */ + public boolean hasMaximumBackoff() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+     * Optional. The maximum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 600
+     * seconds.
+     * 
+ * + * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The maximumBackoff. + */ + public com.google.protobuf.Duration getMaximumBackoff() { + if (maximumBackoffBuilder_ == null) { + return maximumBackoff_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : maximumBackoff_; + } else { + return maximumBackoffBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. The maximum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 600
+     * seconds.
+     * 
+ * + * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMaximumBackoff(com.google.protobuf.Duration value) { + if (maximumBackoffBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + maximumBackoff_ = value; + } else { + maximumBackoffBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The maximum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 600
+     * seconds.
+     * 
+ * + * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMaximumBackoff(com.google.protobuf.Duration.Builder builderForValue) { + if (maximumBackoffBuilder_ == null) { + maximumBackoff_ = builderForValue.build(); + } else { + maximumBackoffBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The maximum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 600
+     * seconds.
+     * 
+ * + * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeMaximumBackoff(com.google.protobuf.Duration value) { + if (maximumBackoffBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && maximumBackoff_ != null + && maximumBackoff_ != com.google.protobuf.Duration.getDefaultInstance()) { + getMaximumBackoffBuilder().mergeFrom(value); + } else { + maximumBackoff_ = value; + } + } else { + maximumBackoffBuilder_.mergeFrom(value); + } + if (maximumBackoff_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. The maximum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 600
+     * seconds.
+     * 
+ * + * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMaximumBackoff() { + bitField0_ = (bitField0_ & ~0x00000002); + maximumBackoff_ = null; + if (maximumBackoffBuilder_ != null) { + maximumBackoffBuilder_.dispose(); + maximumBackoffBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The maximum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 600
+     * seconds.
+     * 
+ * + * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.Duration.Builder getMaximumBackoffBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetMaximumBackoffFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. The maximum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 600
+     * seconds.
+     * 
+ * + * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.DurationOrBuilder getMaximumBackoffOrBuilder() { + if (maximumBackoffBuilder_ != null) { + return maximumBackoffBuilder_.getMessageOrBuilder(); + } else { + return maximumBackoff_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : maximumBackoff_; + } + } + + /** + * + * + *
+     * Optional. The maximum delay between consecutive deliveries of a given
+     * message. Value should be between 0 and 600 seconds. Defaults to 600
+     * seconds.
+     * 
+ * + * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + internalGetMaximumBackoffFieldBuilder() { + if (maximumBackoffBuilder_ == null) { + maximumBackoffBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder>( + getMaximumBackoff(), getParentForChildren(), isClean()); + maximumBackoff_ = null; + } + return maximumBackoffBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.RetryPolicy) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.RetryPolicy) + private static final com.google.pubsub.v1.RetryPolicy DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.RetryPolicy(); + } + + public static com.google.pubsub.v1.RetryPolicy getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public RetryPolicy parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.RetryPolicy getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/RetryPolicyOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/RetryPolicyOrBuilder.java new file mode 100644 index 000000000000..1d458323120d --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/RetryPolicyOrBuilder.java @@ -0,0 +1,117 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface RetryPolicyOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.RetryPolicy) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The minimum delay between consecutive deliveries of a given
+   * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+   * 
+ * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the minimumBackoff field is set. + */ + boolean hasMinimumBackoff(); + + /** + * + * + *
+   * Optional. The minimum delay between consecutive deliveries of a given
+   * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+   * 
+ * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The minimumBackoff. + */ + com.google.protobuf.Duration getMinimumBackoff(); + + /** + * + * + *
+   * Optional. The minimum delay between consecutive deliveries of a given
+   * message. Value should be between 0 and 600 seconds. Defaults to 10 seconds.
+   * 
+ * + * .google.protobuf.Duration minimum_backoff = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.protobuf.DurationOrBuilder getMinimumBackoffOrBuilder(); + + /** + * + * + *
+   * Optional. The maximum delay between consecutive deliveries of a given
+   * message. Value should be between 0 and 600 seconds. Defaults to 600
+   * seconds.
+   * 
+ * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the maximumBackoff field is set. + */ + boolean hasMaximumBackoff(); + + /** + * + * + *
+   * Optional. The maximum delay between consecutive deliveries of a given
+   * message. Value should be between 0 and 600 seconds. Defaults to 600
+   * seconds.
+   * 
+ * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The maximumBackoff. + */ + com.google.protobuf.Duration getMaximumBackoff(); + + /** + * + * + *
+   * Optional. The maximum delay between consecutive deliveries of a given
+   * message. Value should be between 0 and 600 seconds. Defaults to 600
+   * seconds.
+   * 
+ * + * .google.protobuf.Duration maximum_backoff = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.protobuf.DurationOrBuilder getMaximumBackoffOrBuilder(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/RollbackSchemaRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/RollbackSchemaRequest.java new file mode 100644 index 000000000000..651e58a5aebb --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/RollbackSchemaRequest.java @@ -0,0 +1,819 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `RollbackSchema` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.RollbackSchemaRequest} + */ +@com.google.protobuf.Generated +public final class RollbackSchemaRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.RollbackSchemaRequest) + RollbackSchemaRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "RollbackSchemaRequest"); + } + + // Use RollbackSchemaRequest.newBuilder() to construct. + private RollbackSchemaRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private RollbackSchemaRequest() { + name_ = ""; + revisionId_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_RollbackSchemaRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_RollbackSchemaRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.RollbackSchemaRequest.class, + com.google.pubsub.v1.RollbackSchemaRequest.Builder.class); + } + + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
+   * Required. The schema being rolled back with revision id.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The schema being rolled back with revision id.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int REVISION_ID_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object revisionId_ = ""; + + /** + * + * + *
+   * Required. The revision ID to roll back to.
+   * It must be a revision of the same schema.
+   *
+   * Example: c7cfa2a8
+   * 
+ * + * string revision_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The revisionId. + */ + @java.lang.Override + public java.lang.String getRevisionId() { + java.lang.Object ref = revisionId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + revisionId_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The revision ID to roll back to.
+   * It must be a revision of the same schema.
+   *
+   * Example: c7cfa2a8
+   * 
+ * + * string revision_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for revisionId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getRevisionIdBytes() { + java.lang.Object ref = revisionId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + revisionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(revisionId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, revisionId_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(revisionId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, revisionId_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.RollbackSchemaRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.RollbackSchemaRequest other = + (com.google.pubsub.v1.RollbackSchemaRequest) obj; + + if (!getName().equals(other.getName())) return false; + if (!getRevisionId().equals(other.getRevisionId())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + REVISION_ID_FIELD_NUMBER; + hash = (53 * hash) + getRevisionId().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.RollbackSchemaRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.RollbackSchemaRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.RollbackSchemaRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.RollbackSchemaRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.RollbackSchemaRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.RollbackSchemaRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.RollbackSchemaRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.RollbackSchemaRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.RollbackSchemaRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.RollbackSchemaRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.RollbackSchemaRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.RollbackSchemaRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.RollbackSchemaRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `RollbackSchema` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.RollbackSchemaRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.RollbackSchemaRequest) + com.google.pubsub.v1.RollbackSchemaRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_RollbackSchemaRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_RollbackSchemaRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.RollbackSchemaRequest.class, + com.google.pubsub.v1.RollbackSchemaRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.RollbackSchemaRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + revisionId_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_RollbackSchemaRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.RollbackSchemaRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.RollbackSchemaRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.RollbackSchemaRequest build() { + com.google.pubsub.v1.RollbackSchemaRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.RollbackSchemaRequest buildPartial() { + com.google.pubsub.v1.RollbackSchemaRequest result = + new com.google.pubsub.v1.RollbackSchemaRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.RollbackSchemaRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.revisionId_ = revisionId_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.RollbackSchemaRequest) { + return mergeFrom((com.google.pubsub.v1.RollbackSchemaRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.RollbackSchemaRequest other) { + if (other == com.google.pubsub.v1.RollbackSchemaRequest.getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getRevisionId().isEmpty()) { + revisionId_ = other.revisionId_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + revisionId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object name_ = ""; + + /** + * + * + *
+     * Required. The schema being rolled back with revision id.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The schema being rolled back with revision id.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The schema being rolled back with revision id.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The schema being rolled back with revision id.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The schema being rolled back with revision id.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object revisionId_ = ""; + + /** + * + * + *
+     * Required. The revision ID to roll back to.
+     * It must be a revision of the same schema.
+     *
+     * Example: c7cfa2a8
+     * 
+ * + * string revision_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The revisionId. + */ + public java.lang.String getRevisionId() { + java.lang.Object ref = revisionId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + revisionId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The revision ID to roll back to.
+     * It must be a revision of the same schema.
+     *
+     * Example: c7cfa2a8
+     * 
+ * + * string revision_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for revisionId. + */ + public com.google.protobuf.ByteString getRevisionIdBytes() { + java.lang.Object ref = revisionId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + revisionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The revision ID to roll back to.
+     * It must be a revision of the same schema.
+     *
+     * Example: c7cfa2a8
+     * 
+ * + * string revision_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The revisionId to set. + * @return This builder for chaining. + */ + public Builder setRevisionId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + revisionId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The revision ID to roll back to.
+     * It must be a revision of the same schema.
+     *
+     * Example: c7cfa2a8
+     * 
+ * + * string revision_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearRevisionId() { + revisionId_ = getDefaultInstance().getRevisionId(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The revision ID to roll back to.
+     * It must be a revision of the same schema.
+     *
+     * Example: c7cfa2a8
+     * 
+ * + * string revision_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for revisionId to set. + * @return This builder for chaining. + */ + public Builder setRevisionIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + revisionId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.RollbackSchemaRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.RollbackSchemaRequest) + private static final com.google.pubsub.v1.RollbackSchemaRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.RollbackSchemaRequest(); + } + + public static com.google.pubsub.v1.RollbackSchemaRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public RollbackSchemaRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.RollbackSchemaRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/RollbackSchemaRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/RollbackSchemaRequestOrBuilder.java new file mode 100644 index 000000000000..3a99e5b045d0 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/RollbackSchemaRequestOrBuilder.java @@ -0,0 +1,90 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface RollbackSchemaRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.RollbackSchemaRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The schema being rolled back with revision id.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Required. The schema being rolled back with revision id.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * + * + *
+   * Required. The revision ID to roll back to.
+   * It must be a revision of the same schema.
+   *
+   * Example: c7cfa2a8
+   * 
+ * + * string revision_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The revisionId. + */ + java.lang.String getRevisionId(); + + /** + * + * + *
+   * Required. The revision ID to roll back to.
+   * It must be a revision of the same schema.
+   *
+   * Example: c7cfa2a8
+   * 
+ * + * string revision_id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for revisionId. + */ + com.google.protobuf.ByteString getRevisionIdBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Schema.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Schema.java new file mode 100644 index 000000000000..c5cf382ada72 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Schema.java @@ -0,0 +1,1641 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * A schema resource.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.Schema} + */ +@com.google.protobuf.Generated +public final class Schema extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.Schema) + SchemaOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Schema"); + } + + // Use Schema.newBuilder() to construct. + private Schema(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Schema() { + name_ = ""; + type_ = 0; + definition_ = ""; + revisionId_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto.internal_static_google_pubsub_v1_Schema_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_Schema_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.Schema.class, com.google.pubsub.v1.Schema.Builder.class); + } + + /** + * + * + *
+   * Possible schema definition types.
+   * 
+ * + * Protobuf enum {@code google.pubsub.v1.Schema.Type} + */ + public enum Type implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+     * Default value. This value is unused.
+     * 
+ * + * TYPE_UNSPECIFIED = 0; + */ + TYPE_UNSPECIFIED(0), + /** + * + * + *
+     * A Protocol Buffer schema definition.
+     * 
+ * + * PROTOCOL_BUFFER = 1; + */ + PROTOCOL_BUFFER(1), + /** + * + * + *
+     * An Avro schema definition.
+     * 
+ * + * AVRO = 2; + */ + AVRO(2), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Type"); + } + + /** + * + * + *
+     * Default value. This value is unused.
+     * 
+ * + * TYPE_UNSPECIFIED = 0; + */ + public static final int TYPE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+     * A Protocol Buffer schema definition.
+     * 
+ * + * PROTOCOL_BUFFER = 1; + */ + public static final int PROTOCOL_BUFFER_VALUE = 1; + + /** + * + * + *
+     * An Avro schema definition.
+     * 
+ * + * AVRO = 2; + */ + public static final int AVRO_VALUE = 2; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static Type valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static Type forNumber(int value) { + switch (value) { + case 0: + return TYPE_UNSPECIFIED; + case 1: + return PROTOCOL_BUFFER; + case 2: + return AVRO; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Type findValueByNumber(int number) { + return Type.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.Schema.getDescriptor().getEnumTypes().get(0); + } + + private static final Type[] VALUES = values(); + + public static Type valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private Type(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.Schema.Type) + } + + private int bitField0_; + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
+   * Required. Name of the schema.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. Name of the schema.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TYPE_FIELD_NUMBER = 2; + private int type_ = 0; + + /** + * + * + *
+   * The type of the schema definition.
+   * 
+ * + * .google.pubsub.v1.Schema.Type type = 2; + * + * @return The enum numeric value on the wire for type. + */ + @java.lang.Override + public int getTypeValue() { + return type_; + } + + /** + * + * + *
+   * The type of the schema definition.
+   * 
+ * + * .google.pubsub.v1.Schema.Type type = 2; + * + * @return The type. + */ + @java.lang.Override + public com.google.pubsub.v1.Schema.Type getType() { + com.google.pubsub.v1.Schema.Type result = com.google.pubsub.v1.Schema.Type.forNumber(type_); + return result == null ? com.google.pubsub.v1.Schema.Type.UNRECOGNIZED : result; + } + + public static final int DEFINITION_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object definition_ = ""; + + /** + * + * + *
+   * The definition of the schema. This should contain a string representing
+   * the full definition of the schema that is a valid schema definition of
+   * the type specified in `type`.
+   * 
+ * + * string definition = 3; + * + * @return The definition. + */ + @java.lang.Override + public java.lang.String getDefinition() { + java.lang.Object ref = definition_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + definition_ = s; + return s; + } + } + + /** + * + * + *
+   * The definition of the schema. This should contain a string representing
+   * the full definition of the schema that is a valid schema definition of
+   * the type specified in `type`.
+   * 
+ * + * string definition = 3; + * + * @return The bytes for definition. + */ + @java.lang.Override + public com.google.protobuf.ByteString getDefinitionBytes() { + java.lang.Object ref = definition_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + definition_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int REVISION_ID_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private volatile java.lang.Object revisionId_ = ""; + + /** + * + * + *
+   * Output only. Immutable. The revision ID of the schema.
+   * 
+ * + * + * string revision_id = 4 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The revisionId. + */ + @java.lang.Override + public java.lang.String getRevisionId() { + java.lang.Object ref = revisionId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + revisionId_ = s; + return s; + } + } + + /** + * + * + *
+   * Output only. Immutable. The revision ID of the schema.
+   * 
+ * + * + * string revision_id = 4 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The bytes for revisionId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getRevisionIdBytes() { + java.lang.Object ref = revisionId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + revisionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int REVISION_CREATE_TIME_FIELD_NUMBER = 6; + private com.google.protobuf.Timestamp revisionCreateTime_; + + /** + * + * + *
+   * Output only. The timestamp that the revision was created.
+   * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the revisionCreateTime field is set. + */ + @java.lang.Override + public boolean hasRevisionCreateTime() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Output only. The timestamp that the revision was created.
+   * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The revisionCreateTime. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getRevisionCreateTime() { + return revisionCreateTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : revisionCreateTime_; + } + + /** + * + * + *
+   * Output only. The timestamp that the revision was created.
+   * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getRevisionCreateTimeOrBuilder() { + return revisionCreateTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : revisionCreateTime_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); + } + if (type_ != com.google.pubsub.v1.Schema.Type.TYPE_UNSPECIFIED.getNumber()) { + output.writeEnum(2, type_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(definition_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, definition_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(revisionId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, revisionId_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(6, getRevisionCreateTime()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); + } + if (type_ != com.google.pubsub.v1.Schema.Type.TYPE_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, type_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(definition_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, definition_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(revisionId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, revisionId_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, getRevisionCreateTime()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.Schema)) { + return super.equals(obj); + } + com.google.pubsub.v1.Schema other = (com.google.pubsub.v1.Schema) obj; + + if (!getName().equals(other.getName())) return false; + if (type_ != other.type_) return false; + if (!getDefinition().equals(other.getDefinition())) return false; + if (!getRevisionId().equals(other.getRevisionId())) return false; + if (hasRevisionCreateTime() != other.hasRevisionCreateTime()) return false; + if (hasRevisionCreateTime()) { + if (!getRevisionCreateTime().equals(other.getRevisionCreateTime())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + TYPE_FIELD_NUMBER; + hash = (53 * hash) + type_; + hash = (37 * hash) + DEFINITION_FIELD_NUMBER; + hash = (53 * hash) + getDefinition().hashCode(); + hash = (37 * hash) + REVISION_ID_FIELD_NUMBER; + hash = (53 * hash) + getRevisionId().hashCode(); + if (hasRevisionCreateTime()) { + hash = (37 * hash) + REVISION_CREATE_TIME_FIELD_NUMBER; + hash = (53 * hash) + getRevisionCreateTime().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.Schema parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Schema parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Schema parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Schema parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Schema parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Schema parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Schema parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Schema parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.Schema parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Schema parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.Schema parseFrom(com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Schema parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.Schema prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * A schema resource.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.Schema} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.Schema) + com.google.pubsub.v1.SchemaOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto.internal_static_google_pubsub_v1_Schema_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_Schema_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.Schema.class, com.google.pubsub.v1.Schema.Builder.class); + } + + // Construct using com.google.pubsub.v1.Schema.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetRevisionCreateTimeFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + type_ = 0; + definition_ = ""; + revisionId_ = ""; + revisionCreateTime_ = null; + if (revisionCreateTimeBuilder_ != null) { + revisionCreateTimeBuilder_.dispose(); + revisionCreateTimeBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto.internal_static_google_pubsub_v1_Schema_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.Schema getDefaultInstanceForType() { + return com.google.pubsub.v1.Schema.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.Schema build() { + com.google.pubsub.v1.Schema result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.Schema buildPartial() { + com.google.pubsub.v1.Schema result = new com.google.pubsub.v1.Schema(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.Schema result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.type_ = type_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.definition_ = definition_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.revisionId_ = revisionId_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000010) != 0)) { + result.revisionCreateTime_ = + revisionCreateTimeBuilder_ == null + ? revisionCreateTime_ + : revisionCreateTimeBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.Schema) { + return mergeFrom((com.google.pubsub.v1.Schema) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.Schema other) { + if (other == com.google.pubsub.v1.Schema.getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.type_ != 0) { + setTypeValue(other.getTypeValue()); + } + if (!other.getDefinition().isEmpty()) { + definition_ = other.definition_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (!other.getRevisionId().isEmpty()) { + revisionId_ = other.revisionId_; + bitField0_ |= 0x00000008; + onChanged(); + } + if (other.hasRevisionCreateTime()) { + mergeRevisionCreateTime(other.getRevisionCreateTime()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + type_ = input.readEnum(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 26: + { + definition_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + revisionId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 50: + { + input.readMessage( + internalGetRevisionCreateTimeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000010; + break; + } // case 50 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object name_ = ""; + + /** + * + * + *
+     * Required. Name of the schema.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. Name of the schema.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. Name of the schema.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Name of the schema.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Name of the schema.
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private int type_ = 0; + + /** + * + * + *
+     * The type of the schema definition.
+     * 
+ * + * .google.pubsub.v1.Schema.Type type = 2; + * + * @return The enum numeric value on the wire for type. + */ + @java.lang.Override + public int getTypeValue() { + return type_; + } + + /** + * + * + *
+     * The type of the schema definition.
+     * 
+ * + * .google.pubsub.v1.Schema.Type type = 2; + * + * @param value The enum numeric value on the wire for type to set. + * @return This builder for chaining. + */ + public Builder setTypeValue(int value) { + type_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * The type of the schema definition.
+     * 
+ * + * .google.pubsub.v1.Schema.Type type = 2; + * + * @return The type. + */ + @java.lang.Override + public com.google.pubsub.v1.Schema.Type getType() { + com.google.pubsub.v1.Schema.Type result = com.google.pubsub.v1.Schema.Type.forNumber(type_); + return result == null ? com.google.pubsub.v1.Schema.Type.UNRECOGNIZED : result; + } + + /** + * + * + *
+     * The type of the schema definition.
+     * 
+ * + * .google.pubsub.v1.Schema.Type type = 2; + * + * @param value The type to set. + * @return This builder for chaining. + */ + public Builder setType(com.google.pubsub.v1.Schema.Type value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + type_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * The type of the schema definition.
+     * 
+ * + * .google.pubsub.v1.Schema.Type type = 2; + * + * @return This builder for chaining. + */ + public Builder clearType() { + bitField0_ = (bitField0_ & ~0x00000002); + type_ = 0; + onChanged(); + return this; + } + + private java.lang.Object definition_ = ""; + + /** + * + * + *
+     * The definition of the schema. This should contain a string representing
+     * the full definition of the schema that is a valid schema definition of
+     * the type specified in `type`.
+     * 
+ * + * string definition = 3; + * + * @return The definition. + */ + public java.lang.String getDefinition() { + java.lang.Object ref = definition_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + definition_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * The definition of the schema. This should contain a string representing
+     * the full definition of the schema that is a valid schema definition of
+     * the type specified in `type`.
+     * 
+ * + * string definition = 3; + * + * @return The bytes for definition. + */ + public com.google.protobuf.ByteString getDefinitionBytes() { + java.lang.Object ref = definition_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + definition_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * The definition of the schema. This should contain a string representing
+     * the full definition of the schema that is a valid schema definition of
+     * the type specified in `type`.
+     * 
+ * + * string definition = 3; + * + * @param value The definition to set. + * @return This builder for chaining. + */ + public Builder setDefinition(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + definition_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * The definition of the schema. This should contain a string representing
+     * the full definition of the schema that is a valid schema definition of
+     * the type specified in `type`.
+     * 
+ * + * string definition = 3; + * + * @return This builder for chaining. + */ + public Builder clearDefinition() { + definition_ = getDefaultInstance().getDefinition(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+     * The definition of the schema. This should contain a string representing
+     * the full definition of the schema that is a valid schema definition of
+     * the type specified in `type`.
+     * 
+ * + * string definition = 3; + * + * @param value The bytes for definition to set. + * @return This builder for chaining. + */ + public Builder setDefinitionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + definition_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private java.lang.Object revisionId_ = ""; + + /** + * + * + *
+     * Output only. Immutable. The revision ID of the schema.
+     * 
+ * + * + * string revision_id = 4 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The revisionId. + */ + public java.lang.String getRevisionId() { + java.lang.Object ref = revisionId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + revisionId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Output only. Immutable. The revision ID of the schema.
+     * 
+ * + * + * string revision_id = 4 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The bytes for revisionId. + */ + public com.google.protobuf.ByteString getRevisionIdBytes() { + java.lang.Object ref = revisionId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + revisionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Output only. Immutable. The revision ID of the schema.
+     * 
+ * + * + * string revision_id = 4 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The revisionId to set. + * @return This builder for chaining. + */ + public Builder setRevisionId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + revisionId_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. Immutable. The revision ID of the schema.
+     * 
+ * + * + * string revision_id = 4 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearRevisionId() { + revisionId_ = getDefaultInstance().getRevisionId(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. Immutable. The revision ID of the schema.
+     * 
+ * + * + * string revision_id = 4 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The bytes for revisionId to set. + * @return This builder for chaining. + */ + public Builder setRevisionIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + revisionId_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + private com.google.protobuf.Timestamp revisionCreateTime_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + revisionCreateTimeBuilder_; + + /** + * + * + *
+     * Output only. The timestamp that the revision was created.
+     * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the revisionCreateTime field is set. + */ + public boolean hasRevisionCreateTime() { + return ((bitField0_ & 0x00000010) != 0); + } + + /** + * + * + *
+     * Output only. The timestamp that the revision was created.
+     * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The revisionCreateTime. + */ + public com.google.protobuf.Timestamp getRevisionCreateTime() { + if (revisionCreateTimeBuilder_ == null) { + return revisionCreateTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : revisionCreateTime_; + } else { + return revisionCreateTimeBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Output only. The timestamp that the revision was created.
+     * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setRevisionCreateTime(com.google.protobuf.Timestamp value) { + if (revisionCreateTimeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + revisionCreateTime_ = value; + } else { + revisionCreateTimeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. The timestamp that the revision was created.
+     * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setRevisionCreateTime(com.google.protobuf.Timestamp.Builder builderForValue) { + if (revisionCreateTimeBuilder_ == null) { + revisionCreateTime_ = builderForValue.build(); + } else { + revisionCreateTimeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. The timestamp that the revision was created.
+     * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder mergeRevisionCreateTime(com.google.protobuf.Timestamp value) { + if (revisionCreateTimeBuilder_ == null) { + if (((bitField0_ & 0x00000010) != 0) + && revisionCreateTime_ != null + && revisionCreateTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getRevisionCreateTimeBuilder().mergeFrom(value); + } else { + revisionCreateTime_ = value; + } + } else { + revisionCreateTimeBuilder_.mergeFrom(value); + } + if (revisionCreateTime_ != null) { + bitField0_ |= 0x00000010; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Output only. The timestamp that the revision was created.
+     * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder clearRevisionCreateTime() { + bitField0_ = (bitField0_ & ~0x00000010); + revisionCreateTime_ = null; + if (revisionCreateTimeBuilder_ != null) { + revisionCreateTimeBuilder_.dispose(); + revisionCreateTimeBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. The timestamp that the revision was created.
+     * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.protobuf.Timestamp.Builder getRevisionCreateTimeBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return internalGetRevisionCreateTimeFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Output only. The timestamp that the revision was created.
+     * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.protobuf.TimestampOrBuilder getRevisionCreateTimeOrBuilder() { + if (revisionCreateTimeBuilder_ != null) { + return revisionCreateTimeBuilder_.getMessageOrBuilder(); + } else { + return revisionCreateTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : revisionCreateTime_; + } + } + + /** + * + * + *
+     * Output only. The timestamp that the revision was created.
+     * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetRevisionCreateTimeFieldBuilder() { + if (revisionCreateTimeBuilder_ == null) { + revisionCreateTimeBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getRevisionCreateTime(), getParentForChildren(), isClean()); + revisionCreateTime_ = null; + } + return revisionCreateTimeBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.Schema) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.Schema) + private static final com.google.pubsub.v1.Schema DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.Schema(); + } + + public static com.google.pubsub.v1.Schema getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Schema parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.Schema getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaName.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaName.java new file mode 100644 index 000000000000..b3eaa772f014 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaName.java @@ -0,0 +1,191 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.pubsub.v1; + +import com.google.api.pathtemplate.PathTemplate; +import com.google.api.resourcenames.ResourceName; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +@Generated("by gapic-generator-java") +public class SchemaName implements ResourceName { + private static final PathTemplate PROJECT_SCHEMA = + PathTemplate.createWithoutUrlEncoding("projects/{project}/schemas/{schema}"); + private volatile Map fieldValuesMap; + private final String project; + private final String schema; + + @Deprecated + protected SchemaName() { + project = null; + schema = null; + } + + private SchemaName(Builder builder) { + project = Preconditions.checkNotNull(builder.getProject()); + schema = Preconditions.checkNotNull(builder.getSchema()); + } + + public String getProject() { + return project; + } + + public String getSchema() { + return schema; + } + + public static Builder newBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + public static SchemaName of(String project, String schema) { + return newBuilder().setProject(project).setSchema(schema).build(); + } + + public static String format(String project, String schema) { + return newBuilder().setProject(project).setSchema(schema).build().toString(); + } + + public static SchemaName parse(String formattedString) { + if (formattedString.isEmpty()) { + return null; + } + Map matchMap = + PROJECT_SCHEMA.validatedMatch( + formattedString, "SchemaName.parse: formattedString not in valid format"); + return of(matchMap.get("project"), matchMap.get("schema")); + } + + public static List parseList(List formattedStrings) { + List list = new ArrayList<>(formattedStrings.size()); + for (String formattedString : formattedStrings) { + list.add(parse(formattedString)); + } + return list; + } + + public static List toStringList(List values) { + List list = new ArrayList<>(values.size()); + for (SchemaName value : values) { + if (value == null) { + list.add(""); + } else { + list.add(value.toString()); + } + } + return list; + } + + public static boolean isParsableFrom(String formattedString) { + return PROJECT_SCHEMA.matches(formattedString); + } + + @Override + public Map getFieldValuesMap() { + if (fieldValuesMap == null) { + synchronized (this) { + if (fieldValuesMap == null) { + ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder(); + if (project != null) { + fieldMapBuilder.put("project", project); + } + if (schema != null) { + fieldMapBuilder.put("schema", schema); + } + fieldValuesMap = fieldMapBuilder.build(); + } + } + } + return fieldValuesMap; + } + + public String getFieldValue(String fieldName) { + return getFieldValuesMap().get(fieldName); + } + + @Override + public String toString() { + return PROJECT_SCHEMA.instantiate("project", project, "schema", schema); + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o != null && getClass() == o.getClass()) { + SchemaName that = ((SchemaName) o); + return Objects.equals(this.project, that.project) && Objects.equals(this.schema, that.schema); + } + return false; + } + + @Override + public int hashCode() { + int h = 1; + h *= 1000003; + h ^= Objects.hashCode(project); + h *= 1000003; + h ^= Objects.hashCode(schema); + return h; + } + + /** Builder for projects/{project}/schemas/{schema}. */ + public static class Builder { + private String project; + private String schema; + + protected Builder() {} + + public String getProject() { + return project; + } + + public String getSchema() { + return schema; + } + + public Builder setProject(String project) { + this.project = project; + return this; + } + + public Builder setSchema(String schema) { + this.schema = schema; + return this; + } + + private Builder(SchemaName schemaName) { + this.project = schemaName.project; + this.schema = schemaName.schema; + } + + public SchemaName build() { + return new SchemaName(this); + } + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaOrBuilder.java new file mode 100644 index 000000000000..07b9739b1bf7 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaOrBuilder.java @@ -0,0 +1,185 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface SchemaOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.Schema) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. Name of the schema.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Required. Name of the schema.
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * string name = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * + * + *
+   * The type of the schema definition.
+   * 
+ * + * .google.pubsub.v1.Schema.Type type = 2; + * + * @return The enum numeric value on the wire for type. + */ + int getTypeValue(); + + /** + * + * + *
+   * The type of the schema definition.
+   * 
+ * + * .google.pubsub.v1.Schema.Type type = 2; + * + * @return The type. + */ + com.google.pubsub.v1.Schema.Type getType(); + + /** + * + * + *
+   * The definition of the schema. This should contain a string representing
+   * the full definition of the schema that is a valid schema definition of
+   * the type specified in `type`.
+   * 
+ * + * string definition = 3; + * + * @return The definition. + */ + java.lang.String getDefinition(); + + /** + * + * + *
+   * The definition of the schema. This should contain a string representing
+   * the full definition of the schema that is a valid schema definition of
+   * the type specified in `type`.
+   * 
+ * + * string definition = 3; + * + * @return The bytes for definition. + */ + com.google.protobuf.ByteString getDefinitionBytes(); + + /** + * + * + *
+   * Output only. Immutable. The revision ID of the schema.
+   * 
+ * + * + * string revision_id = 4 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The revisionId. + */ + java.lang.String getRevisionId(); + + /** + * + * + *
+   * Output only. Immutable. The revision ID of the schema.
+   * 
+ * + * + * string revision_id = 4 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The bytes for revisionId. + */ + com.google.protobuf.ByteString getRevisionIdBytes(); + + /** + * + * + *
+   * Output only. The timestamp that the revision was created.
+   * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the revisionCreateTime field is set. + */ + boolean hasRevisionCreateTime(); + + /** + * + * + *
+   * Output only. The timestamp that the revision was created.
+   * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The revisionCreateTime. + */ + com.google.protobuf.Timestamp getRevisionCreateTime(); + + /** + * + * + *
+   * Output only. The timestamp that the revision was created.
+   * 
+ * + * + * .google.protobuf.Timestamp revision_create_time = 6 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + com.google.protobuf.TimestampOrBuilder getRevisionCreateTimeOrBuilder(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaProto.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaProto.java new file mode 100644 index 000000000000..6964d4e1dea3 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaProto.java @@ -0,0 +1,365 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public final class SchemaProto extends com.google.protobuf.GeneratedFile { + private SchemaProto() {} + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SchemaProto"); + } + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); + } + + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_Schema_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_Schema_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_CreateSchemaRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_CreateSchemaRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_GetSchemaRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_GetSchemaRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListSchemasRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListSchemasRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListSchemasResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListSchemasResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListSchemaRevisionsRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListSchemaRevisionsRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ListSchemaRevisionsResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ListSchemaRevisionsResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_CommitSchemaRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_CommitSchemaRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_RollbackSchemaRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_RollbackSchemaRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_DeleteSchemaRevisionRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_DeleteSchemaRevisionRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_DeleteSchemaRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_DeleteSchemaRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ValidateSchemaRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ValidateSchemaRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ValidateSchemaResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ValidateSchemaResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ValidateMessageRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ValidateMessageRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_pubsub_v1_ValidateMessageResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_pubsub_v1_ValidateMessageResponse_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + + static { + java.lang.String[] descriptorData = { + "\n\035google/pubsub/v1/schema.proto\022\020google." + + "pubsub.v1\032\034google/api/annotations.proto\032" + + "\027google/api/client.proto\032\037google/api/fie" + + "ld_behavior.proto\032\031google/api/resource.p" + + "roto\032\033google/protobuf/empty.proto\032\037googl" + + "e/protobuf/timestamp.proto\"\275\002\n\006Schema\022\021\n" + + "\004name\030\001 \001(\tB\003\340A\002\022+\n\004type\030\002 \001(\0162\035.google." + + "pubsub.v1.Schema.Type\022\022\n\ndefinition\030\003 \001(" + + "\t\022\033\n\013revision_id\030\004 \001(\tB\006\340A\005\340A\003\022=\n\024revisi" + + "on_create_time\030\006 \001(\0132\032.google.protobuf.T" + + "imestampB\003\340A\003\";\n\004Type\022\024\n\020TYPE_UNSPECIFIE" + + "D\020\000\022\023\n\017PROTOCOL_BUFFER\020\001\022\010\n\004AVRO\020\002:F\352AC\n" + + "\034pubsub.googleapis.com/Schema\022#projects/" + + "{project}/schemas/{schema}\"\215\001\n\023CreateSch" + + "emaRequest\0224\n\006parent\030\001 \001(\tB$\340A\002\372A\036\022\034pubs" + + "ub.googleapis.com/Schema\022-\n\006schema\030\002 \001(\013" + + "2\030.google.pubsub.v1.SchemaB\003\340A\002\022\021\n\tschem" + + "a_id\030\003 \001(\t\"r\n\020GetSchemaRequest\0222\n\004name\030\001" + + " \001(\tB$\340A\002\372A\036\n\034pubsub.googleapis.com/Sche" + + "ma\022*\n\004view\030\002 \001(\0162\034.google.pubsub.v1.Sche" + + "maView\"\254\001\n\022ListSchemasRequest\022C\n\006parent\030" + + "\001 \001(\tB3\340A\002\372A-\n+cloudresourcemanager.goog" + + "leapis.com/Project\022*\n\004view\030\002 \001(\0162\034.googl" + + "e.pubsub.v1.SchemaView\022\021\n\tpage_size\030\003 \001(" + + "\005\022\022\n\npage_token\030\004 \001(\t\"Y\n\023ListSchemasResp" + + "onse\022)\n\007schemas\030\001 \003(\0132\030.google.pubsub.v1" + + ".Schema\022\027\n\017next_page_token\030\002 \001(\t\"\243\001\n\032Lis" + + "tSchemaRevisionsRequest\0222\n\004name\030\001 \001(\tB$\340" + + "A\002\372A\036\n\034pubsub.googleapis.com/Schema\022*\n\004v" + + "iew\030\002 \001(\0162\034.google.pubsub.v1.SchemaView\022" + + "\021\n\tpage_size\030\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"a" + + "\n\033ListSchemaRevisionsResponse\022)\n\007schemas" + + "\030\001 \003(\0132\030.google.pubsub.v1.Schema\022\027\n\017next" + + "_page_token\030\002 \001(\t\"x\n\023CommitSchemaRequest" + + "\0222\n\004name\030\001 \001(\tB$\340A\002\372A\036\n\034pubsub.googleapi" + + "s.com/Schema\022-\n\006schema\030\002 \001(\0132\030.google.pu" + + "bsub.v1.SchemaB\003\340A\002\"e\n\025RollbackSchemaReq" + + "uest\0222\n\004name\030\001 \001(\tB$\340A\002\372A\036\n\034pubsub.googl" + + "eapis.com/Schema\022\030\n\013revision_id\030\002 \001(\tB\003\340" + + "A\002\"m\n\033DeleteSchemaRevisionRequest\0222\n\004nam" + + "e\030\001 \001(\tB$\340A\002\372A\036\n\034pubsub.googleapis.com/S" + + "chema\022\032\n\013revision_id\030\002 \001(\tB\005\030\001\340A\001\"I\n\023Del" + + "eteSchemaRequest\0222\n\004name\030\001 \001(\tB$\340A\002\372A\036\n\034" + + "pubsub.googleapis.com/Schema\"\213\001\n\025Validat" + + "eSchemaRequest\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-\n+" + + "cloudresourcemanager.googleapis.com/Proj" + + "ect\022-\n\006schema\030\002 \001(\0132\030.google.pubsub.v1.S" + + "chemaB\003\340A\002\"\030\n\026ValidateSchemaResponse\"\212\002\n" + + "\026ValidateMessageRequest\022C\n\006parent\030\001 \001(\tB" + + "3\340A\002\372A-\n+cloudresourcemanager.googleapis" + + ".com/Project\0221\n\004name\030\002 \001(\tB!\372A\036\n\034pubsub." + + "googleapis.com/SchemaH\000\022*\n\006schema\030\003 \001(\0132" + + "\030.google.pubsub.v1.SchemaH\000\022\017\n\007message\030\004" + + " \001(\014\022,\n\010encoding\030\005 \001(\0162\032.google.pubsub.v" + + "1.EncodingB\r\n\013schema_spec\"\031\n\027ValidateMes" + + "sageResponse*>\n\nSchemaView\022\033\n\027SCHEMA_VIE" + + "W_UNSPECIFIED\020\000\022\t\n\005BASIC\020\001\022\010\n\004FULL\020\002*:\n\010" + + "Encoding\022\030\n\024ENCODING_UNSPECIFIED\020\000\022\010\n\004JS" + + "ON\020\001\022\n\n\006BINARY\020\0022\210\r\n\rSchemaService\022\232\001\n\014C" + + "reateSchema\022%.google.pubsub.v1.CreateSch" + + "emaRequest\032\030.google.pubsub.v1.Schema\"I\332A" + + "\027parent,schema,schema_id\202\323\344\223\002)\"\037/v1/{par" + + "ent=projects/*}/schemas:\006schema\022y\n\tGetSc" + + "hema\022\".google.pubsub.v1.GetSchemaRequest" + + "\032\030.google.pubsub.v1.Schema\".\332A\004name\202\323\344\223\002" + + "!\022\037/v1/{name=projects/*/schemas/*}\022\214\001\n\013L" + + "istSchemas\022$.google.pubsub.v1.ListSchema" + + "sRequest\032%.google.pubsub.v1.ListSchemasR" + + "esponse\"0\332A\006parent\202\323\344\223\002!\022\037/v1/{parent=pr" + + "ojects/*}/schemas\022\260\001\n\023ListSchemaRevision" + + "s\022,.google.pubsub.v1.ListSchemaRevisions" + + "Request\032-.google.pubsub.v1.ListSchemaRev" + + "isionsResponse\"<\332A\004name\202\323\344\223\002/\022-/v1/{name" + + "=projects/*/schemas/*}:listRevisions\022\220\001\n" + + "\014CommitSchema\022%.google.pubsub.v1.CommitS" + + "chemaRequest\032\030.google.pubsub.v1.Schema\"?" + + "\332A\013name,schema\202\323\344\223\002+\"&/v1/{name=projects" + + "/*/schemas/*}:commit:\001*\022\233\001\n\016RollbackSche" + + "ma\022\'.google.pubsub.v1.RollbackSchemaRequ" + + "est\032\030.google.pubsub.v1.Schema\"F\332A\020name,r" + + "evision_id\202\323\344\223\002-\"(/v1/{name=projects/*/s" + + "chemas/*}:rollback:\001*\022\252\001\n\024DeleteSchemaRe" + + "vision\022-.google.pubsub.v1.DeleteSchemaRe" + + "visionRequest\032\030.google.pubsub.v1.Schema\"" + + "I\332A\020name,revision_id\202\323\344\223\0020*./v1/{name=pr" + + "ojects/*/schemas/*}:deleteRevision\022}\n\014De" + + "leteSchema\022%.google.pubsub.v1.DeleteSche" + + "maRequest\032\026.google.protobuf.Empty\".\332A\004na" + + "me\202\323\344\223\002!*\037/v1/{name=projects/*/schemas/*" + + "}\022\250\001\n\016ValidateSchema\022\'.google.pubsub.v1." + + "ValidateSchemaRequest\032(.google.pubsub.v1" + + ".ValidateSchemaResponse\"C\332A\rparent,schem" + + "a\202\323\344\223\002-\"(/v1/{parent=projects/*}/schemas" + + ":validate:\001*\022\242\001\n\017ValidateMessage\022(.googl" + + "e.pubsub.v1.ValidateMessageRequest\032).goo" + + "gle.pubsub.v1.ValidateMessageResponse\":\202" + + "\323\344\223\0024\"//v1/{parent=projects/*}/schemas:v" + + "alidateMessage:\001*\032p\312A\025pubsub.googleapis." + + "com\322AUhttps://www.googleapis.com/auth/cl" + + "oud-platform,https://www.googleapis.com/" + + "auth/pubsubB\252\001\n\024com.google.pubsub.v1B\013Sc" + + "hemaProtoP\001Z5cloud.google.com/go/pubsub/" + + "v2/apiv1/pubsubpb;pubsubpb\252\002\026Google.Clou" + + "d.PubSub.V1\312\002\026Google\\Cloud\\PubSub\\V1\352\002\031G" + + "oogle::Cloud::PubSub::V1b\006proto3" + }; + descriptor = + com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( + descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + com.google.api.AnnotationsProto.getDescriptor(), + com.google.api.ClientProto.getDescriptor(), + com.google.api.FieldBehaviorProto.getDescriptor(), + com.google.api.ResourceProto.getDescriptor(), + com.google.protobuf.EmptyProto.getDescriptor(), + com.google.protobuf.TimestampProto.getDescriptor(), + }); + internal_static_google_pubsub_v1_Schema_descriptor = getDescriptor().getMessageType(0); + internal_static_google_pubsub_v1_Schema_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_Schema_descriptor, + new java.lang.String[] { + "Name", "Type", "Definition", "RevisionId", "RevisionCreateTime", + }); + internal_static_google_pubsub_v1_CreateSchemaRequest_descriptor = + getDescriptor().getMessageType(1); + internal_static_google_pubsub_v1_CreateSchemaRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_CreateSchemaRequest_descriptor, + new java.lang.String[] { + "Parent", "Schema", "SchemaId", + }); + internal_static_google_pubsub_v1_GetSchemaRequest_descriptor = + getDescriptor().getMessageType(2); + internal_static_google_pubsub_v1_GetSchemaRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_GetSchemaRequest_descriptor, + new java.lang.String[] { + "Name", "View", + }); + internal_static_google_pubsub_v1_ListSchemasRequest_descriptor = + getDescriptor().getMessageType(3); + internal_static_google_pubsub_v1_ListSchemasRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListSchemasRequest_descriptor, + new java.lang.String[] { + "Parent", "View", "PageSize", "PageToken", + }); + internal_static_google_pubsub_v1_ListSchemasResponse_descriptor = + getDescriptor().getMessageType(4); + internal_static_google_pubsub_v1_ListSchemasResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListSchemasResponse_descriptor, + new java.lang.String[] { + "Schemas", "NextPageToken", + }); + internal_static_google_pubsub_v1_ListSchemaRevisionsRequest_descriptor = + getDescriptor().getMessageType(5); + internal_static_google_pubsub_v1_ListSchemaRevisionsRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListSchemaRevisionsRequest_descriptor, + new java.lang.String[] { + "Name", "View", "PageSize", "PageToken", + }); + internal_static_google_pubsub_v1_ListSchemaRevisionsResponse_descriptor = + getDescriptor().getMessageType(6); + internal_static_google_pubsub_v1_ListSchemaRevisionsResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ListSchemaRevisionsResponse_descriptor, + new java.lang.String[] { + "Schemas", "NextPageToken", + }); + internal_static_google_pubsub_v1_CommitSchemaRequest_descriptor = + getDescriptor().getMessageType(7); + internal_static_google_pubsub_v1_CommitSchemaRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_CommitSchemaRequest_descriptor, + new java.lang.String[] { + "Name", "Schema", + }); + internal_static_google_pubsub_v1_RollbackSchemaRequest_descriptor = + getDescriptor().getMessageType(8); + internal_static_google_pubsub_v1_RollbackSchemaRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_RollbackSchemaRequest_descriptor, + new java.lang.String[] { + "Name", "RevisionId", + }); + internal_static_google_pubsub_v1_DeleteSchemaRevisionRequest_descriptor = + getDescriptor().getMessageType(9); + internal_static_google_pubsub_v1_DeleteSchemaRevisionRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_DeleteSchemaRevisionRequest_descriptor, + new java.lang.String[] { + "Name", "RevisionId", + }); + internal_static_google_pubsub_v1_DeleteSchemaRequest_descriptor = + getDescriptor().getMessageType(10); + internal_static_google_pubsub_v1_DeleteSchemaRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_DeleteSchemaRequest_descriptor, + new java.lang.String[] { + "Name", + }); + internal_static_google_pubsub_v1_ValidateSchemaRequest_descriptor = + getDescriptor().getMessageType(11); + internal_static_google_pubsub_v1_ValidateSchemaRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ValidateSchemaRequest_descriptor, + new java.lang.String[] { + "Parent", "Schema", + }); + internal_static_google_pubsub_v1_ValidateSchemaResponse_descriptor = + getDescriptor().getMessageType(12); + internal_static_google_pubsub_v1_ValidateSchemaResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ValidateSchemaResponse_descriptor, + new java.lang.String[] {}); + internal_static_google_pubsub_v1_ValidateMessageRequest_descriptor = + getDescriptor().getMessageType(13); + internal_static_google_pubsub_v1_ValidateMessageRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ValidateMessageRequest_descriptor, + new java.lang.String[] { + "Parent", "Name", "Schema", "Message", "Encoding", "SchemaSpec", + }); + internal_static_google_pubsub_v1_ValidateMessageResponse_descriptor = + getDescriptor().getMessageType(14); + internal_static_google_pubsub_v1_ValidateMessageResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_pubsub_v1_ValidateMessageResponse_descriptor, + new java.lang.String[] {}); + descriptor.resolveAllFeaturesImmutable(); + com.google.api.AnnotationsProto.getDescriptor(); + com.google.api.ClientProto.getDescriptor(); + com.google.api.FieldBehaviorProto.getDescriptor(); + com.google.api.ResourceProto.getDescriptor(); + com.google.protobuf.EmptyProto.getDescriptor(); + com.google.protobuf.TimestampProto.getDescriptor(); + com.google.protobuf.ExtensionRegistry registry = + com.google.protobuf.ExtensionRegistry.newInstance(); + registry.add(com.google.api.ClientProto.defaultHost); + registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); + registry.add(com.google.api.AnnotationsProto.http); + registry.add(com.google.api.ClientProto.methodSignature); + registry.add(com.google.api.ClientProto.oauthScopes); + registry.add(com.google.api.ResourceProto.resource); + registry.add(com.google.api.ResourceProto.resourceReference); + com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( + descriptor, registry); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaSettings.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaSettings.java new file mode 100644 index 000000000000..b7f4a37ae583 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaSettings.java @@ -0,0 +1,1191 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Settings for validating messages published against a schema.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.SchemaSettings} + */ +@com.google.protobuf.Generated +public final class SchemaSettings extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.SchemaSettings) + SchemaSettingsOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SchemaSettings"); + } + + // Use SchemaSettings.newBuilder() to construct. + private SchemaSettings(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private SchemaSettings() { + schema_ = ""; + encoding_ = 0; + firstRevisionId_ = ""; + lastRevisionId_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SchemaSettings_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SchemaSettings_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.SchemaSettings.class, + com.google.pubsub.v1.SchemaSettings.Builder.class); + } + + public static final int SCHEMA_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object schema_ = ""; + + /** + * + * + *
+   * Required. The name of the schema that messages published should be
+   * validated against. Format is `projects/{project}/schemas/{schema}`. The
+   * value of this field will be `_deleted-schema_` if the schema has been
+   * deleted.
+   * 
+ * + * + * string schema = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The schema. + */ + @java.lang.Override + public java.lang.String getSchema() { + java.lang.Object ref = schema_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + schema_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the schema that messages published should be
+   * validated against. Format is `projects/{project}/schemas/{schema}`. The
+   * value of this field will be `_deleted-schema_` if the schema has been
+   * deleted.
+   * 
+ * + * + * string schema = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for schema. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSchemaBytes() { + java.lang.Object ref = schema_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + schema_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ENCODING_FIELD_NUMBER = 2; + private int encoding_ = 0; + + /** + * + * + *
+   * Optional. The encoding of messages validated against `schema`.
+   * 
+ * + * .google.pubsub.v1.Encoding encoding = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The enum numeric value on the wire for encoding. + */ + @java.lang.Override + public int getEncodingValue() { + return encoding_; + } + + /** + * + * + *
+   * Optional. The encoding of messages validated against `schema`.
+   * 
+ * + * .google.pubsub.v1.Encoding encoding = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The encoding. + */ + @java.lang.Override + public com.google.pubsub.v1.Encoding getEncoding() { + com.google.pubsub.v1.Encoding result = com.google.pubsub.v1.Encoding.forNumber(encoding_); + return result == null ? com.google.pubsub.v1.Encoding.UNRECOGNIZED : result; + } + + public static final int FIRST_REVISION_ID_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private volatile java.lang.Object firstRevisionId_ = ""; + + /** + * + * + *
+   * Optional. The minimum (inclusive) revision allowed for validating messages.
+   * If empty or not present, allow any revision to be validated against
+   * last_revision or any revision created before.
+   * 
+ * + * string first_revision_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The firstRevisionId. + */ + @java.lang.Override + public java.lang.String getFirstRevisionId() { + java.lang.Object ref = firstRevisionId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + firstRevisionId_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The minimum (inclusive) revision allowed for validating messages.
+   * If empty or not present, allow any revision to be validated against
+   * last_revision or any revision created before.
+   * 
+ * + * string first_revision_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for firstRevisionId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getFirstRevisionIdBytes() { + java.lang.Object ref = firstRevisionId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + firstRevisionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int LAST_REVISION_ID_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private volatile java.lang.Object lastRevisionId_ = ""; + + /** + * + * + *
+   * Optional. The maximum (inclusive) revision allowed for validating messages.
+   * If empty or not present, allow any revision to be validated against
+   * first_revision or any revision created after.
+   * 
+ * + * string last_revision_id = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The lastRevisionId. + */ + @java.lang.Override + public java.lang.String getLastRevisionId() { + java.lang.Object ref = lastRevisionId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + lastRevisionId_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The maximum (inclusive) revision allowed for validating messages.
+   * If empty or not present, allow any revision to be validated against
+   * first_revision or any revision created after.
+   * 
+ * + * string last_revision_id = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for lastRevisionId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getLastRevisionIdBytes() { + java.lang.Object ref = lastRevisionId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + lastRevisionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(schema_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, schema_); + } + if (encoding_ != com.google.pubsub.v1.Encoding.ENCODING_UNSPECIFIED.getNumber()) { + output.writeEnum(2, encoding_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(firstRevisionId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, firstRevisionId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(lastRevisionId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, lastRevisionId_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(schema_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, schema_); + } + if (encoding_ != com.google.pubsub.v1.Encoding.ENCODING_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, encoding_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(firstRevisionId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, firstRevisionId_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(lastRevisionId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, lastRevisionId_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.SchemaSettings)) { + return super.equals(obj); + } + com.google.pubsub.v1.SchemaSettings other = (com.google.pubsub.v1.SchemaSettings) obj; + + if (!getSchema().equals(other.getSchema())) return false; + if (encoding_ != other.encoding_) return false; + if (!getFirstRevisionId().equals(other.getFirstRevisionId())) return false; + if (!getLastRevisionId().equals(other.getLastRevisionId())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SCHEMA_FIELD_NUMBER; + hash = (53 * hash) + getSchema().hashCode(); + hash = (37 * hash) + ENCODING_FIELD_NUMBER; + hash = (53 * hash) + encoding_; + hash = (37 * hash) + FIRST_REVISION_ID_FIELD_NUMBER; + hash = (53 * hash) + getFirstRevisionId().hashCode(); + hash = (37 * hash) + LAST_REVISION_ID_FIELD_NUMBER; + hash = (53 * hash) + getLastRevisionId().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.SchemaSettings parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.SchemaSettings parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.SchemaSettings parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.SchemaSettings parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.SchemaSettings parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.SchemaSettings parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.SchemaSettings parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.SchemaSettings parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.SchemaSettings parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.SchemaSettings parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.SchemaSettings parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.SchemaSettings parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.SchemaSettings prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Settings for validating messages published against a schema.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.SchemaSettings} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.SchemaSettings) + com.google.pubsub.v1.SchemaSettingsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SchemaSettings_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SchemaSettings_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.SchemaSettings.class, + com.google.pubsub.v1.SchemaSettings.Builder.class); + } + + // Construct using com.google.pubsub.v1.SchemaSettings.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + schema_ = ""; + encoding_ = 0; + firstRevisionId_ = ""; + lastRevisionId_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SchemaSettings_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.SchemaSettings getDefaultInstanceForType() { + return com.google.pubsub.v1.SchemaSettings.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.SchemaSettings build() { + com.google.pubsub.v1.SchemaSettings result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.SchemaSettings buildPartial() { + com.google.pubsub.v1.SchemaSettings result = new com.google.pubsub.v1.SchemaSettings(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.SchemaSettings result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.schema_ = schema_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.encoding_ = encoding_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.firstRevisionId_ = firstRevisionId_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.lastRevisionId_ = lastRevisionId_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.SchemaSettings) { + return mergeFrom((com.google.pubsub.v1.SchemaSettings) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.SchemaSettings other) { + if (other == com.google.pubsub.v1.SchemaSettings.getDefaultInstance()) return this; + if (!other.getSchema().isEmpty()) { + schema_ = other.schema_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.encoding_ != 0) { + setEncodingValue(other.getEncodingValue()); + } + if (!other.getFirstRevisionId().isEmpty()) { + firstRevisionId_ = other.firstRevisionId_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (!other.getLastRevisionId().isEmpty()) { + lastRevisionId_ = other.lastRevisionId_; + bitField0_ |= 0x00000008; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + schema_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + encoding_ = input.readEnum(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 26: + { + firstRevisionId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + lastRevisionId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 34 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object schema_ = ""; + + /** + * + * + *
+     * Required. The name of the schema that messages published should be
+     * validated against. Format is `projects/{project}/schemas/{schema}`. The
+     * value of this field will be `_deleted-schema_` if the schema has been
+     * deleted.
+     * 
+ * + * + * string schema = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The schema. + */ + public java.lang.String getSchema() { + java.lang.Object ref = schema_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + schema_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the schema that messages published should be
+     * validated against. Format is `projects/{project}/schemas/{schema}`. The
+     * value of this field will be `_deleted-schema_` if the schema has been
+     * deleted.
+     * 
+ * + * + * string schema = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for schema. + */ + public com.google.protobuf.ByteString getSchemaBytes() { + java.lang.Object ref = schema_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + schema_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the schema that messages published should be
+     * validated against. Format is `projects/{project}/schemas/{schema}`. The
+     * value of this field will be `_deleted-schema_` if the schema has been
+     * deleted.
+     * 
+ * + * + * string schema = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The schema to set. + * @return This builder for chaining. + */ + public Builder setSchema(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + schema_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the schema that messages published should be
+     * validated against. Format is `projects/{project}/schemas/{schema}`. The
+     * value of this field will be `_deleted-schema_` if the schema has been
+     * deleted.
+     * 
+ * + * + * string schema = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSchema() { + schema_ = getDefaultInstance().getSchema(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the schema that messages published should be
+     * validated against. Format is `projects/{project}/schemas/{schema}`. The
+     * value of this field will be `_deleted-schema_` if the schema has been
+     * deleted.
+     * 
+ * + * + * string schema = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for schema to set. + * @return This builder for chaining. + */ + public Builder setSchemaBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + schema_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private int encoding_ = 0; + + /** + * + * + *
+     * Optional. The encoding of messages validated against `schema`.
+     * 
+ * + * .google.pubsub.v1.Encoding encoding = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The enum numeric value on the wire for encoding. + */ + @java.lang.Override + public int getEncodingValue() { + return encoding_; + } + + /** + * + * + *
+     * Optional. The encoding of messages validated against `schema`.
+     * 
+ * + * .google.pubsub.v1.Encoding encoding = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The enum numeric value on the wire for encoding to set. + * @return This builder for chaining. + */ + public Builder setEncodingValue(int value) { + encoding_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The encoding of messages validated against `schema`.
+     * 
+ * + * .google.pubsub.v1.Encoding encoding = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The encoding. + */ + @java.lang.Override + public com.google.pubsub.v1.Encoding getEncoding() { + com.google.pubsub.v1.Encoding result = com.google.pubsub.v1.Encoding.forNumber(encoding_); + return result == null ? com.google.pubsub.v1.Encoding.UNRECOGNIZED : result; + } + + /** + * + * + *
+     * Optional. The encoding of messages validated against `schema`.
+     * 
+ * + * .google.pubsub.v1.Encoding encoding = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The encoding to set. + * @return This builder for chaining. + */ + public Builder setEncoding(com.google.pubsub.v1.Encoding value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + encoding_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The encoding of messages validated against `schema`.
+     * 
+ * + * .google.pubsub.v1.Encoding encoding = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return This builder for chaining. + */ + public Builder clearEncoding() { + bitField0_ = (bitField0_ & ~0x00000002); + encoding_ = 0; + onChanged(); + return this; + } + + private java.lang.Object firstRevisionId_ = ""; + + /** + * + * + *
+     * Optional. The minimum (inclusive) revision allowed for validating messages.
+     * If empty or not present, allow any revision to be validated against
+     * last_revision or any revision created before.
+     * 
+ * + * string first_revision_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The firstRevisionId. + */ + public java.lang.String getFirstRevisionId() { + java.lang.Object ref = firstRevisionId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + firstRevisionId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The minimum (inclusive) revision allowed for validating messages.
+     * If empty or not present, allow any revision to be validated against
+     * last_revision or any revision created before.
+     * 
+ * + * string first_revision_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for firstRevisionId. + */ + public com.google.protobuf.ByteString getFirstRevisionIdBytes() { + java.lang.Object ref = firstRevisionId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + firstRevisionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The minimum (inclusive) revision allowed for validating messages.
+     * If empty or not present, allow any revision to be validated against
+     * last_revision or any revision created before.
+     * 
+ * + * string first_revision_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The firstRevisionId to set. + * @return This builder for chaining. + */ + public Builder setFirstRevisionId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + firstRevisionId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The minimum (inclusive) revision allowed for validating messages.
+     * If empty or not present, allow any revision to be validated against
+     * last_revision or any revision created before.
+     * 
+ * + * string first_revision_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearFirstRevisionId() { + firstRevisionId_ = getDefaultInstance().getFirstRevisionId(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The minimum (inclusive) revision allowed for validating messages.
+     * If empty or not present, allow any revision to be validated against
+     * last_revision or any revision created before.
+     * 
+ * + * string first_revision_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for firstRevisionId to set. + * @return This builder for chaining. + */ + public Builder setFirstRevisionIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + firstRevisionId_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private java.lang.Object lastRevisionId_ = ""; + + /** + * + * + *
+     * Optional. The maximum (inclusive) revision allowed for validating messages.
+     * If empty or not present, allow any revision to be validated against
+     * first_revision or any revision created after.
+     * 
+ * + * string last_revision_id = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The lastRevisionId. + */ + public java.lang.String getLastRevisionId() { + java.lang.Object ref = lastRevisionId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + lastRevisionId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The maximum (inclusive) revision allowed for validating messages.
+     * If empty or not present, allow any revision to be validated against
+     * first_revision or any revision created after.
+     * 
+ * + * string last_revision_id = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for lastRevisionId. + */ + public com.google.protobuf.ByteString getLastRevisionIdBytes() { + java.lang.Object ref = lastRevisionId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + lastRevisionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The maximum (inclusive) revision allowed for validating messages.
+     * If empty or not present, allow any revision to be validated against
+     * first_revision or any revision created after.
+     * 
+ * + * string last_revision_id = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The lastRevisionId to set. + * @return This builder for chaining. + */ + public Builder setLastRevisionId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + lastRevisionId_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The maximum (inclusive) revision allowed for validating messages.
+     * If empty or not present, allow any revision to be validated against
+     * first_revision or any revision created after.
+     * 
+ * + * string last_revision_id = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearLastRevisionId() { + lastRevisionId_ = getDefaultInstance().getLastRevisionId(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The maximum (inclusive) revision allowed for validating messages.
+     * If empty or not present, allow any revision to be validated against
+     * first_revision or any revision created after.
+     * 
+ * + * string last_revision_id = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for lastRevisionId to set. + * @return This builder for chaining. + */ + public Builder setLastRevisionIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + lastRevisionId_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.SchemaSettings) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.SchemaSettings) + private static final com.google.pubsub.v1.SchemaSettings DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.SchemaSettings(); + } + + public static com.google.pubsub.v1.SchemaSettings getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SchemaSettings parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.SchemaSettings getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaSettingsOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaSettingsOrBuilder.java new file mode 100644 index 000000000000..a5f003482947 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaSettingsOrBuilder.java @@ -0,0 +1,150 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface SchemaSettingsOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.SchemaSettings) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the schema that messages published should be
+   * validated against. Format is `projects/{project}/schemas/{schema}`. The
+   * value of this field will be `_deleted-schema_` if the schema has been
+   * deleted.
+   * 
+ * + * + * string schema = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The schema. + */ + java.lang.String getSchema(); + + /** + * + * + *
+   * Required. The name of the schema that messages published should be
+   * validated against. Format is `projects/{project}/schemas/{schema}`. The
+   * value of this field will be `_deleted-schema_` if the schema has been
+   * deleted.
+   * 
+ * + * + * string schema = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for schema. + */ + com.google.protobuf.ByteString getSchemaBytes(); + + /** + * + * + *
+   * Optional. The encoding of messages validated against `schema`.
+   * 
+ * + * .google.pubsub.v1.Encoding encoding = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The enum numeric value on the wire for encoding. + */ + int getEncodingValue(); + + /** + * + * + *
+   * Optional. The encoding of messages validated against `schema`.
+   * 
+ * + * .google.pubsub.v1.Encoding encoding = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The encoding. + */ + com.google.pubsub.v1.Encoding getEncoding(); + + /** + * + * + *
+   * Optional. The minimum (inclusive) revision allowed for validating messages.
+   * If empty or not present, allow any revision to be validated against
+   * last_revision or any revision created before.
+   * 
+ * + * string first_revision_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The firstRevisionId. + */ + java.lang.String getFirstRevisionId(); + + /** + * + * + *
+   * Optional. The minimum (inclusive) revision allowed for validating messages.
+   * If empty or not present, allow any revision to be validated against
+   * last_revision or any revision created before.
+   * 
+ * + * string first_revision_id = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for firstRevisionId. + */ + com.google.protobuf.ByteString getFirstRevisionIdBytes(); + + /** + * + * + *
+   * Optional. The maximum (inclusive) revision allowed for validating messages.
+   * If empty or not present, allow any revision to be validated against
+   * first_revision or any revision created after.
+   * 
+ * + * string last_revision_id = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The lastRevisionId. + */ + java.lang.String getLastRevisionId(); + + /** + * + * + *
+   * Optional. The maximum (inclusive) revision allowed for validating messages.
+   * If empty or not present, allow any revision to be validated against
+   * first_revision or any revision created after.
+   * 
+ * + * string last_revision_id = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for lastRevisionId. + */ + com.google.protobuf.ByteString getLastRevisionIdBytes(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaView.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaView.java new file mode 100644 index 000000000000..4a9a8232407f --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SchemaView.java @@ -0,0 +1,193 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * View of Schema object fields to be returned by GetSchema and ListSchemas.
+ * 
+ * + * Protobuf enum {@code google.pubsub.v1.SchemaView} + */ +@com.google.protobuf.Generated +public enum SchemaView implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+   * The default / unset value.
+   * The API will default to the BASIC view.
+   * 
+ * + * SCHEMA_VIEW_UNSPECIFIED = 0; + */ + SCHEMA_VIEW_UNSPECIFIED(0), + /** + * + * + *
+   * Include the name and type of the schema, but not the definition.
+   * 
+ * + * BASIC = 1; + */ + BASIC(1), + /** + * + * + *
+   * Include all Schema object fields.
+   * 
+ * + * FULL = 2; + */ + FULL(2), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SchemaView"); + } + + /** + * + * + *
+   * The default / unset value.
+   * The API will default to the BASIC view.
+   * 
+ * + * SCHEMA_VIEW_UNSPECIFIED = 0; + */ + public static final int SCHEMA_VIEW_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+   * Include the name and type of the schema, but not the definition.
+   * 
+ * + * BASIC = 1; + */ + public static final int BASIC_VALUE = 1; + + /** + * + * + *
+   * Include all Schema object fields.
+   * 
+ * + * FULL = 2; + */ + public static final int FULL_VALUE = 2; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static SchemaView valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static SchemaView forNumber(int value) { + switch (value) { + case 0: + return SCHEMA_VIEW_UNSPECIFIED; + case 1: + return BASIC; + case 2: + return FULL; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public SchemaView findValueByNumber(int number) { + return SchemaView.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto.getDescriptor().getEnumTypes().get(0); + } + + private static final SchemaView[] VALUES = values(); + + public static SchemaView valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private SchemaView(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.SchemaView) +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SeekRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SeekRequest.java new file mode 100644 index 000000000000..da4217b2ff3d --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SeekRequest.java @@ -0,0 +1,1385 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `Seek` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.SeekRequest} + */ +@com.google.protobuf.Generated +public final class SeekRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.SeekRequest) + SeekRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SeekRequest"); + } + + // Use SeekRequest.newBuilder() to construct. + private SeekRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private SeekRequest() { + subscription_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto.internal_static_google_pubsub_v1_SeekRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SeekRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.SeekRequest.class, com.google.pubsub.v1.SeekRequest.Builder.class); + } + + private int targetCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object target_; + + public enum TargetCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + TIME(2), + SNAPSHOT(3), + TARGET_NOT_SET(0); + private final int value; + + private TargetCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static TargetCase valueOf(int value) { + return forNumber(value); + } + + public static TargetCase forNumber(int value) { + switch (value) { + case 2: + return TIME; + case 3: + return SNAPSHOT; + case 0: + return TARGET_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public TargetCase getTargetCase() { + return TargetCase.forNumber(targetCase_); + } + + public static final int SUBSCRIPTION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object subscription_ = ""; + + /** + * + * + *
+   * Required. The subscription to affect.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + @java.lang.Override + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The subscription to affect.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TIME_FIELD_NUMBER = 2; + + /** + * + * + *
+   * Optional. The time to seek to.
+   * Messages retained in the subscription that were published before this
+   * time are marked as acknowledged, and messages retained in the
+   * subscription that were published after this time are marked as
+   * unacknowledged. Note that this operation affects only those messages
+   * retained in the subscription (configured by the combination of
+   * `message_retention_duration` and `retain_acked_messages`). For example,
+   * if `time` corresponds to a point before the message retention
+   * window (or to a point before the system's notion of the subscription
+   * creation time), only retained messages will be marked as unacknowledged,
+   * and already-expunged messages will not be restored.
+   * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return Whether the time field is set. + */ + @java.lang.Override + public boolean hasTime() { + return targetCase_ == 2; + } + + /** + * + * + *
+   * Optional. The time to seek to.
+   * Messages retained in the subscription that were published before this
+   * time are marked as acknowledged, and messages retained in the
+   * subscription that were published after this time are marked as
+   * unacknowledged. Note that this operation affects only those messages
+   * retained in the subscription (configured by the combination of
+   * `message_retention_duration` and `retain_acked_messages`). For example,
+   * if `time` corresponds to a point before the message retention
+   * window (or to a point before the system's notion of the subscription
+   * creation time), only retained messages will be marked as unacknowledged,
+   * and already-expunged messages will not be restored.
+   * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The time. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getTime() { + if (targetCase_ == 2) { + return (com.google.protobuf.Timestamp) target_; + } + return com.google.protobuf.Timestamp.getDefaultInstance(); + } + + /** + * + * + *
+   * Optional. The time to seek to.
+   * Messages retained in the subscription that were published before this
+   * time are marked as acknowledged, and messages retained in the
+   * subscription that were published after this time are marked as
+   * unacknowledged. Note that this operation affects only those messages
+   * retained in the subscription (configured by the combination of
+   * `message_retention_duration` and `retain_acked_messages`). For example,
+   * if `time` corresponds to a point before the message retention
+   * window (or to a point before the system's notion of the subscription
+   * creation time), only retained messages will be marked as unacknowledged,
+   * and already-expunged messages will not be restored.
+   * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getTimeOrBuilder() { + if (targetCase_ == 2) { + return (com.google.protobuf.Timestamp) target_; + } + return com.google.protobuf.Timestamp.getDefaultInstance(); + } + + public static final int SNAPSHOT_FIELD_NUMBER = 3; + + /** + * + * + *
+   * Optional. The snapshot to seek to. The snapshot's topic must be the same
+   * as that of the provided subscription. Format is
+   * `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 3 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return Whether the snapshot field is set. + */ + public boolean hasSnapshot() { + return targetCase_ == 3; + } + + /** + * + * + *
+   * Optional. The snapshot to seek to. The snapshot's topic must be the same
+   * as that of the provided subscription. Format is
+   * `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 3 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The snapshot. + */ + public java.lang.String getSnapshot() { + java.lang.Object ref = ""; + if (targetCase_ == 3) { + ref = target_; + } + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (targetCase_ == 3) { + target_ = s; + } + return s; + } + } + + /** + * + * + *
+   * Optional. The snapshot to seek to. The snapshot's topic must be the same
+   * as that of the provided subscription. Format is
+   * `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 3 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for snapshot. + */ + public com.google.protobuf.ByteString getSnapshotBytes() { + java.lang.Object ref = ""; + if (targetCase_ == 3) { + ref = target_; + } + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + if (targetCase_ == 3) { + target_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, subscription_); + } + if (targetCase_ == 2) { + output.writeMessage(2, (com.google.protobuf.Timestamp) target_); + } + if (targetCase_ == 3) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, target_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, subscription_); + } + if (targetCase_ == 2) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 2, (com.google.protobuf.Timestamp) target_); + } + if (targetCase_ == 3) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, target_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.SeekRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.SeekRequest other = (com.google.pubsub.v1.SeekRequest) obj; + + if (!getSubscription().equals(other.getSubscription())) return false; + if (!getTargetCase().equals(other.getTargetCase())) return false; + switch (targetCase_) { + case 2: + if (!getTime().equals(other.getTime())) return false; + break; + case 3: + if (!getSnapshot().equals(other.getSnapshot())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SUBSCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getSubscription().hashCode(); + switch (targetCase_) { + case 2: + hash = (37 * hash) + TIME_FIELD_NUMBER; + hash = (53 * hash) + getTime().hashCode(); + break; + case 3: + hash = (37 * hash) + SNAPSHOT_FIELD_NUMBER; + hash = (53 * hash) + getSnapshot().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.SeekRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.SeekRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.SeekRequest parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.SeekRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.SeekRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.SeekRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.SeekRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.SeekRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.SeekRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.SeekRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.SeekRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.SeekRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.SeekRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `Seek` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.SeekRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.SeekRequest) + com.google.pubsub.v1.SeekRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SeekRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SeekRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.SeekRequest.class, + com.google.pubsub.v1.SeekRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.SeekRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + subscription_ = ""; + if (timeBuilder_ != null) { + timeBuilder_.clear(); + } + targetCase_ = 0; + target_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SeekRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.SeekRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.SeekRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.SeekRequest build() { + com.google.pubsub.v1.SeekRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.SeekRequest buildPartial() { + com.google.pubsub.v1.SeekRequest result = new com.google.pubsub.v1.SeekRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.SeekRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.subscription_ = subscription_; + } + } + + private void buildPartialOneofs(com.google.pubsub.v1.SeekRequest result) { + result.targetCase_ = targetCase_; + result.target_ = this.target_; + if (targetCase_ == 2 && timeBuilder_ != null) { + result.target_ = timeBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.SeekRequest) { + return mergeFrom((com.google.pubsub.v1.SeekRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.SeekRequest other) { + if (other == com.google.pubsub.v1.SeekRequest.getDefaultInstance()) return this; + if (!other.getSubscription().isEmpty()) { + subscription_ = other.subscription_; + bitField0_ |= 0x00000001; + onChanged(); + } + switch (other.getTargetCase()) { + case TIME: + { + mergeTime(other.getTime()); + break; + } + case SNAPSHOT: + { + targetCase_ = 3; + target_ = other.target_; + onChanged(); + break; + } + case TARGET_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + subscription_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage(internalGetTimeFieldBuilder().getBuilder(), extensionRegistry); + targetCase_ = 2; + break; + } // case 18 + case 26: + { + java.lang.String s = input.readStringRequireUtf8(); + targetCase_ = 3; + target_ = s; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int targetCase_ = 0; + private java.lang.Object target_; + + public TargetCase getTargetCase() { + return TargetCase.forNumber(targetCase_); + } + + public Builder clearTarget() { + targetCase_ = 0; + target_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private java.lang.Object subscription_ = ""; + + /** + * + * + *
+     * Required. The subscription to affect.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The subscription to affect.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The subscription to affect.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscription(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription to affect.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSubscription() { + subscription_ = getDefaultInstance().getSubscription(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription to affect.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscriptionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + timeBuilder_; + + /** + * + * + *
+     * Optional. The time to seek to.
+     * Messages retained in the subscription that were published before this
+     * time are marked as acknowledged, and messages retained in the
+     * subscription that were published after this time are marked as
+     * unacknowledged. Note that this operation affects only those messages
+     * retained in the subscription (configured by the combination of
+     * `message_retention_duration` and `retain_acked_messages`). For example,
+     * if `time` corresponds to a point before the message retention
+     * window (or to a point before the system's notion of the subscription
+     * creation time), only retained messages will be marked as unacknowledged,
+     * and already-expunged messages will not be restored.
+     * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return Whether the time field is set. + */ + @java.lang.Override + public boolean hasTime() { + return targetCase_ == 2; + } + + /** + * + * + *
+     * Optional. The time to seek to.
+     * Messages retained in the subscription that were published before this
+     * time are marked as acknowledged, and messages retained in the
+     * subscription that were published after this time are marked as
+     * unacknowledged. Note that this operation affects only those messages
+     * retained in the subscription (configured by the combination of
+     * `message_retention_duration` and `retain_acked_messages`). For example,
+     * if `time` corresponds to a point before the message retention
+     * window (or to a point before the system's notion of the subscription
+     * creation time), only retained messages will be marked as unacknowledged,
+     * and already-expunged messages will not be restored.
+     * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The time. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getTime() { + if (timeBuilder_ == null) { + if (targetCase_ == 2) { + return (com.google.protobuf.Timestamp) target_; + } + return com.google.protobuf.Timestamp.getDefaultInstance(); + } else { + if (targetCase_ == 2) { + return timeBuilder_.getMessage(); + } + return com.google.protobuf.Timestamp.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. The time to seek to.
+     * Messages retained in the subscription that were published before this
+     * time are marked as acknowledged, and messages retained in the
+     * subscription that were published after this time are marked as
+     * unacknowledged. Note that this operation affects only those messages
+     * retained in the subscription (configured by the combination of
+     * `message_retention_duration` and `retain_acked_messages`). For example,
+     * if `time` corresponds to a point before the message retention
+     * window (or to a point before the system's notion of the subscription
+     * creation time), only retained messages will be marked as unacknowledged,
+     * and already-expunged messages will not be restored.
+     * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder setTime(com.google.protobuf.Timestamp value) { + if (timeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + target_ = value; + onChanged(); + } else { + timeBuilder_.setMessage(value); + } + targetCase_ = 2; + return this; + } + + /** + * + * + *
+     * Optional. The time to seek to.
+     * Messages retained in the subscription that were published before this
+     * time are marked as acknowledged, and messages retained in the
+     * subscription that were published after this time are marked as
+     * unacknowledged. Note that this operation affects only those messages
+     * retained in the subscription (configured by the combination of
+     * `message_retention_duration` and `retain_acked_messages`). For example,
+     * if `time` corresponds to a point before the message retention
+     * window (or to a point before the system's notion of the subscription
+     * creation time), only retained messages will be marked as unacknowledged,
+     * and already-expunged messages will not be restored.
+     * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder setTime(com.google.protobuf.Timestamp.Builder builderForValue) { + if (timeBuilder_ == null) { + target_ = builderForValue.build(); + onChanged(); + } else { + timeBuilder_.setMessage(builderForValue.build()); + } + targetCase_ = 2; + return this; + } + + /** + * + * + *
+     * Optional. The time to seek to.
+     * Messages retained in the subscription that were published before this
+     * time are marked as acknowledged, and messages retained in the
+     * subscription that were published after this time are marked as
+     * unacknowledged. Note that this operation affects only those messages
+     * retained in the subscription (configured by the combination of
+     * `message_retention_duration` and `retain_acked_messages`). For example,
+     * if `time` corresponds to a point before the message retention
+     * window (or to a point before the system's notion of the subscription
+     * creation time), only retained messages will be marked as unacknowledged,
+     * and already-expunged messages will not be restored.
+     * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder mergeTime(com.google.protobuf.Timestamp value) { + if (timeBuilder_ == null) { + if (targetCase_ == 2 && target_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + target_ = + com.google.protobuf.Timestamp.newBuilder((com.google.protobuf.Timestamp) target_) + .mergeFrom(value) + .buildPartial(); + } else { + target_ = value; + } + onChanged(); + } else { + if (targetCase_ == 2) { + timeBuilder_.mergeFrom(value); + } else { + timeBuilder_.setMessage(value); + } + } + targetCase_ = 2; + return this; + } + + /** + * + * + *
+     * Optional. The time to seek to.
+     * Messages retained in the subscription that were published before this
+     * time are marked as acknowledged, and messages retained in the
+     * subscription that were published after this time are marked as
+     * unacknowledged. Note that this operation affects only those messages
+     * retained in the subscription (configured by the combination of
+     * `message_retention_duration` and `retain_acked_messages`). For example,
+     * if `time` corresponds to a point before the message retention
+     * window (or to a point before the system's notion of the subscription
+     * creation time), only retained messages will be marked as unacknowledged,
+     * and already-expunged messages will not be restored.
+     * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder clearTime() { + if (timeBuilder_ == null) { + if (targetCase_ == 2) { + targetCase_ = 0; + target_ = null; + onChanged(); + } + } else { + if (targetCase_ == 2) { + targetCase_ = 0; + target_ = null; + } + timeBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. The time to seek to.
+     * Messages retained in the subscription that were published before this
+     * time are marked as acknowledged, and messages retained in the
+     * subscription that were published after this time are marked as
+     * unacknowledged. Note that this operation affects only those messages
+     * retained in the subscription (configured by the combination of
+     * `message_retention_duration` and `retain_acked_messages`). For example,
+     * if `time` corresponds to a point before the message retention
+     * window (or to a point before the system's notion of the subscription
+     * creation time), only retained messages will be marked as unacknowledged,
+     * and already-expunged messages will not be restored.
+     * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + public com.google.protobuf.Timestamp.Builder getTimeBuilder() { + return internalGetTimeFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. The time to seek to.
+     * Messages retained in the subscription that were published before this
+     * time are marked as acknowledged, and messages retained in the
+     * subscription that were published after this time are marked as
+     * unacknowledged. Note that this operation affects only those messages
+     * retained in the subscription (configured by the combination of
+     * `message_retention_duration` and `retain_acked_messages`). For example,
+     * if `time` corresponds to a point before the message retention
+     * window (or to a point before the system's notion of the subscription
+     * creation time), only retained messages will be marked as unacknowledged,
+     * and already-expunged messages will not be restored.
+     * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getTimeOrBuilder() { + if ((targetCase_ == 2) && (timeBuilder_ != null)) { + return timeBuilder_.getMessageOrBuilder(); + } else { + if (targetCase_ == 2) { + return (com.google.protobuf.Timestamp) target_; + } + return com.google.protobuf.Timestamp.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Optional. The time to seek to.
+     * Messages retained in the subscription that were published before this
+     * time are marked as acknowledged, and messages retained in the
+     * subscription that were published after this time are marked as
+     * unacknowledged. Note that this operation affects only those messages
+     * retained in the subscription (configured by the combination of
+     * `message_retention_duration` and `retain_acked_messages`). For example,
+     * if `time` corresponds to a point before the message retention
+     * window (or to a point before the system's notion of the subscription
+     * creation time), only retained messages will be marked as unacknowledged,
+     * and already-expunged messages will not be restored.
+     * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetTimeFieldBuilder() { + if (timeBuilder_ == null) { + if (!(targetCase_ == 2)) { + target_ = com.google.protobuf.Timestamp.getDefaultInstance(); + } + timeBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + (com.google.protobuf.Timestamp) target_, getParentForChildren(), isClean()); + target_ = null; + } + targetCase_ = 2; + onChanged(); + return timeBuilder_; + } + + /** + * + * + *
+     * Optional. The snapshot to seek to. The snapshot's topic must be the same
+     * as that of the provided subscription. Format is
+     * `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 3 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return Whether the snapshot field is set. + */ + @java.lang.Override + public boolean hasSnapshot() { + return targetCase_ == 3; + } + + /** + * + * + *
+     * Optional. The snapshot to seek to. The snapshot's topic must be the same
+     * as that of the provided subscription. Format is
+     * `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 3 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The snapshot. + */ + @java.lang.Override + public java.lang.String getSnapshot() { + java.lang.Object ref = ""; + if (targetCase_ == 3) { + ref = target_; + } + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (targetCase_ == 3) { + target_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The snapshot to seek to. The snapshot's topic must be the same
+     * as that of the provided subscription. Format is
+     * `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 3 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for snapshot. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSnapshotBytes() { + java.lang.Object ref = ""; + if (targetCase_ == 3) { + ref = target_; + } + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + if (targetCase_ == 3) { + target_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The snapshot to seek to. The snapshot's topic must be the same
+     * as that of the provided subscription. Format is
+     * `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 3 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The snapshot to set. + * @return This builder for chaining. + */ + public Builder setSnapshot(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + targetCase_ = 3; + target_ = value; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The snapshot to seek to. The snapshot's topic must be the same
+     * as that of the provided subscription. Format is
+     * `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 3 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSnapshot() { + if (targetCase_ == 3) { + targetCase_ = 0; + target_ = null; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. The snapshot to seek to. The snapshot's topic must be the same
+     * as that of the provided subscription. Format is
+     * `projects/{project}/snapshots/{snap}`.
+     * 
+ * + * + * string snapshot = 3 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for snapshot to set. + * @return This builder for chaining. + */ + public Builder setSnapshotBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + targetCase_ = 3; + target_ = value; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.SeekRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.SeekRequest) + private static final com.google.pubsub.v1.SeekRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.SeekRequest(); + } + + public static com.google.pubsub.v1.SeekRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SeekRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.SeekRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SeekRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SeekRequestOrBuilder.java new file mode 100644 index 000000000000..e597f2c528ee --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SeekRequestOrBuilder.java @@ -0,0 +1,178 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface SeekRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.SeekRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The subscription to affect.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + java.lang.String getSubscription(); + + /** + * + * + *
+   * Required. The subscription to affect.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + com.google.protobuf.ByteString getSubscriptionBytes(); + + /** + * + * + *
+   * Optional. The time to seek to.
+   * Messages retained in the subscription that were published before this
+   * time are marked as acknowledged, and messages retained in the
+   * subscription that were published after this time are marked as
+   * unacknowledged. Note that this operation affects only those messages
+   * retained in the subscription (configured by the combination of
+   * `message_retention_duration` and `retain_acked_messages`). For example,
+   * if `time` corresponds to a point before the message retention
+   * window (or to a point before the system's notion of the subscription
+   * creation time), only retained messages will be marked as unacknowledged,
+   * and already-expunged messages will not be restored.
+   * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return Whether the time field is set. + */ + boolean hasTime(); + + /** + * + * + *
+   * Optional. The time to seek to.
+   * Messages retained in the subscription that were published before this
+   * time are marked as acknowledged, and messages retained in the
+   * subscription that were published after this time are marked as
+   * unacknowledged. Note that this operation affects only those messages
+   * retained in the subscription (configured by the combination of
+   * `message_retention_duration` and `retain_acked_messages`). For example,
+   * if `time` corresponds to a point before the message retention
+   * window (or to a point before the system's notion of the subscription
+   * creation time), only retained messages will be marked as unacknowledged,
+   * and already-expunged messages will not be restored.
+   * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The time. + */ + com.google.protobuf.Timestamp getTime(); + + /** + * + * + *
+   * Optional. The time to seek to.
+   * Messages retained in the subscription that were published before this
+   * time are marked as acknowledged, and messages retained in the
+   * subscription that were published after this time are marked as
+   * unacknowledged. Note that this operation affects only those messages
+   * retained in the subscription (configured by the combination of
+   * `message_retention_duration` and `retain_acked_messages`). For example,
+   * if `time` corresponds to a point before the message retention
+   * window (or to a point before the system's notion of the subscription
+   * creation time), only retained messages will be marked as unacknowledged,
+   * and already-expunged messages will not be restored.
+   * 
+ * + * .google.protobuf.Timestamp time = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + com.google.protobuf.TimestampOrBuilder getTimeOrBuilder(); + + /** + * + * + *
+   * Optional. The snapshot to seek to. The snapshot's topic must be the same
+   * as that of the provided subscription. Format is
+   * `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 3 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return Whether the snapshot field is set. + */ + boolean hasSnapshot(); + + /** + * + * + *
+   * Optional. The snapshot to seek to. The snapshot's topic must be the same
+   * as that of the provided subscription. Format is
+   * `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 3 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The snapshot. + */ + java.lang.String getSnapshot(); + + /** + * + * + *
+   * Optional. The snapshot to seek to. The snapshot's topic must be the same
+   * as that of the provided subscription. Format is
+   * `projects/{project}/snapshots/{snap}`.
+   * 
+ * + * + * string snapshot = 3 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for snapshot. + */ + com.google.protobuf.ByteString getSnapshotBytes(); + + com.google.pubsub.v1.SeekRequest.TargetCase getTargetCase(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SeekResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SeekResponse.java new file mode 100644 index 000000000000..882eb143a75f --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SeekResponse.java @@ -0,0 +1,392 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the `Seek` method (this response is empty).
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.SeekResponse} + */ +@com.google.protobuf.Generated +public final class SeekResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.SeekResponse) + SeekResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SeekResponse"); + } + + // Use SeekResponse.newBuilder() to construct. + private SeekResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private SeekResponse() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SeekResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SeekResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.SeekResponse.class, + com.google.pubsub.v1.SeekResponse.Builder.class); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.SeekResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.SeekResponse other = (com.google.pubsub.v1.SeekResponse) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.SeekResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.SeekResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.SeekResponse parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.SeekResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.SeekResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.SeekResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.SeekResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.SeekResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.SeekResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.SeekResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.SeekResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.SeekResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.SeekResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the `Seek` method (this response is empty).
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.SeekResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.SeekResponse) + com.google.pubsub.v1.SeekResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SeekResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SeekResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.SeekResponse.class, + com.google.pubsub.v1.SeekResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.SeekResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_SeekResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.SeekResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.SeekResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.SeekResponse build() { + com.google.pubsub.v1.SeekResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.SeekResponse buildPartial() { + com.google.pubsub.v1.SeekResponse result = new com.google.pubsub.v1.SeekResponse(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.SeekResponse) { + return mergeFrom((com.google.pubsub.v1.SeekResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.SeekResponse other) { + if (other == com.google.pubsub.v1.SeekResponse.getDefaultInstance()) return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.SeekResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.SeekResponse) + private static final com.google.pubsub.v1.SeekResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.SeekResponse(); + } + + public static com.google.pubsub.v1.SeekResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SeekResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.SeekResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SeekResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SeekResponseOrBuilder.java new file mode 100644 index 000000000000..9d214afc7bcb --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SeekResponseOrBuilder.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface SeekResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.SeekResponse) + com.google.protobuf.MessageOrBuilder {} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Snapshot.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Snapshot.java new file mode 100644 index 000000000000..b9179a72581d --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Snapshot.java @@ -0,0 +1,1573 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * A snapshot resource. Snapshots are used in
+ * [Seek](https://cloud.google.com/pubsub/docs/replay-overview)
+ * operations, which allow you to manage message acknowledgments in bulk. That
+ * is, you can set the acknowledgment state of messages in an existing
+ * subscription to the state captured by a snapshot.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.Snapshot} + */ +@com.google.protobuf.Generated +public final class Snapshot extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.Snapshot) + SnapshotOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Snapshot"); + } + + // Use Snapshot.newBuilder() to construct. + private Snapshot(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Snapshot() { + name_ = ""; + topic_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto.internal_static_google_pubsub_v1_Snapshot_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 4: + return internalGetLabels(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Snapshot_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.Snapshot.class, com.google.pubsub.v1.Snapshot.Builder.class); + } + + private int bitField0_; + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
+   * Optional. The name of the snapshot.
+   * 
+ * + * string name = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The name of the snapshot.
+   * 
+ * + * string name = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TOPIC_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object topic_ = ""; + + /** + * + * + *
+   * Optional. The name of the topic from which this snapshot is retaining
+   * messages.
+   * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + @java.lang.Override + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The name of the topic from which this snapshot is retaining
+   * messages.
+   * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int EXPIRE_TIME_FIELD_NUMBER = 3; + private com.google.protobuf.Timestamp expireTime_; + + /** + * + * + *
+   * Optional. The snapshot is guaranteed to exist up until this time.
+   * A newly-created snapshot expires no later than 7 days from the time of its
+   * creation. Its exact lifetime is determined at creation by the existing
+   * backlog in the source subscription. Specifically, the lifetime of the
+   * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+   * For example, consider a subscription whose oldest unacked message is 3 days
+   * old. If a snapshot is created from this subscription, the snapshot -- which
+   * will always capture this 3-day-old backlog as long as the snapshot
+   * exists -- will expire in 4 days. The service will refuse to create a
+   * snapshot that would expire in less than 1 hour after creation.
+   * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the expireTime field is set. + */ + @java.lang.Override + public boolean hasExpireTime() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Optional. The snapshot is guaranteed to exist up until this time.
+   * A newly-created snapshot expires no later than 7 days from the time of its
+   * creation. Its exact lifetime is determined at creation by the existing
+   * backlog in the source subscription. Specifically, the lifetime of the
+   * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+   * For example, consider a subscription whose oldest unacked message is 3 days
+   * old. If a snapshot is created from this subscription, the snapshot -- which
+   * will always capture this 3-day-old backlog as long as the snapshot
+   * exists -- will expire in 4 days. The service will refuse to create a
+   * snapshot that would expire in less than 1 hour after creation.
+   * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The expireTime. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getExpireTime() { + return expireTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : expireTime_; + } + + /** + * + * + *
+   * Optional. The snapshot is guaranteed to exist up until this time.
+   * A newly-created snapshot expires no later than 7 days from the time of its
+   * creation. Its exact lifetime is determined at creation by the existing
+   * backlog in the source subscription. Specifically, the lifetime of the
+   * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+   * For example, consider a subscription whose oldest unacked message is 3 days
+   * old. If a snapshot is created from this subscription, the snapshot -- which
+   * will always capture this 3-day-old backlog as long as the snapshot
+   * exists -- will expire in 4 days. The service will refuse to create a
+   * snapshot that would expire in less than 1 hour after creation.
+   * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { + return expireTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : expireTime_; + } + + public static final int LABELS_FIELD_NUMBER = 4; + + private static final class LabelsDefaultEntryHolder { + static final com.google.protobuf.MapEntry defaultEntry = + com.google.protobuf.MapEntry.newDefaultInstance( + com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Snapshot_LabelsEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + + @SuppressWarnings("serial") + private com.google.protobuf.MapField labels_; + + private com.google.protobuf.MapField internalGetLabels() { + if (labels_ == null) { + return com.google.protobuf.MapField.emptyMapField(LabelsDefaultEntryHolder.defaultEntry); + } + return labels_; + } + + public int getLabelsCount() { + return internalGetLabels().getMap().size(); + } + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public boolean containsLabels(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetLabels().getMap().containsKey(key); + } + + /** Use {@link #getLabelsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getLabels() { + return getLabelsMap(); + } + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.util.Map getLabelsMap() { + return internalGetLabels().getMap(); + } + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public /* nullable */ java.lang.String getLabelsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.lang.String getLabelsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, topic_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(3, getExpireTime()); + } + com.google.protobuf.GeneratedMessage.serializeStringMapTo( + output, internalGetLabels(), LabelsDefaultEntryHolder.defaultEntry, 4); + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, topic_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getExpireTime()); + } + for (java.util.Map.Entry entry : + internalGetLabels().getMap().entrySet()) { + com.google.protobuf.MapEntry labels__ = + LabelsDefaultEntryHolder.defaultEntry + .newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, labels__); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.Snapshot)) { + return super.equals(obj); + } + com.google.pubsub.v1.Snapshot other = (com.google.pubsub.v1.Snapshot) obj; + + if (!getName().equals(other.getName())) return false; + if (!getTopic().equals(other.getTopic())) return false; + if (hasExpireTime() != other.hasExpireTime()) return false; + if (hasExpireTime()) { + if (!getExpireTime().equals(other.getExpireTime())) return false; + } + if (!internalGetLabels().equals(other.internalGetLabels())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getTopic().hashCode(); + if (hasExpireTime()) { + hash = (37 * hash) + EXPIRE_TIME_FIELD_NUMBER; + hash = (53 * hash) + getExpireTime().hashCode(); + } + if (!internalGetLabels().getMap().isEmpty()) { + hash = (37 * hash) + LABELS_FIELD_NUMBER; + hash = (53 * hash) + internalGetLabels().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.Snapshot parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Snapshot parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Snapshot parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Snapshot parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Snapshot parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Snapshot parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Snapshot parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Snapshot parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.Snapshot parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Snapshot parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.Snapshot parseFrom(com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Snapshot parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.Snapshot prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * A snapshot resource. Snapshots are used in
+   * [Seek](https://cloud.google.com/pubsub/docs/replay-overview)
+   * operations, which allow you to manage message acknowledgments in bulk. That
+   * is, you can set the acknowledgment state of messages in an existing
+   * subscription to the state captured by a snapshot.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.Snapshot} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.Snapshot) + com.google.pubsub.v1.SnapshotOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto.internal_static_google_pubsub_v1_Snapshot_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 4: + return internalGetLabels(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 4: + return internalGetMutableLabels(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Snapshot_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.Snapshot.class, com.google.pubsub.v1.Snapshot.Builder.class); + } + + // Construct using com.google.pubsub.v1.Snapshot.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetExpireTimeFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + topic_ = ""; + expireTime_ = null; + if (expireTimeBuilder_ != null) { + expireTimeBuilder_.dispose(); + expireTimeBuilder_ = null; + } + internalGetMutableLabels().clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto.internal_static_google_pubsub_v1_Snapshot_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.Snapshot getDefaultInstanceForType() { + return com.google.pubsub.v1.Snapshot.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.Snapshot build() { + com.google.pubsub.v1.Snapshot result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.Snapshot buildPartial() { + com.google.pubsub.v1.Snapshot result = new com.google.pubsub.v1.Snapshot(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.Snapshot result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.topic_ = topic_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000004) != 0)) { + result.expireTime_ = expireTimeBuilder_ == null ? expireTime_ : expireTimeBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.labels_ = internalGetLabels(); + result.labels_.makeImmutable(); + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.Snapshot) { + return mergeFrom((com.google.pubsub.v1.Snapshot) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.Snapshot other) { + if (other == com.google.pubsub.v1.Snapshot.getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getTopic().isEmpty()) { + topic_ = other.topic_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (other.hasExpireTime()) { + mergeExpireTime(other.getExpireTime()); + } + internalGetMutableLabels().mergeFrom(other.internalGetLabels()); + bitField0_ |= 0x00000008; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + topic_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + input.readMessage( + internalGetExpireTimeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + com.google.protobuf.MapEntry labels__ = + input.readMessage( + LabelsDefaultEntryHolder.defaultEntry.getParserForType(), + extensionRegistry); + internalGetMutableLabels() + .getMutableMap() + .put(labels__.getKey(), labels__.getValue()); + bitField0_ |= 0x00000008; + break; + } // case 34 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object name_ = ""; + + /** + * + * + *
+     * Optional. The name of the snapshot.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The name of the snapshot.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The name of the snapshot.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The name of the snapshot.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The name of the snapshot.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object topic_ = ""; + + /** + * + * + *
+     * Optional. The name of the topic from which this snapshot is retaining
+     * messages.
+     * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The name of the topic from which this snapshot is retaining
+     * messages.
+     * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The name of the topic from which this snapshot is retaining
+     * messages.
+     * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The topic to set. + * @return This builder for chaining. + */ + public Builder setTopic(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + topic_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The name of the topic from which this snapshot is retaining
+     * messages.
+     * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearTopic() { + topic_ = getDefaultInstance().getTopic(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The name of the topic from which this snapshot is retaining
+     * messages.
+     * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for topic to set. + * @return This builder for chaining. + */ + public Builder setTopicBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + topic_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private com.google.protobuf.Timestamp expireTime_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + expireTimeBuilder_; + + /** + * + * + *
+     * Optional. The snapshot is guaranteed to exist up until this time.
+     * A newly-created snapshot expires no later than 7 days from the time of its
+     * creation. Its exact lifetime is determined at creation by the existing
+     * backlog in the source subscription. Specifically, the lifetime of the
+     * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+     * For example, consider a subscription whose oldest unacked message is 3 days
+     * old. If a snapshot is created from this subscription, the snapshot -- which
+     * will always capture this 3-day-old backlog as long as the snapshot
+     * exists -- will expire in 4 days. The service will refuse to create a
+     * snapshot that would expire in less than 1 hour after creation.
+     * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the expireTime field is set. + */ + public boolean hasExpireTime() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
+     * Optional. The snapshot is guaranteed to exist up until this time.
+     * A newly-created snapshot expires no later than 7 days from the time of its
+     * creation. Its exact lifetime is determined at creation by the existing
+     * backlog in the source subscription. Specifically, the lifetime of the
+     * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+     * For example, consider a subscription whose oldest unacked message is 3 days
+     * old. If a snapshot is created from this subscription, the snapshot -- which
+     * will always capture this 3-day-old backlog as long as the snapshot
+     * exists -- will expire in 4 days. The service will refuse to create a
+     * snapshot that would expire in less than 1 hour after creation.
+     * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The expireTime. + */ + public com.google.protobuf.Timestamp getExpireTime() { + if (expireTimeBuilder_ == null) { + return expireTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : expireTime_; + } else { + return expireTimeBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. The snapshot is guaranteed to exist up until this time.
+     * A newly-created snapshot expires no later than 7 days from the time of its
+     * creation. Its exact lifetime is determined at creation by the existing
+     * backlog in the source subscription. Specifically, the lifetime of the
+     * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+     * For example, consider a subscription whose oldest unacked message is 3 days
+     * old. If a snapshot is created from this subscription, the snapshot -- which
+     * will always capture this 3-day-old backlog as long as the snapshot
+     * exists -- will expire in 4 days. The service will refuse to create a
+     * snapshot that would expire in less than 1 hour after creation.
+     * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setExpireTime(com.google.protobuf.Timestamp value) { + if (expireTimeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + expireTime_ = value; + } else { + expireTimeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The snapshot is guaranteed to exist up until this time.
+     * A newly-created snapshot expires no later than 7 days from the time of its
+     * creation. Its exact lifetime is determined at creation by the existing
+     * backlog in the source subscription. Specifically, the lifetime of the
+     * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+     * For example, consider a subscription whose oldest unacked message is 3 days
+     * old. If a snapshot is created from this subscription, the snapshot -- which
+     * will always capture this 3-day-old backlog as long as the snapshot
+     * exists -- will expire in 4 days. The service will refuse to create a
+     * snapshot that would expire in less than 1 hour after creation.
+     * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setExpireTime(com.google.protobuf.Timestamp.Builder builderForValue) { + if (expireTimeBuilder_ == null) { + expireTime_ = builderForValue.build(); + } else { + expireTimeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The snapshot is guaranteed to exist up until this time.
+     * A newly-created snapshot expires no later than 7 days from the time of its
+     * creation. Its exact lifetime is determined at creation by the existing
+     * backlog in the source subscription. Specifically, the lifetime of the
+     * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+     * For example, consider a subscription whose oldest unacked message is 3 days
+     * old. If a snapshot is created from this subscription, the snapshot -- which
+     * will always capture this 3-day-old backlog as long as the snapshot
+     * exists -- will expire in 4 days. The service will refuse to create a
+     * snapshot that would expire in less than 1 hour after creation.
+     * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeExpireTime(com.google.protobuf.Timestamp value) { + if (expireTimeBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0) + && expireTime_ != null + && expireTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getExpireTimeBuilder().mergeFrom(value); + } else { + expireTime_ = value; + } + } else { + expireTimeBuilder_.mergeFrom(value); + } + if (expireTime_ != null) { + bitField0_ |= 0x00000004; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. The snapshot is guaranteed to exist up until this time.
+     * A newly-created snapshot expires no later than 7 days from the time of its
+     * creation. Its exact lifetime is determined at creation by the existing
+     * backlog in the source subscription. Specifically, the lifetime of the
+     * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+     * For example, consider a subscription whose oldest unacked message is 3 days
+     * old. If a snapshot is created from this subscription, the snapshot -- which
+     * will always capture this 3-day-old backlog as long as the snapshot
+     * exists -- will expire in 4 days. The service will refuse to create a
+     * snapshot that would expire in less than 1 hour after creation.
+     * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearExpireTime() { + bitField0_ = (bitField0_ & ~0x00000004); + expireTime_ = null; + if (expireTimeBuilder_ != null) { + expireTimeBuilder_.dispose(); + expireTimeBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The snapshot is guaranteed to exist up until this time.
+     * A newly-created snapshot expires no later than 7 days from the time of its
+     * creation. Its exact lifetime is determined at creation by the existing
+     * backlog in the source subscription. Specifically, the lifetime of the
+     * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+     * For example, consider a subscription whose oldest unacked message is 3 days
+     * old. If a snapshot is created from this subscription, the snapshot -- which
+     * will always capture this 3-day-old backlog as long as the snapshot
+     * exists -- will expire in 4 days. The service will refuse to create a
+     * snapshot that would expire in less than 1 hour after creation.
+     * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.Timestamp.Builder getExpireTimeBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return internalGetExpireTimeFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. The snapshot is guaranteed to exist up until this time.
+     * A newly-created snapshot expires no later than 7 days from the time of its
+     * creation. Its exact lifetime is determined at creation by the existing
+     * backlog in the source subscription. Specifically, the lifetime of the
+     * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+     * For example, consider a subscription whose oldest unacked message is 3 days
+     * old. If a snapshot is created from this subscription, the snapshot -- which
+     * will always capture this 3-day-old backlog as long as the snapshot
+     * exists -- will expire in 4 days. The service will refuse to create a
+     * snapshot that would expire in less than 1 hour after creation.
+     * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { + if (expireTimeBuilder_ != null) { + return expireTimeBuilder_.getMessageOrBuilder(); + } else { + return expireTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : expireTime_; + } + } + + /** + * + * + *
+     * Optional. The snapshot is guaranteed to exist up until this time.
+     * A newly-created snapshot expires no later than 7 days from the time of its
+     * creation. Its exact lifetime is determined at creation by the existing
+     * backlog in the source subscription. Specifically, the lifetime of the
+     * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+     * For example, consider a subscription whose oldest unacked message is 3 days
+     * old. If a snapshot is created from this subscription, the snapshot -- which
+     * will always capture this 3-day-old backlog as long as the snapshot
+     * exists -- will expire in 4 days. The service will refuse to create a
+     * snapshot that would expire in less than 1 hour after creation.
+     * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + internalGetExpireTimeFieldBuilder() { + if (expireTimeBuilder_ == null) { + expireTimeBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getExpireTime(), getParentForChildren(), isClean()); + expireTime_ = null; + } + return expireTimeBuilder_; + } + + private com.google.protobuf.MapField labels_; + + private com.google.protobuf.MapField internalGetLabels() { + if (labels_ == null) { + return com.google.protobuf.MapField.emptyMapField(LabelsDefaultEntryHolder.defaultEntry); + } + return labels_; + } + + private com.google.protobuf.MapField + internalGetMutableLabels() { + if (labels_ == null) { + labels_ = com.google.protobuf.MapField.newMapField(LabelsDefaultEntryHolder.defaultEntry); + } + if (!labels_.isMutable()) { + labels_ = labels_.copy(); + } + bitField0_ |= 0x00000008; + onChanged(); + return labels_; + } + + public int getLabelsCount() { + return internalGetLabels().getMap().size(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public boolean containsLabels(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetLabels().getMap().containsKey(key); + } + + /** Use {@link #getLabelsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getLabels() { + return getLabelsMap(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.util.Map getLabelsMap() { + return internalGetLabels().getMap(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public /* nullable */ java.lang.String getLabelsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.lang.String getLabelsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearLabels() { + bitField0_ = (bitField0_ & ~0x00000008); + internalGetMutableLabels().getMutableMap().clear(); + return this; + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder removeLabels(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + internalGetMutableLabels().getMutableMap().remove(key); + return this; + } + + /** Use alternate mutation accessors instead. */ + @java.lang.Deprecated + public java.util.Map getMutableLabels() { + bitField0_ |= 0x00000008; + return internalGetMutableLabels().getMutableMap(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder putLabels(java.lang.String key, java.lang.String value) { + if (key == null) { + throw new NullPointerException("map key"); + } + if (value == null) { + throw new NullPointerException("map value"); + } + internalGetMutableLabels().getMutableMap().put(key, value); + bitField0_ |= 0x00000008; + return this; + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder putAllLabels(java.util.Map values) { + internalGetMutableLabels().getMutableMap().putAll(values); + bitField0_ |= 0x00000008; + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.Snapshot) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.Snapshot) + private static final com.google.pubsub.v1.Snapshot DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.Snapshot(); + } + + public static com.google.pubsub.v1.Snapshot getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Snapshot parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.Snapshot getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SnapshotName.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SnapshotName.java new file mode 100644 index 000000000000..a3a2342396c2 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SnapshotName.java @@ -0,0 +1,192 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.pubsub.v1; + +import com.google.api.pathtemplate.PathTemplate; +import com.google.api.resourcenames.ResourceName; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +@Generated("by gapic-generator-java") +public class SnapshotName implements ResourceName { + private static final PathTemplate PROJECT_SNAPSHOT = + PathTemplate.createWithoutUrlEncoding("projects/{project}/snapshots/{snapshot}"); + private volatile Map fieldValuesMap; + private final String project; + private final String snapshot; + + @Deprecated + protected SnapshotName() { + project = null; + snapshot = null; + } + + private SnapshotName(Builder builder) { + project = Preconditions.checkNotNull(builder.getProject()); + snapshot = Preconditions.checkNotNull(builder.getSnapshot()); + } + + public String getProject() { + return project; + } + + public String getSnapshot() { + return snapshot; + } + + public static Builder newBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + public static SnapshotName of(String project, String snapshot) { + return newBuilder().setProject(project).setSnapshot(snapshot).build(); + } + + public static String format(String project, String snapshot) { + return newBuilder().setProject(project).setSnapshot(snapshot).build().toString(); + } + + public static SnapshotName parse(String formattedString) { + if (formattedString.isEmpty()) { + return null; + } + Map matchMap = + PROJECT_SNAPSHOT.validatedMatch( + formattedString, "SnapshotName.parse: formattedString not in valid format"); + return of(matchMap.get("project"), matchMap.get("snapshot")); + } + + public static List parseList(List formattedStrings) { + List list = new ArrayList<>(formattedStrings.size()); + for (String formattedString : formattedStrings) { + list.add(parse(formattedString)); + } + return list; + } + + public static List toStringList(List values) { + List list = new ArrayList<>(values.size()); + for (SnapshotName value : values) { + if (value == null) { + list.add(""); + } else { + list.add(value.toString()); + } + } + return list; + } + + public static boolean isParsableFrom(String formattedString) { + return PROJECT_SNAPSHOT.matches(formattedString); + } + + @Override + public Map getFieldValuesMap() { + if (fieldValuesMap == null) { + synchronized (this) { + if (fieldValuesMap == null) { + ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder(); + if (project != null) { + fieldMapBuilder.put("project", project); + } + if (snapshot != null) { + fieldMapBuilder.put("snapshot", snapshot); + } + fieldValuesMap = fieldMapBuilder.build(); + } + } + } + return fieldValuesMap; + } + + public String getFieldValue(String fieldName) { + return getFieldValuesMap().get(fieldName); + } + + @Override + public String toString() { + return PROJECT_SNAPSHOT.instantiate("project", project, "snapshot", snapshot); + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o != null && getClass() == o.getClass()) { + SnapshotName that = ((SnapshotName) o); + return Objects.equals(this.project, that.project) + && Objects.equals(this.snapshot, that.snapshot); + } + return false; + } + + @Override + public int hashCode() { + int h = 1; + h *= 1000003; + h ^= Objects.hashCode(project); + h *= 1000003; + h ^= Objects.hashCode(snapshot); + return h; + } + + /** Builder for projects/{project}/snapshots/{snapshot}. */ + public static class Builder { + private String project; + private String snapshot; + + protected Builder() {} + + public String getProject() { + return project; + } + + public String getSnapshot() { + return snapshot; + } + + public Builder setProject(String project) { + this.project = project; + return this; + } + + public Builder setSnapshot(String snapshot) { + this.snapshot = snapshot; + return this; + } + + private Builder(SnapshotName snapshotName) { + this.project = snapshotName.project; + this.snapshot = snapshotName.snapshot; + } + + public SnapshotName build() { + return new SnapshotName(this); + } + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SnapshotOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SnapshotOrBuilder.java new file mode 100644 index 000000000000..c84e5b505879 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SnapshotOrBuilder.java @@ -0,0 +1,221 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface SnapshotOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.Snapshot) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The name of the snapshot.
+   * 
+ * + * string name = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Optional. The name of the snapshot.
+   * 
+ * + * string name = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * + * + *
+   * Optional. The name of the topic from which this snapshot is retaining
+   * messages.
+   * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + java.lang.String getTopic(); + + /** + * + * + *
+   * Optional. The name of the topic from which this snapshot is retaining
+   * messages.
+   * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + com.google.protobuf.ByteString getTopicBytes(); + + /** + * + * + *
+   * Optional. The snapshot is guaranteed to exist up until this time.
+   * A newly-created snapshot expires no later than 7 days from the time of its
+   * creation. Its exact lifetime is determined at creation by the existing
+   * backlog in the source subscription. Specifically, the lifetime of the
+   * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+   * For example, consider a subscription whose oldest unacked message is 3 days
+   * old. If a snapshot is created from this subscription, the snapshot -- which
+   * will always capture this 3-day-old backlog as long as the snapshot
+   * exists -- will expire in 4 days. The service will refuse to create a
+   * snapshot that would expire in less than 1 hour after creation.
+   * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the expireTime field is set. + */ + boolean hasExpireTime(); + + /** + * + * + *
+   * Optional. The snapshot is guaranteed to exist up until this time.
+   * A newly-created snapshot expires no later than 7 days from the time of its
+   * creation. Its exact lifetime is determined at creation by the existing
+   * backlog in the source subscription. Specifically, the lifetime of the
+   * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+   * For example, consider a subscription whose oldest unacked message is 3 days
+   * old. If a snapshot is created from this subscription, the snapshot -- which
+   * will always capture this 3-day-old backlog as long as the snapshot
+   * exists -- will expire in 4 days. The service will refuse to create a
+   * snapshot that would expire in less than 1 hour after creation.
+   * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The expireTime. + */ + com.google.protobuf.Timestamp getExpireTime(); + + /** + * + * + *
+   * Optional. The snapshot is guaranteed to exist up until this time.
+   * A newly-created snapshot expires no later than 7 days from the time of its
+   * creation. Its exact lifetime is determined at creation by the existing
+   * backlog in the source subscription. Specifically, the lifetime of the
+   * snapshot is `7 days - (age of oldest unacked message in the subscription)`.
+   * For example, consider a subscription whose oldest unacked message is 3 days
+   * old. If a snapshot is created from this subscription, the snapshot -- which
+   * will always capture this 3-day-old backlog as long as the snapshot
+   * exists -- will expire in 4 days. The service will refuse to create a
+   * snapshot that would expire in less than 1 hour after creation.
+   * 
+ * + * .google.protobuf.Timestamp expire_time = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder(); + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + int getLabelsCount(); + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + boolean containsLabels(java.lang.String key); + + /** Use {@link #getLabelsMap()} instead. */ + @java.lang.Deprecated + java.util.Map getLabels(); + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + java.util.Map getLabelsMap(); + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + /* nullable */ + java.lang.String getLabelsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue); + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 4 [(.google.api.field_behavior) = OPTIONAL]; + */ + java.lang.String getLabelsOrThrow(java.lang.String key); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/StreamingPullRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/StreamingPullRequest.java new file mode 100644 index 000000000000..6187f41a0164 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/StreamingPullRequest.java @@ -0,0 +1,2391 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `StreamingPull` streaming RPC method. This request is used to
+ * establish the initial stream as well as to stream acknowledgments and ack
+ * deadline modifications from the client to the server.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.StreamingPullRequest} + */ +@com.google.protobuf.Generated +public final class StreamingPullRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.StreamingPullRequest) + StreamingPullRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "StreamingPullRequest"); + } + + // Use StreamingPullRequest.newBuilder() to construct. + private StreamingPullRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private StreamingPullRequest() { + subscription_ = ""; + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + modifyDeadlineSeconds_ = emptyIntList(); + modifyDeadlineAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + clientId_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.StreamingPullRequest.class, + com.google.pubsub.v1.StreamingPullRequest.Builder.class); + } + + public static final int SUBSCRIPTION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object subscription_ = ""; + + /** + * + * + *
+   * Required. The subscription for which to initialize the new stream. This
+   * must be provided in the first request on the stream, and must not be set in
+   * subsequent requests from client to server.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + @java.lang.Override + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The subscription for which to initialize the new stream. This
+   * must be provided in the first request on the stream, and must not be set in
+   * subsequent requests from client to server.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ACK_IDS_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList ackIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+   * Optional. List of acknowledgment IDs for acknowledging previously received
+   * messages (received on this stream or a different stream). If an ack ID has
+   * expired, the corresponding message may be redelivered later. Acknowledging
+   * a message more than once will not result in an error. If the acknowledgment
+   * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the ackIds. + */ + public com.google.protobuf.ProtocolStringList getAckIdsList() { + return ackIds_; + } + + /** + * + * + *
+   * Optional. List of acknowledgment IDs for acknowledging previously received
+   * messages (received on this stream or a different stream). If an ack ID has
+   * expired, the corresponding message may be redelivered later. Acknowledging
+   * a message more than once will not result in an error. If the acknowledgment
+   * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of ackIds. + */ + public int getAckIdsCount() { + return ackIds_.size(); + } + + /** + * + * + *
+   * Optional. List of acknowledgment IDs for acknowledging previously received
+   * messages (received on this stream or a different stream). If an ack ID has
+   * expired, the corresponding message may be redelivered later. Acknowledging
+   * a message more than once will not result in an error. If the acknowledgment
+   * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + public java.lang.String getAckIds(int index) { + return ackIds_.get(index); + } + + /** + * + * + *
+   * Optional. List of acknowledgment IDs for acknowledging previously received
+   * messages (received on this stream or a different stream). If an ack ID has
+   * expired, the corresponding message may be redelivered later. Acknowledging
+   * a message more than once will not result in an error. If the acknowledgment
+   * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + public com.google.protobuf.ByteString getAckIdsBytes(int index) { + return ackIds_.getByteString(index); + } + + public static final int MODIFY_DEADLINE_SECONDS_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private com.google.protobuf.Internal.IntList modifyDeadlineSeconds_ = emptyIntList(); + + /** + * + * + *
+   * Optional. The list of new ack deadlines for the IDs listed in
+   * `modify_deadline_ack_ids`. The size of this list must be the same as the
+   * size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
+   * with `INVALID_ARGUMENT`. Each element in this list is applied to the
+   * element in the same position in `modify_deadline_ack_ids`. The new ack
+   * deadline is with respect to the time this request was sent to the Pub/Sub
+   * system. Must be >= 0. For example, if the value is 10, the new ack deadline
+   * will expire 10 seconds after this request is received. If the value is 0,
+   * the message is immediately made available for another streaming or
+   * non-streaming pull request. If the value is < 0 (an error), the stream will
+   * be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated int32 modify_deadline_seconds = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the modifyDeadlineSeconds. + */ + @java.lang.Override + public java.util.List getModifyDeadlineSecondsList() { + return modifyDeadlineSeconds_; + } + + /** + * + * + *
+   * Optional. The list of new ack deadlines for the IDs listed in
+   * `modify_deadline_ack_ids`. The size of this list must be the same as the
+   * size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
+   * with `INVALID_ARGUMENT`. Each element in this list is applied to the
+   * element in the same position in `modify_deadline_ack_ids`. The new ack
+   * deadline is with respect to the time this request was sent to the Pub/Sub
+   * system. Must be >= 0. For example, if the value is 10, the new ack deadline
+   * will expire 10 seconds after this request is received. If the value is 0,
+   * the message is immediately made available for another streaming or
+   * non-streaming pull request. If the value is < 0 (an error), the stream will
+   * be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated int32 modify_deadline_seconds = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of modifyDeadlineSeconds. + */ + public int getModifyDeadlineSecondsCount() { + return modifyDeadlineSeconds_.size(); + } + + /** + * + * + *
+   * Optional. The list of new ack deadlines for the IDs listed in
+   * `modify_deadline_ack_ids`. The size of this list must be the same as the
+   * size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
+   * with `INVALID_ARGUMENT`. Each element in this list is applied to the
+   * element in the same position in `modify_deadline_ack_ids`. The new ack
+   * deadline is with respect to the time this request was sent to the Pub/Sub
+   * system. Must be >= 0. For example, if the value is 10, the new ack deadline
+   * will expire 10 seconds after this request is received. If the value is 0,
+   * the message is immediately made available for another streaming or
+   * non-streaming pull request. If the value is < 0 (an error), the stream will
+   * be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated int32 modify_deadline_seconds = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The modifyDeadlineSeconds at the given index. + */ + public int getModifyDeadlineSeconds(int index) { + return modifyDeadlineSeconds_.getInt(index); + } + + private int modifyDeadlineSecondsMemoizedSerializedSize = -1; + + public static final int MODIFY_DEADLINE_ACK_IDS_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList modifyDeadlineAckIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+   * Optional. List of acknowledgment IDs whose deadline will be modified based
+   * on the corresponding element in `modify_deadline_seconds`. This field can
+   * be used to indicate that more time is needed to process a message by the
+   * subscriber, or to make the message available for redelivery if the
+   * processing was interrupted.
+   * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the modifyDeadlineAckIds. + */ + public com.google.protobuf.ProtocolStringList getModifyDeadlineAckIdsList() { + return modifyDeadlineAckIds_; + } + + /** + * + * + *
+   * Optional. List of acknowledgment IDs whose deadline will be modified based
+   * on the corresponding element in `modify_deadline_seconds`. This field can
+   * be used to indicate that more time is needed to process a message by the
+   * subscriber, or to make the message available for redelivery if the
+   * processing was interrupted.
+   * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of modifyDeadlineAckIds. + */ + public int getModifyDeadlineAckIdsCount() { + return modifyDeadlineAckIds_.size(); + } + + /** + * + * + *
+   * Optional. List of acknowledgment IDs whose deadline will be modified based
+   * on the corresponding element in `modify_deadline_seconds`. This field can
+   * be used to indicate that more time is needed to process a message by the
+   * subscriber, or to make the message available for redelivery if the
+   * processing was interrupted.
+   * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The modifyDeadlineAckIds at the given index. + */ + public java.lang.String getModifyDeadlineAckIds(int index) { + return modifyDeadlineAckIds_.get(index); + } + + /** + * + * + *
+   * Optional. List of acknowledgment IDs whose deadline will be modified based
+   * on the corresponding element in `modify_deadline_seconds`. This field can
+   * be used to indicate that more time is needed to process a message by the
+   * subscriber, or to make the message available for redelivery if the
+   * processing was interrupted.
+   * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the value to return. + * @return The bytes of the modifyDeadlineAckIds at the given index. + */ + public com.google.protobuf.ByteString getModifyDeadlineAckIdsBytes(int index) { + return modifyDeadlineAckIds_.getByteString(index); + } + + public static final int STREAM_ACK_DEADLINE_SECONDS_FIELD_NUMBER = 5; + private int streamAckDeadlineSeconds_ = 0; + + /** + * + * + *
+   * Required. The ack deadline to use for the stream. This must be provided in
+   * the first request on the stream, but it can also be updated on subsequent
+   * requests from client to server. The minimum deadline you can specify is 10
+   * seconds. The maximum deadline you can specify is 600 seconds (10 minutes).
+   * 
+ * + * int32 stream_ack_deadline_seconds = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The streamAckDeadlineSeconds. + */ + @java.lang.Override + public int getStreamAckDeadlineSeconds() { + return streamAckDeadlineSeconds_; + } + + public static final int CLIENT_ID_FIELD_NUMBER = 6; + + @SuppressWarnings("serial") + private volatile java.lang.Object clientId_ = ""; + + /** + * + * + *
+   * Optional. A unique identifier that is used to distinguish client instances
+   * from each other. Only needs to be provided on the initial request. When a
+   * stream disconnects and reconnects for the same stream, the client_id should
+   * be set to the same value so that state associated with the old stream can
+   * be transferred to the new stream. The same client_id should not be used for
+   * different client instances.
+   * 
+ * + * string client_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The clientId. + */ + @java.lang.Override + public java.lang.String getClientId() { + java.lang.Object ref = clientId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clientId_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. A unique identifier that is used to distinguish client instances
+   * from each other. Only needs to be provided on the initial request. When a
+   * stream disconnects and reconnects for the same stream, the client_id should
+   * be set to the same value so that state associated with the old stream can
+   * be transferred to the new stream. The same client_id should not be used for
+   * different client instances.
+   * 
+ * + * string client_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for clientId. + */ + @java.lang.Override + public com.google.protobuf.ByteString getClientIdBytes() { + java.lang.Object ref = clientId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clientId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int MAX_OUTSTANDING_MESSAGES_FIELD_NUMBER = 7; + private long maxOutstandingMessages_ = 0L; + + /** + * + * + *
+   * Optional. Flow control settings for the maximum number of outstanding
+   * messages. When there are `max_outstanding_messages` currently sent to the
+   * streaming pull client that have not yet been acked or nacked, the server
+   * stops sending more messages. The sending of messages resumes once the
+   * number of outstanding messages is less than this value. If the value is
+   * <= 0, there is no limit to the number of outstanding messages. This
+   * property can only be set on the initial StreamingPullRequest. If it is set
+   * on a subsequent request, the stream will be aborted with status
+   * `INVALID_ARGUMENT`.
+   * 
+ * + * int64 max_outstanding_messages = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxOutstandingMessages. + */ + @java.lang.Override + public long getMaxOutstandingMessages() { + return maxOutstandingMessages_; + } + + public static final int MAX_OUTSTANDING_BYTES_FIELD_NUMBER = 8; + private long maxOutstandingBytes_ = 0L; + + /** + * + * + *
+   * Optional. Flow control settings for the maximum number of outstanding
+   * bytes. When there are `max_outstanding_bytes` or more worth of messages
+   * currently sent to the streaming pull client that have not yet been acked or
+   * nacked, the server will stop sending more messages. The sending of messages
+   * resumes once the number of outstanding bytes is less than this value. If
+   * the value is <= 0, there is no limit to the number of outstanding bytes.
+   * This property can only be set on the initial StreamingPullRequest. If it is
+   * set on a subsequent request, the stream will be aborted with status
+   * `INVALID_ARGUMENT`.
+   * 
+ * + * int64 max_outstanding_bytes = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxOutstandingBytes. + */ + @java.lang.Override + public long getMaxOutstandingBytes() { + return maxOutstandingBytes_; + } + + public static final int PROTOCOL_VERSION_FIELD_NUMBER = 10; + private long protocolVersion_ = 0L; + + /** + * + * + *
+   * Optional. The protocol version used by the client. This property can only
+   * be set on the initial StreamingPullRequest. If it is set on a subsequent
+   * request, the stream will be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * int64 protocol_version = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The protocolVersion. + */ + @java.lang.Override + public long getProtocolVersion() { + return protocolVersion_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getSerializedSize(); + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, subscription_); + } + for (int i = 0; i < ackIds_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, ackIds_.getRaw(i)); + } + if (getModifyDeadlineSecondsList().size() > 0) { + output.writeUInt32NoTag(26); + output.writeUInt32NoTag(modifyDeadlineSecondsMemoizedSerializedSize); + } + for (int i = 0; i < modifyDeadlineSeconds_.size(); i++) { + output.writeInt32NoTag(modifyDeadlineSeconds_.getInt(i)); + } + for (int i = 0; i < modifyDeadlineAckIds_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, modifyDeadlineAckIds_.getRaw(i)); + } + if (streamAckDeadlineSeconds_ != 0) { + output.writeInt32(5, streamAckDeadlineSeconds_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clientId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 6, clientId_); + } + if (maxOutstandingMessages_ != 0L) { + output.writeInt64(7, maxOutstandingMessages_); + } + if (maxOutstandingBytes_ != 0L) { + output.writeInt64(8, maxOutstandingBytes_); + } + if (protocolVersion_ != 0L) { + output.writeInt64(10, protocolVersion_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, subscription_); + } + { + int dataSize = 0; + for (int i = 0; i < ackIds_.size(); i++) { + dataSize += computeStringSizeNoTag(ackIds_.getRaw(i)); + } + size += dataSize; + size += 1 * getAckIdsList().size(); + } + { + int dataSize = 0; + for (int i = 0; i < modifyDeadlineSeconds_.size(); i++) { + dataSize += + com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag( + modifyDeadlineSeconds_.getInt(i)); + } + size += dataSize; + if (!getModifyDeadlineSecondsList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize); + } + modifyDeadlineSecondsMemoizedSerializedSize = dataSize; + } + { + int dataSize = 0; + for (int i = 0; i < modifyDeadlineAckIds_.size(); i++) { + dataSize += computeStringSizeNoTag(modifyDeadlineAckIds_.getRaw(i)); + } + size += dataSize; + size += 1 * getModifyDeadlineAckIdsList().size(); + } + if (streamAckDeadlineSeconds_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(5, streamAckDeadlineSeconds_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(clientId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(6, clientId_); + } + if (maxOutstandingMessages_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(7, maxOutstandingMessages_); + } + if (maxOutstandingBytes_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(8, maxOutstandingBytes_); + } + if (protocolVersion_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(10, protocolVersion_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.StreamingPullRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.StreamingPullRequest other = + (com.google.pubsub.v1.StreamingPullRequest) obj; + + if (!getSubscription().equals(other.getSubscription())) return false; + if (!getAckIdsList().equals(other.getAckIdsList())) return false; + if (!getModifyDeadlineSecondsList().equals(other.getModifyDeadlineSecondsList())) return false; + if (!getModifyDeadlineAckIdsList().equals(other.getModifyDeadlineAckIdsList())) return false; + if (getStreamAckDeadlineSeconds() != other.getStreamAckDeadlineSeconds()) return false; + if (!getClientId().equals(other.getClientId())) return false; + if (getMaxOutstandingMessages() != other.getMaxOutstandingMessages()) return false; + if (getMaxOutstandingBytes() != other.getMaxOutstandingBytes()) return false; + if (getProtocolVersion() != other.getProtocolVersion()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SUBSCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getSubscription().hashCode(); + if (getAckIdsCount() > 0) { + hash = (37 * hash) + ACK_IDS_FIELD_NUMBER; + hash = (53 * hash) + getAckIdsList().hashCode(); + } + if (getModifyDeadlineSecondsCount() > 0) { + hash = (37 * hash) + MODIFY_DEADLINE_SECONDS_FIELD_NUMBER; + hash = (53 * hash) + getModifyDeadlineSecondsList().hashCode(); + } + if (getModifyDeadlineAckIdsCount() > 0) { + hash = (37 * hash) + MODIFY_DEADLINE_ACK_IDS_FIELD_NUMBER; + hash = (53 * hash) + getModifyDeadlineAckIdsList().hashCode(); + } + hash = (37 * hash) + STREAM_ACK_DEADLINE_SECONDS_FIELD_NUMBER; + hash = (53 * hash) + getStreamAckDeadlineSeconds(); + hash = (37 * hash) + CLIENT_ID_FIELD_NUMBER; + hash = (53 * hash) + getClientId().hashCode(); + hash = (37 * hash) + MAX_OUTSTANDING_MESSAGES_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getMaxOutstandingMessages()); + hash = (37 * hash) + MAX_OUTSTANDING_BYTES_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getMaxOutstandingBytes()); + hash = (37 * hash) + PROTOCOL_VERSION_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getProtocolVersion()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.StreamingPullRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.StreamingPullRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `StreamingPull` streaming RPC method. This request is used to
+   * establish the initial stream as well as to stream acknowledgments and ack
+   * deadline modifications from the client to the server.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.StreamingPullRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.StreamingPullRequest) + com.google.pubsub.v1.StreamingPullRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.StreamingPullRequest.class, + com.google.pubsub.v1.StreamingPullRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.StreamingPullRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + subscription_ = ""; + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + modifyDeadlineSeconds_ = emptyIntList(); + modifyDeadlineAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + streamAckDeadlineSeconds_ = 0; + clientId_ = ""; + maxOutstandingMessages_ = 0L; + maxOutstandingBytes_ = 0L; + protocolVersion_ = 0L; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.StreamingPullRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullRequest build() { + com.google.pubsub.v1.StreamingPullRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullRequest buildPartial() { + com.google.pubsub.v1.StreamingPullRequest result = + new com.google.pubsub.v1.StreamingPullRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.StreamingPullRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.subscription_ = subscription_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + ackIds_.makeImmutable(); + result.ackIds_ = ackIds_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + modifyDeadlineSeconds_.makeImmutable(); + result.modifyDeadlineSeconds_ = modifyDeadlineSeconds_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + modifyDeadlineAckIds_.makeImmutable(); + result.modifyDeadlineAckIds_ = modifyDeadlineAckIds_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.streamAckDeadlineSeconds_ = streamAckDeadlineSeconds_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.clientId_ = clientId_; + } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.maxOutstandingMessages_ = maxOutstandingMessages_; + } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.maxOutstandingBytes_ = maxOutstandingBytes_; + } + if (((from_bitField0_ & 0x00000100) != 0)) { + result.protocolVersion_ = protocolVersion_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.StreamingPullRequest) { + return mergeFrom((com.google.pubsub.v1.StreamingPullRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.StreamingPullRequest other) { + if (other == com.google.pubsub.v1.StreamingPullRequest.getDefaultInstance()) return this; + if (!other.getSubscription().isEmpty()) { + subscription_ = other.subscription_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.ackIds_.isEmpty()) { + if (ackIds_.isEmpty()) { + ackIds_ = other.ackIds_; + bitField0_ |= 0x00000002; + } else { + ensureAckIdsIsMutable(); + ackIds_.addAll(other.ackIds_); + } + onChanged(); + } + if (!other.modifyDeadlineSeconds_.isEmpty()) { + if (modifyDeadlineSeconds_.isEmpty()) { + modifyDeadlineSeconds_ = other.modifyDeadlineSeconds_; + modifyDeadlineSeconds_.makeImmutable(); + bitField0_ |= 0x00000004; + } else { + ensureModifyDeadlineSecondsIsMutable(); + modifyDeadlineSeconds_.addAll(other.modifyDeadlineSeconds_); + } + onChanged(); + } + if (!other.modifyDeadlineAckIds_.isEmpty()) { + if (modifyDeadlineAckIds_.isEmpty()) { + modifyDeadlineAckIds_ = other.modifyDeadlineAckIds_; + bitField0_ |= 0x00000008; + } else { + ensureModifyDeadlineAckIdsIsMutable(); + modifyDeadlineAckIds_.addAll(other.modifyDeadlineAckIds_); + } + onChanged(); + } + if (other.getStreamAckDeadlineSeconds() != 0) { + setStreamAckDeadlineSeconds(other.getStreamAckDeadlineSeconds()); + } + if (!other.getClientId().isEmpty()) { + clientId_ = other.clientId_; + bitField0_ |= 0x00000020; + onChanged(); + } + if (other.getMaxOutstandingMessages() != 0L) { + setMaxOutstandingMessages(other.getMaxOutstandingMessages()); + } + if (other.getMaxOutstandingBytes() != 0L) { + setMaxOutstandingBytes(other.getMaxOutstandingBytes()); + } + if (other.getProtocolVersion() != 0L) { + setProtocolVersion(other.getProtocolVersion()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + subscription_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureAckIdsIsMutable(); + ackIds_.add(s); + break; + } // case 18 + case 24: + { + int v = input.readInt32(); + ensureModifyDeadlineSecondsIsMutable(); + modifyDeadlineSeconds_.addInt(v); + break; + } // case 24 + case 26: + { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + ensureModifyDeadlineSecondsIsMutable(); + while (input.getBytesUntilLimit() > 0) { + modifyDeadlineSeconds_.addInt(input.readInt32()); + } + input.popLimit(limit); + break; + } // case 26 + case 34: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureModifyDeadlineAckIdsIsMutable(); + modifyDeadlineAckIds_.add(s); + break; + } // case 34 + case 40: + { + streamAckDeadlineSeconds_ = input.readInt32(); + bitField0_ |= 0x00000010; + break; + } // case 40 + case 50: + { + clientId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000020; + break; + } // case 50 + case 56: + { + maxOutstandingMessages_ = input.readInt64(); + bitField0_ |= 0x00000040; + break; + } // case 56 + case 64: + { + maxOutstandingBytes_ = input.readInt64(); + bitField0_ |= 0x00000080; + break; + } // case 64 + case 80: + { + protocolVersion_ = input.readInt64(); + bitField0_ |= 0x00000100; + break; + } // case 80 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object subscription_ = ""; + + /** + * + * + *
+     * Required. The subscription for which to initialize the new stream. This
+     * must be provided in the first request on the stream, and must not be set in
+     * subsequent requests from client to server.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The subscription for which to initialize the new stream. This
+     * must be provided in the first request on the stream, and must not be set in
+     * subsequent requests from client to server.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The subscription for which to initialize the new stream. This
+     * must be provided in the first request on the stream, and must not be set in
+     * subsequent requests from client to server.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscription(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription for which to initialize the new stream. This
+     * must be provided in the first request on the stream, and must not be set in
+     * subsequent requests from client to server.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSubscription() { + subscription_ = getDefaultInstance().getSubscription(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The subscription for which to initialize the new stream. This
+     * must be provided in the first request on the stream, and must not be set in
+     * subsequent requests from client to server.
+     * Format is `projects/{project}/subscriptions/{sub}`.
+     * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscriptionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + subscription_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.protobuf.LazyStringArrayList ackIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureAckIdsIsMutable() { + if (!ackIds_.isModifiable()) { + ackIds_ = new com.google.protobuf.LazyStringArrayList(ackIds_); + } + bitField0_ |= 0x00000002; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs for acknowledging previously received
+     * messages (received on this stream or a different stream). If an ack ID has
+     * expired, the corresponding message may be redelivered later. Acknowledging
+     * a message more than once will not result in an error. If the acknowledgment
+     * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the ackIds. + */ + public com.google.protobuf.ProtocolStringList getAckIdsList() { + ackIds_.makeImmutable(); + return ackIds_; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs for acknowledging previously received
+     * messages (received on this stream or a different stream). If an ack ID has
+     * expired, the corresponding message may be redelivered later. Acknowledging
+     * a message more than once will not result in an error. If the acknowledgment
+     * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of ackIds. + */ + public int getAckIdsCount() { + return ackIds_.size(); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs for acknowledging previously received
+     * messages (received on this stream or a different stream). If an ack ID has
+     * expired, the corresponding message may be redelivered later. Acknowledging
+     * a message more than once will not result in an error. If the acknowledgment
+     * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + public java.lang.String getAckIds(int index) { + return ackIds_.get(index); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs for acknowledging previously received
+     * messages (received on this stream or a different stream). If an ack ID has
+     * expired, the corresponding message may be redelivered later. Acknowledging
+     * a message more than once will not result in an error. If the acknowledgment
+     * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + public com.google.protobuf.ByteString getAckIdsBytes(int index) { + return ackIds_.getByteString(index); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs for acknowledging previously received
+     * messages (received on this stream or a different stream). If an ack ID has
+     * expired, the corresponding message may be redelivered later. Acknowledging
+     * a message more than once will not result in an error. If the acknowledgment
+     * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index to set the value at. + * @param value The ackIds to set. + * @return This builder for chaining. + */ + public Builder setAckIds(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureAckIdsIsMutable(); + ackIds_.set(index, value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs for acknowledging previously received
+     * messages (received on this stream or a different stream). If an ack ID has
+     * expired, the corresponding message may be redelivered later. Acknowledging
+     * a message more than once will not result in an error. If the acknowledgment
+     * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The ackIds to add. + * @return This builder for chaining. + */ + public Builder addAckIds(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureAckIdsIsMutable(); + ackIds_.add(value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs for acknowledging previously received
+     * messages (received on this stream or a different stream). If an ack ID has
+     * expired, the corresponding message may be redelivered later. Acknowledging
+     * a message more than once will not result in an error. If the acknowledgment
+     * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param values The ackIds to add. + * @return This builder for chaining. + */ + public Builder addAllAckIds(java.lang.Iterable values) { + ensureAckIdsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, ackIds_); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs for acknowledging previously received
+     * messages (received on this stream or a different stream). If an ack ID has
+     * expired, the corresponding message may be redelivered later. Acknowledging
+     * a message more than once will not result in an error. If the acknowledgment
+     * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearAckIds() { + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + ; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs for acknowledging previously received
+     * messages (received on this stream or a different stream). If an ack ID has
+     * expired, the corresponding message may be redelivered later. Acknowledging
+     * a message more than once will not result in an error. If the acknowledgment
+     * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes of the ackIds to add. + * @return This builder for chaining. + */ + public Builder addAckIdsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureAckIdsIsMutable(); + ackIds_.add(value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private com.google.protobuf.Internal.IntList modifyDeadlineSeconds_ = emptyIntList(); + + private void ensureModifyDeadlineSecondsIsMutable() { + if (!modifyDeadlineSeconds_.isModifiable()) { + modifyDeadlineSeconds_ = makeMutableCopy(modifyDeadlineSeconds_); + } + bitField0_ |= 0x00000004; + } + + /** + * + * + *
+     * Optional. The list of new ack deadlines for the IDs listed in
+     * `modify_deadline_ack_ids`. The size of this list must be the same as the
+     * size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
+     * with `INVALID_ARGUMENT`. Each element in this list is applied to the
+     * element in the same position in `modify_deadline_ack_ids`. The new ack
+     * deadline is with respect to the time this request was sent to the Pub/Sub
+     * system. Must be >= 0. For example, if the value is 10, the new ack deadline
+     * will expire 10 seconds after this request is received. If the value is 0,
+     * the message is immediately made available for another streaming or
+     * non-streaming pull request. If the value is < 0 (an error), the stream will
+     * be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated int32 modify_deadline_seconds = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the modifyDeadlineSeconds. + */ + public java.util.List getModifyDeadlineSecondsList() { + modifyDeadlineSeconds_.makeImmutable(); + return modifyDeadlineSeconds_; + } + + /** + * + * + *
+     * Optional. The list of new ack deadlines for the IDs listed in
+     * `modify_deadline_ack_ids`. The size of this list must be the same as the
+     * size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
+     * with `INVALID_ARGUMENT`. Each element in this list is applied to the
+     * element in the same position in `modify_deadline_ack_ids`. The new ack
+     * deadline is with respect to the time this request was sent to the Pub/Sub
+     * system. Must be >= 0. For example, if the value is 10, the new ack deadline
+     * will expire 10 seconds after this request is received. If the value is 0,
+     * the message is immediately made available for another streaming or
+     * non-streaming pull request. If the value is < 0 (an error), the stream will
+     * be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated int32 modify_deadline_seconds = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of modifyDeadlineSeconds. + */ + public int getModifyDeadlineSecondsCount() { + return modifyDeadlineSeconds_.size(); + } + + /** + * + * + *
+     * Optional. The list of new ack deadlines for the IDs listed in
+     * `modify_deadline_ack_ids`. The size of this list must be the same as the
+     * size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
+     * with `INVALID_ARGUMENT`. Each element in this list is applied to the
+     * element in the same position in `modify_deadline_ack_ids`. The new ack
+     * deadline is with respect to the time this request was sent to the Pub/Sub
+     * system. Must be >= 0. For example, if the value is 10, the new ack deadline
+     * will expire 10 seconds after this request is received. If the value is 0,
+     * the message is immediately made available for another streaming or
+     * non-streaming pull request. If the value is < 0 (an error), the stream will
+     * be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated int32 modify_deadline_seconds = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The modifyDeadlineSeconds at the given index. + */ + public int getModifyDeadlineSeconds(int index) { + return modifyDeadlineSeconds_.getInt(index); + } + + /** + * + * + *
+     * Optional. The list of new ack deadlines for the IDs listed in
+     * `modify_deadline_ack_ids`. The size of this list must be the same as the
+     * size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
+     * with `INVALID_ARGUMENT`. Each element in this list is applied to the
+     * element in the same position in `modify_deadline_ack_ids`. The new ack
+     * deadline is with respect to the time this request was sent to the Pub/Sub
+     * system. Must be >= 0. For example, if the value is 10, the new ack deadline
+     * will expire 10 seconds after this request is received. If the value is 0,
+     * the message is immediately made available for another streaming or
+     * non-streaming pull request. If the value is < 0 (an error), the stream will
+     * be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated int32 modify_deadline_seconds = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index to set the value at. + * @param value The modifyDeadlineSeconds to set. + * @return This builder for chaining. + */ + public Builder setModifyDeadlineSeconds(int index, int value) { + + ensureModifyDeadlineSecondsIsMutable(); + modifyDeadlineSeconds_.setInt(index, value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The list of new ack deadlines for the IDs listed in
+     * `modify_deadline_ack_ids`. The size of this list must be the same as the
+     * size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
+     * with `INVALID_ARGUMENT`. Each element in this list is applied to the
+     * element in the same position in `modify_deadline_ack_ids`. The new ack
+     * deadline is with respect to the time this request was sent to the Pub/Sub
+     * system. Must be >= 0. For example, if the value is 10, the new ack deadline
+     * will expire 10 seconds after this request is received. If the value is 0,
+     * the message is immediately made available for another streaming or
+     * non-streaming pull request. If the value is < 0 (an error), the stream will
+     * be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated int32 modify_deadline_seconds = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The modifyDeadlineSeconds to add. + * @return This builder for chaining. + */ + public Builder addModifyDeadlineSeconds(int value) { + + ensureModifyDeadlineSecondsIsMutable(); + modifyDeadlineSeconds_.addInt(value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The list of new ack deadlines for the IDs listed in
+     * `modify_deadline_ack_ids`. The size of this list must be the same as the
+     * size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
+     * with `INVALID_ARGUMENT`. Each element in this list is applied to the
+     * element in the same position in `modify_deadline_ack_ids`. The new ack
+     * deadline is with respect to the time this request was sent to the Pub/Sub
+     * system. Must be >= 0. For example, if the value is 10, the new ack deadline
+     * will expire 10 seconds after this request is received. If the value is 0,
+     * the message is immediately made available for another streaming or
+     * non-streaming pull request. If the value is < 0 (an error), the stream will
+     * be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated int32 modify_deadline_seconds = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param values The modifyDeadlineSeconds to add. + * @return This builder for chaining. + */ + public Builder addAllModifyDeadlineSeconds( + java.lang.Iterable values) { + ensureModifyDeadlineSecondsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, modifyDeadlineSeconds_); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The list of new ack deadlines for the IDs listed in
+     * `modify_deadline_ack_ids`. The size of this list must be the same as the
+     * size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
+     * with `INVALID_ARGUMENT`. Each element in this list is applied to the
+     * element in the same position in `modify_deadline_ack_ids`. The new ack
+     * deadline is with respect to the time this request was sent to the Pub/Sub
+     * system. Must be >= 0. For example, if the value is 10, the new ack deadline
+     * will expire 10 seconds after this request is received. If the value is 0,
+     * the message is immediately made available for another streaming or
+     * non-streaming pull request. If the value is < 0 (an error), the stream will
+     * be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * repeated int32 modify_deadline_seconds = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return This builder for chaining. + */ + public Builder clearModifyDeadlineSeconds() { + modifyDeadlineSeconds_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + private com.google.protobuf.LazyStringArrayList modifyDeadlineAckIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureModifyDeadlineAckIdsIsMutable() { + if (!modifyDeadlineAckIds_.isModifiable()) { + modifyDeadlineAckIds_ = new com.google.protobuf.LazyStringArrayList(modifyDeadlineAckIds_); + } + bitField0_ |= 0x00000008; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs whose deadline will be modified based
+     * on the corresponding element in `modify_deadline_seconds`. This field can
+     * be used to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted.
+     * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the modifyDeadlineAckIds. + */ + public com.google.protobuf.ProtocolStringList getModifyDeadlineAckIdsList() { + modifyDeadlineAckIds_.makeImmutable(); + return modifyDeadlineAckIds_; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs whose deadline will be modified based
+     * on the corresponding element in `modify_deadline_seconds`. This field can
+     * be used to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted.
+     * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of modifyDeadlineAckIds. + */ + public int getModifyDeadlineAckIdsCount() { + return modifyDeadlineAckIds_.size(); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs whose deadline will be modified based
+     * on the corresponding element in `modify_deadline_seconds`. This field can
+     * be used to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted.
+     * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The modifyDeadlineAckIds at the given index. + */ + public java.lang.String getModifyDeadlineAckIds(int index) { + return modifyDeadlineAckIds_.get(index); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs whose deadline will be modified based
+     * on the corresponding element in `modify_deadline_seconds`. This field can
+     * be used to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted.
+     * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the value to return. + * @return The bytes of the modifyDeadlineAckIds at the given index. + */ + public com.google.protobuf.ByteString getModifyDeadlineAckIdsBytes(int index) { + return modifyDeadlineAckIds_.getByteString(index); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs whose deadline will be modified based
+     * on the corresponding element in `modify_deadline_seconds`. This field can
+     * be used to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted.
+     * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index to set the value at. + * @param value The modifyDeadlineAckIds to set. + * @return This builder for chaining. + */ + public Builder setModifyDeadlineAckIds(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureModifyDeadlineAckIdsIsMutable(); + modifyDeadlineAckIds_.set(index, value); + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs whose deadline will be modified based
+     * on the corresponding element in `modify_deadline_seconds`. This field can
+     * be used to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted.
+     * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The modifyDeadlineAckIds to add. + * @return This builder for chaining. + */ + public Builder addModifyDeadlineAckIds(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureModifyDeadlineAckIdsIsMutable(); + modifyDeadlineAckIds_.add(value); + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs whose deadline will be modified based
+     * on the corresponding element in `modify_deadline_seconds`. This field can
+     * be used to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted.
+     * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param values The modifyDeadlineAckIds to add. + * @return This builder for chaining. + */ + public Builder addAllModifyDeadlineAckIds(java.lang.Iterable values) { + ensureModifyDeadlineAckIdsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, modifyDeadlineAckIds_); + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs whose deadline will be modified based
+     * on the corresponding element in `modify_deadline_seconds`. This field can
+     * be used to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted.
+     * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return This builder for chaining. + */ + public Builder clearModifyDeadlineAckIds() { + modifyDeadlineAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + ; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs whose deadline will be modified based
+     * on the corresponding element in `modify_deadline_seconds`. This field can
+     * be used to indicate that more time is needed to process a message by the
+     * subscriber, or to make the message available for redelivery if the
+     * processing was interrupted.
+     * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The bytes of the modifyDeadlineAckIds to add. + * @return This builder for chaining. + */ + public Builder addModifyDeadlineAckIdsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureModifyDeadlineAckIdsIsMutable(); + modifyDeadlineAckIds_.add(value); + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + private int streamAckDeadlineSeconds_; + + /** + * + * + *
+     * Required. The ack deadline to use for the stream. This must be provided in
+     * the first request on the stream, but it can also be updated on subsequent
+     * requests from client to server. The minimum deadline you can specify is 10
+     * seconds. The maximum deadline you can specify is 600 seconds (10 minutes).
+     * 
+ * + * int32 stream_ack_deadline_seconds = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The streamAckDeadlineSeconds. + */ + @java.lang.Override + public int getStreamAckDeadlineSeconds() { + return streamAckDeadlineSeconds_; + } + + /** + * + * + *
+     * Required. The ack deadline to use for the stream. This must be provided in
+     * the first request on the stream, but it can also be updated on subsequent
+     * requests from client to server. The minimum deadline you can specify is 10
+     * seconds. The maximum deadline you can specify is 600 seconds (10 minutes).
+     * 
+ * + * int32 stream_ack_deadline_seconds = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The streamAckDeadlineSeconds to set. + * @return This builder for chaining. + */ + public Builder setStreamAckDeadlineSeconds(int value) { + + streamAckDeadlineSeconds_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The ack deadline to use for the stream. This must be provided in
+     * the first request on the stream, but it can also be updated on subsequent
+     * requests from client to server. The minimum deadline you can specify is 10
+     * seconds. The maximum deadline you can specify is 600 seconds (10 minutes).
+     * 
+ * + * int32 stream_ack_deadline_seconds = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearStreamAckDeadlineSeconds() { + bitField0_ = (bitField0_ & ~0x00000010); + streamAckDeadlineSeconds_ = 0; + onChanged(); + return this; + } + + private java.lang.Object clientId_ = ""; + + /** + * + * + *
+     * Optional. A unique identifier that is used to distinguish client instances
+     * from each other. Only needs to be provided on the initial request. When a
+     * stream disconnects and reconnects for the same stream, the client_id should
+     * be set to the same value so that state associated with the old stream can
+     * be transferred to the new stream. The same client_id should not be used for
+     * different client instances.
+     * 
+ * + * string client_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The clientId. + */ + public java.lang.String getClientId() { + java.lang.Object ref = clientId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + clientId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. A unique identifier that is used to distinguish client instances
+     * from each other. Only needs to be provided on the initial request. When a
+     * stream disconnects and reconnects for the same stream, the client_id should
+     * be set to the same value so that state associated with the old stream can
+     * be transferred to the new stream. The same client_id should not be used for
+     * different client instances.
+     * 
+ * + * string client_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for clientId. + */ + public com.google.protobuf.ByteString getClientIdBytes() { + java.lang.Object ref = clientId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + clientId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. A unique identifier that is used to distinguish client instances
+     * from each other. Only needs to be provided on the initial request. When a
+     * stream disconnects and reconnects for the same stream, the client_id should
+     * be set to the same value so that state associated with the old stream can
+     * be transferred to the new stream. The same client_id should not be used for
+     * different client instances.
+     * 
+ * + * string client_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The clientId to set. + * @return This builder for chaining. + */ + public Builder setClientId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + clientId_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A unique identifier that is used to distinguish client instances
+     * from each other. Only needs to be provided on the initial request. When a
+     * stream disconnects and reconnects for the same stream, the client_id should
+     * be set to the same value so that state associated with the old stream can
+     * be transferred to the new stream. The same client_id should not be used for
+     * different client instances.
+     * 
+ * + * string client_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearClientId() { + clientId_ = getDefaultInstance().getClientId(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A unique identifier that is used to distinguish client instances
+     * from each other. Only needs to be provided on the initial request. When a
+     * stream disconnects and reconnects for the same stream, the client_id should
+     * be set to the same value so that state associated with the old stream can
+     * be transferred to the new stream. The same client_id should not be used for
+     * different client instances.
+     * 
+ * + * string client_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for clientId to set. + * @return This builder for chaining. + */ + public Builder setClientIdBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + clientId_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + private long maxOutstandingMessages_; + + /** + * + * + *
+     * Optional. Flow control settings for the maximum number of outstanding
+     * messages. When there are `max_outstanding_messages` currently sent to the
+     * streaming pull client that have not yet been acked or nacked, the server
+     * stops sending more messages. The sending of messages resumes once the
+     * number of outstanding messages is less than this value. If the value is
+     * <= 0, there is no limit to the number of outstanding messages. This
+     * property can only be set on the initial StreamingPullRequest. If it is set
+     * on a subsequent request, the stream will be aborted with status
+     * `INVALID_ARGUMENT`.
+     * 
+ * + * int64 max_outstanding_messages = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxOutstandingMessages. + */ + @java.lang.Override + public long getMaxOutstandingMessages() { + return maxOutstandingMessages_; + } + + /** + * + * + *
+     * Optional. Flow control settings for the maximum number of outstanding
+     * messages. When there are `max_outstanding_messages` currently sent to the
+     * streaming pull client that have not yet been acked or nacked, the server
+     * stops sending more messages. The sending of messages resumes once the
+     * number of outstanding messages is less than this value. If the value is
+     * <= 0, there is no limit to the number of outstanding messages. This
+     * property can only be set on the initial StreamingPullRequest. If it is set
+     * on a subsequent request, the stream will be aborted with status
+     * `INVALID_ARGUMENT`.
+     * 
+ * + * int64 max_outstanding_messages = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The maxOutstandingMessages to set. + * @return This builder for chaining. + */ + public Builder setMaxOutstandingMessages(long value) { + + maxOutstandingMessages_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Flow control settings for the maximum number of outstanding
+     * messages. When there are `max_outstanding_messages` currently sent to the
+     * streaming pull client that have not yet been acked or nacked, the server
+     * stops sending more messages. The sending of messages resumes once the
+     * number of outstanding messages is less than this value. If the value is
+     * <= 0, there is no limit to the number of outstanding messages. This
+     * property can only be set on the initial StreamingPullRequest. If it is set
+     * on a subsequent request, the stream will be aborted with status
+     * `INVALID_ARGUMENT`.
+     * 
+ * + * int64 max_outstanding_messages = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearMaxOutstandingMessages() { + bitField0_ = (bitField0_ & ~0x00000040); + maxOutstandingMessages_ = 0L; + onChanged(); + return this; + } + + private long maxOutstandingBytes_; + + /** + * + * + *
+     * Optional. Flow control settings for the maximum number of outstanding
+     * bytes. When there are `max_outstanding_bytes` or more worth of messages
+     * currently sent to the streaming pull client that have not yet been acked or
+     * nacked, the server will stop sending more messages. The sending of messages
+     * resumes once the number of outstanding bytes is less than this value. If
+     * the value is <= 0, there is no limit to the number of outstanding bytes.
+     * This property can only be set on the initial StreamingPullRequest. If it is
+     * set on a subsequent request, the stream will be aborted with status
+     * `INVALID_ARGUMENT`.
+     * 
+ * + * int64 max_outstanding_bytes = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxOutstandingBytes. + */ + @java.lang.Override + public long getMaxOutstandingBytes() { + return maxOutstandingBytes_; + } + + /** + * + * + *
+     * Optional. Flow control settings for the maximum number of outstanding
+     * bytes. When there are `max_outstanding_bytes` or more worth of messages
+     * currently sent to the streaming pull client that have not yet been acked or
+     * nacked, the server will stop sending more messages. The sending of messages
+     * resumes once the number of outstanding bytes is less than this value. If
+     * the value is <= 0, there is no limit to the number of outstanding bytes.
+     * This property can only be set on the initial StreamingPullRequest. If it is
+     * set on a subsequent request, the stream will be aborted with status
+     * `INVALID_ARGUMENT`.
+     * 
+ * + * int64 max_outstanding_bytes = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The maxOutstandingBytes to set. + * @return This builder for chaining. + */ + public Builder setMaxOutstandingBytes(long value) { + + maxOutstandingBytes_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Flow control settings for the maximum number of outstanding
+     * bytes. When there are `max_outstanding_bytes` or more worth of messages
+     * currently sent to the streaming pull client that have not yet been acked or
+     * nacked, the server will stop sending more messages. The sending of messages
+     * resumes once the number of outstanding bytes is less than this value. If
+     * the value is <= 0, there is no limit to the number of outstanding bytes.
+     * This property can only be set on the initial StreamingPullRequest. If it is
+     * set on a subsequent request, the stream will be aborted with status
+     * `INVALID_ARGUMENT`.
+     * 
+ * + * int64 max_outstanding_bytes = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearMaxOutstandingBytes() { + bitField0_ = (bitField0_ & ~0x00000080); + maxOutstandingBytes_ = 0L; + onChanged(); + return this; + } + + private long protocolVersion_; + + /** + * + * + *
+     * Optional. The protocol version used by the client. This property can only
+     * be set on the initial StreamingPullRequest. If it is set on a subsequent
+     * request, the stream will be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * int64 protocol_version = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The protocolVersion. + */ + @java.lang.Override + public long getProtocolVersion() { + return protocolVersion_; + } + + /** + * + * + *
+     * Optional. The protocol version used by the client. This property can only
+     * be set on the initial StreamingPullRequest. If it is set on a subsequent
+     * request, the stream will be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * int64 protocol_version = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The protocolVersion to set. + * @return This builder for chaining. + */ + public Builder setProtocolVersion(long value) { + + protocolVersion_ = value; + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The protocol version used by the client. This property can only
+     * be set on the initial StreamingPullRequest. If it is set on a subsequent
+     * request, the stream will be aborted with status `INVALID_ARGUMENT`.
+     * 
+ * + * int64 protocol_version = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearProtocolVersion() { + bitField0_ = (bitField0_ & ~0x00000100); + protocolVersion_ = 0L; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.StreamingPullRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.StreamingPullRequest) + private static final com.google.pubsub.v1.StreamingPullRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.StreamingPullRequest(); + } + + public static com.google.pubsub.v1.StreamingPullRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public StreamingPullRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/StreamingPullRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/StreamingPullRequestOrBuilder.java new file mode 100644 index 000000000000..6f4d94bcb2e6 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/StreamingPullRequestOrBuilder.java @@ -0,0 +1,390 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface StreamingPullRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.StreamingPullRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The subscription for which to initialize the new stream. This
+   * must be provided in the first request on the stream, and must not be set in
+   * subsequent requests from client to server.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The subscription. + */ + java.lang.String getSubscription(); + + /** + * + * + *
+   * Required. The subscription for which to initialize the new stream. This
+   * must be provided in the first request on the stream, and must not be set in
+   * subsequent requests from client to server.
+   * Format is `projects/{project}/subscriptions/{sub}`.
+   * 
+ * + * + * string subscription = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for subscription. + */ + com.google.protobuf.ByteString getSubscriptionBytes(); + + /** + * + * + *
+   * Optional. List of acknowledgment IDs for acknowledging previously received
+   * messages (received on this stream or a different stream). If an ack ID has
+   * expired, the corresponding message may be redelivered later. Acknowledging
+   * a message more than once will not result in an error. If the acknowledgment
+   * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the ackIds. + */ + java.util.List getAckIdsList(); + + /** + * + * + *
+   * Optional. List of acknowledgment IDs for acknowledging previously received
+   * messages (received on this stream or a different stream). If an ack ID has
+   * expired, the corresponding message may be redelivered later. Acknowledging
+   * a message more than once will not result in an error. If the acknowledgment
+   * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of ackIds. + */ + int getAckIdsCount(); + + /** + * + * + *
+   * Optional. List of acknowledgment IDs for acknowledging previously received
+   * messages (received on this stream or a different stream). If an ack ID has
+   * expired, the corresponding message may be redelivered later. Acknowledging
+   * a message more than once will not result in an error. If the acknowledgment
+   * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + java.lang.String getAckIds(int index); + + /** + * + * + *
+   * Optional. List of acknowledgment IDs for acknowledging previously received
+   * messages (received on this stream or a different stream). If an ack ID has
+   * expired, the corresponding message may be redelivered later. Acknowledging
+   * a message more than once will not result in an error. If the acknowledgment
+   * ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated string ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + com.google.protobuf.ByteString getAckIdsBytes(int index); + + /** + * + * + *
+   * Optional. The list of new ack deadlines for the IDs listed in
+   * `modify_deadline_ack_ids`. The size of this list must be the same as the
+   * size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
+   * with `INVALID_ARGUMENT`. Each element in this list is applied to the
+   * element in the same position in `modify_deadline_ack_ids`. The new ack
+   * deadline is with respect to the time this request was sent to the Pub/Sub
+   * system. Must be >= 0. For example, if the value is 10, the new ack deadline
+   * will expire 10 seconds after this request is received. If the value is 0,
+   * the message is immediately made available for another streaming or
+   * non-streaming pull request. If the value is < 0 (an error), the stream will
+   * be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated int32 modify_deadline_seconds = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the modifyDeadlineSeconds. + */ + java.util.List getModifyDeadlineSecondsList(); + + /** + * + * + *
+   * Optional. The list of new ack deadlines for the IDs listed in
+   * `modify_deadline_ack_ids`. The size of this list must be the same as the
+   * size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
+   * with `INVALID_ARGUMENT`. Each element in this list is applied to the
+   * element in the same position in `modify_deadline_ack_ids`. The new ack
+   * deadline is with respect to the time this request was sent to the Pub/Sub
+   * system. Must be >= 0. For example, if the value is 10, the new ack deadline
+   * will expire 10 seconds after this request is received. If the value is 0,
+   * the message is immediately made available for another streaming or
+   * non-streaming pull request. If the value is < 0 (an error), the stream will
+   * be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated int32 modify_deadline_seconds = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of modifyDeadlineSeconds. + */ + int getModifyDeadlineSecondsCount(); + + /** + * + * + *
+   * Optional. The list of new ack deadlines for the IDs listed in
+   * `modify_deadline_ack_ids`. The size of this list must be the same as the
+   * size of `modify_deadline_ack_ids`. If it differs the stream will be aborted
+   * with `INVALID_ARGUMENT`. Each element in this list is applied to the
+   * element in the same position in `modify_deadline_ack_ids`. The new ack
+   * deadline is with respect to the time this request was sent to the Pub/Sub
+   * system. Must be >= 0. For example, if the value is 10, the new ack deadline
+   * will expire 10 seconds after this request is received. If the value is 0,
+   * the message is immediately made available for another streaming or
+   * non-streaming pull request. If the value is < 0 (an error), the stream will
+   * be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * repeated int32 modify_deadline_seconds = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The modifyDeadlineSeconds at the given index. + */ + int getModifyDeadlineSeconds(int index); + + /** + * + * + *
+   * Optional. List of acknowledgment IDs whose deadline will be modified based
+   * on the corresponding element in `modify_deadline_seconds`. This field can
+   * be used to indicate that more time is needed to process a message by the
+   * subscriber, or to make the message available for redelivery if the
+   * processing was interrupted.
+   * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the modifyDeadlineAckIds. + */ + java.util.List getModifyDeadlineAckIdsList(); + + /** + * + * + *
+   * Optional. List of acknowledgment IDs whose deadline will be modified based
+   * on the corresponding element in `modify_deadline_seconds`. This field can
+   * be used to indicate that more time is needed to process a message by the
+   * subscriber, or to make the message available for redelivery if the
+   * processing was interrupted.
+   * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of modifyDeadlineAckIds. + */ + int getModifyDeadlineAckIdsCount(); + + /** + * + * + *
+   * Optional. List of acknowledgment IDs whose deadline will be modified based
+   * on the corresponding element in `modify_deadline_seconds`. This field can
+   * be used to indicate that more time is needed to process a message by the
+   * subscriber, or to make the message available for redelivery if the
+   * processing was interrupted.
+   * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The modifyDeadlineAckIds at the given index. + */ + java.lang.String getModifyDeadlineAckIds(int index); + + /** + * + * + *
+   * Optional. List of acknowledgment IDs whose deadline will be modified based
+   * on the corresponding element in `modify_deadline_seconds`. This field can
+   * be used to indicate that more time is needed to process a message by the
+   * subscriber, or to make the message available for redelivery if the
+   * processing was interrupted.
+   * 
+ * + * repeated string modify_deadline_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the value to return. + * @return The bytes of the modifyDeadlineAckIds at the given index. + */ + com.google.protobuf.ByteString getModifyDeadlineAckIdsBytes(int index); + + /** + * + * + *
+   * Required. The ack deadline to use for the stream. This must be provided in
+   * the first request on the stream, but it can also be updated on subsequent
+   * requests from client to server. The minimum deadline you can specify is 10
+   * seconds. The maximum deadline you can specify is 600 seconds (10 minutes).
+   * 
+ * + * int32 stream_ack_deadline_seconds = 5 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The streamAckDeadlineSeconds. + */ + int getStreamAckDeadlineSeconds(); + + /** + * + * + *
+   * Optional. A unique identifier that is used to distinguish client instances
+   * from each other. Only needs to be provided on the initial request. When a
+   * stream disconnects and reconnects for the same stream, the client_id should
+   * be set to the same value so that state associated with the old stream can
+   * be transferred to the new stream. The same client_id should not be used for
+   * different client instances.
+   * 
+ * + * string client_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The clientId. + */ + java.lang.String getClientId(); + + /** + * + * + *
+   * Optional. A unique identifier that is used to distinguish client instances
+   * from each other. Only needs to be provided on the initial request. When a
+   * stream disconnects and reconnects for the same stream, the client_id should
+   * be set to the same value so that state associated with the old stream can
+   * be transferred to the new stream. The same client_id should not be used for
+   * different client instances.
+   * 
+ * + * string client_id = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for clientId. + */ + com.google.protobuf.ByteString getClientIdBytes(); + + /** + * + * + *
+   * Optional. Flow control settings for the maximum number of outstanding
+   * messages. When there are `max_outstanding_messages` currently sent to the
+   * streaming pull client that have not yet been acked or nacked, the server
+   * stops sending more messages. The sending of messages resumes once the
+   * number of outstanding messages is less than this value. If the value is
+   * <= 0, there is no limit to the number of outstanding messages. This
+   * property can only be set on the initial StreamingPullRequest. If it is set
+   * on a subsequent request, the stream will be aborted with status
+   * `INVALID_ARGUMENT`.
+   * 
+ * + * int64 max_outstanding_messages = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxOutstandingMessages. + */ + long getMaxOutstandingMessages(); + + /** + * + * + *
+   * Optional. Flow control settings for the maximum number of outstanding
+   * bytes. When there are `max_outstanding_bytes` or more worth of messages
+   * currently sent to the streaming pull client that have not yet been acked or
+   * nacked, the server will stop sending more messages. The sending of messages
+   * resumes once the number of outstanding bytes is less than this value. If
+   * the value is <= 0, there is no limit to the number of outstanding bytes.
+   * This property can only be set on the initial StreamingPullRequest. If it is
+   * set on a subsequent request, the stream will be aborted with status
+   * `INVALID_ARGUMENT`.
+   * 
+ * + * int64 max_outstanding_bytes = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The maxOutstandingBytes. + */ + long getMaxOutstandingBytes(); + + /** + * + * + *
+   * Optional. The protocol version used by the client. This property can only
+   * be set on the initial StreamingPullRequest. If it is set on a subsequent
+   * request, the stream will be aborted with status `INVALID_ARGUMENT`.
+   * 
+ * + * int64 protocol_version = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The protocolVersion. + */ + long getProtocolVersion(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/StreamingPullResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/StreamingPullResponse.java new file mode 100644 index 000000000000..2ec1bf15c470 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/StreamingPullResponse.java @@ -0,0 +1,5988 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the `StreamingPull` method. This response is used to stream
+ * messages from the server to the client.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.StreamingPullResponse} + */ +@com.google.protobuf.Generated +public final class StreamingPullResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.StreamingPullResponse) + StreamingPullResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "StreamingPullResponse"); + } + + // Use StreamingPullResponse.newBuilder() to construct. + private StreamingPullResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private StreamingPullResponse() { + receivedMessages_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.StreamingPullResponse.class, + com.google.pubsub.v1.StreamingPullResponse.Builder.class); + } + + public interface AcknowledgeConfirmationOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the ackIds. + */ + java.util.List getAckIdsList(); + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of ackIds. + */ + int getAckIdsCount(); + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + java.lang.String getAckIds(int index); + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + com.google.protobuf.ByteString getAckIdsBytes(int index); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the invalidAckIds. + */ + java.util.List getInvalidAckIdsList(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of invalidAckIds. + */ + int getInvalidAckIdsCount(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The invalidAckIds at the given index. + */ + java.lang.String getInvalidAckIds(int index); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the invalidAckIds at the given index. + */ + com.google.protobuf.ByteString getInvalidAckIdsBytes(int index); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were out of order.
+     * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the unorderedAckIds. + */ + java.util.List getUnorderedAckIdsList(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were out of order.
+     * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of unorderedAckIds. + */ + int getUnorderedAckIdsCount(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were out of order.
+     * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The unorderedAckIds at the given index. + */ + java.lang.String getUnorderedAckIds(int index); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were out of order.
+     * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the unorderedAckIds at the given index. + */ + com.google.protobuf.ByteString getUnorderedAckIdsBytes(int index); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the temporaryFailedAckIds. + */ + java.util.List getTemporaryFailedAckIdsList(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of temporaryFailedAckIds. + */ + int getTemporaryFailedAckIdsCount(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The temporaryFailedAckIds at the given index. + */ + java.lang.String getTemporaryFailedAckIds(int index); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the value to return. + * @return The bytes of the temporaryFailedAckIds at the given index. + */ + com.google.protobuf.ByteString getTemporaryFailedAckIdsBytes(int index); + } + + /** + * + * + *
+   * Acknowledgment IDs sent in one or more previous requests to acknowledge a
+   * previously received message.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation} + */ + public static final class AcknowledgeConfirmation extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation) + AcknowledgeConfirmationOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AcknowledgeConfirmation"); + } + + // Use AcknowledgeConfirmation.newBuilder() to construct. + private AcknowledgeConfirmation(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AcknowledgeConfirmation() { + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + invalidAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + unorderedAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + temporaryFailedAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_AcknowledgeConfirmation_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_AcknowledgeConfirmation_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation.class, + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation.Builder.class); + } + + public static final int ACK_IDS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList ackIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the ackIds. + */ + public com.google.protobuf.ProtocolStringList getAckIdsList() { + return ackIds_; + } + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of ackIds. + */ + public int getAckIdsCount() { + return ackIds_.size(); + } + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + public java.lang.String getAckIds(int index) { + return ackIds_.get(index); + } + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + public com.google.protobuf.ByteString getAckIdsBytes(int index) { + return ackIds_.getByteString(index); + } + + public static final int INVALID_ACK_IDS_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList invalidAckIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the invalidAckIds. + */ + public com.google.protobuf.ProtocolStringList getInvalidAckIdsList() { + return invalidAckIds_; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of invalidAckIds. + */ + public int getInvalidAckIdsCount() { + return invalidAckIds_.size(); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The invalidAckIds at the given index. + */ + public java.lang.String getInvalidAckIds(int index) { + return invalidAckIds_.get(index); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the invalidAckIds at the given index. + */ + public com.google.protobuf.ByteString getInvalidAckIdsBytes(int index) { + return invalidAckIds_.getByteString(index); + } + + public static final int UNORDERED_ACK_IDS_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList unorderedAckIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were out of order.
+     * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the unorderedAckIds. + */ + public com.google.protobuf.ProtocolStringList getUnorderedAckIdsList() { + return unorderedAckIds_; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were out of order.
+     * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of unorderedAckIds. + */ + public int getUnorderedAckIdsCount() { + return unorderedAckIds_.size(); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were out of order.
+     * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The unorderedAckIds at the given index. + */ + public java.lang.String getUnorderedAckIds(int index) { + return unorderedAckIds_.get(index); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were out of order.
+     * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the unorderedAckIds at the given index. + */ + public com.google.protobuf.ByteString getUnorderedAckIdsBytes(int index) { + return unorderedAckIds_.getByteString(index); + } + + public static final int TEMPORARY_FAILED_ACK_IDS_FIELD_NUMBER = 4; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList temporaryFailedAckIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the temporaryFailedAckIds. + */ + public com.google.protobuf.ProtocolStringList getTemporaryFailedAckIdsList() { + return temporaryFailedAckIds_; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of temporaryFailedAckIds. + */ + public int getTemporaryFailedAckIdsCount() { + return temporaryFailedAckIds_.size(); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The temporaryFailedAckIds at the given index. + */ + public java.lang.String getTemporaryFailedAckIds(int index) { + return temporaryFailedAckIds_.get(index); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the value to return. + * @return The bytes of the temporaryFailedAckIds at the given index. + */ + public com.google.protobuf.ByteString getTemporaryFailedAckIdsBytes(int index) { + return temporaryFailedAckIds_.getByteString(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < ackIds_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, ackIds_.getRaw(i)); + } + for (int i = 0; i < invalidAckIds_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, invalidAckIds_.getRaw(i)); + } + for (int i = 0; i < unorderedAckIds_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, unorderedAckIds_.getRaw(i)); + } + for (int i = 0; i < temporaryFailedAckIds_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString( + output, 4, temporaryFailedAckIds_.getRaw(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int i = 0; i < ackIds_.size(); i++) { + dataSize += computeStringSizeNoTag(ackIds_.getRaw(i)); + } + size += dataSize; + size += 1 * getAckIdsList().size(); + } + { + int dataSize = 0; + for (int i = 0; i < invalidAckIds_.size(); i++) { + dataSize += computeStringSizeNoTag(invalidAckIds_.getRaw(i)); + } + size += dataSize; + size += 1 * getInvalidAckIdsList().size(); + } + { + int dataSize = 0; + for (int i = 0; i < unorderedAckIds_.size(); i++) { + dataSize += computeStringSizeNoTag(unorderedAckIds_.getRaw(i)); + } + size += dataSize; + size += 1 * getUnorderedAckIdsList().size(); + } + { + int dataSize = 0; + for (int i = 0; i < temporaryFailedAckIds_.size(); i++) { + dataSize += computeStringSizeNoTag(temporaryFailedAckIds_.getRaw(i)); + } + size += dataSize; + size += 1 * getTemporaryFailedAckIdsList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation)) { + return super.equals(obj); + } + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation other = + (com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation) obj; + + if (!getAckIdsList().equals(other.getAckIdsList())) return false; + if (!getInvalidAckIdsList().equals(other.getInvalidAckIdsList())) return false; + if (!getUnorderedAckIdsList().equals(other.getUnorderedAckIdsList())) return false; + if (!getTemporaryFailedAckIdsList().equals(other.getTemporaryFailedAckIdsList())) + return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getAckIdsCount() > 0) { + hash = (37 * hash) + ACK_IDS_FIELD_NUMBER; + hash = (53 * hash) + getAckIdsList().hashCode(); + } + if (getInvalidAckIdsCount() > 0) { + hash = (37 * hash) + INVALID_ACK_IDS_FIELD_NUMBER; + hash = (53 * hash) + getInvalidAckIdsList().hashCode(); + } + if (getUnorderedAckIdsCount() > 0) { + hash = (37 * hash) + UNORDERED_ACK_IDS_FIELD_NUMBER; + hash = (53 * hash) + getUnorderedAckIdsList().hashCode(); + } + if (getTemporaryFailedAckIdsCount() > 0) { + hash = (37 * hash) + TEMPORARY_FAILED_ACK_IDS_FIELD_NUMBER; + hash = (53 * hash) + getTemporaryFailedAckIdsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Acknowledgment IDs sent in one or more previous requests to acknowledge a
+     * previously received message.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation) + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmationOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_AcknowledgeConfirmation_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_AcknowledgeConfirmation_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation.class, + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation.Builder.class); + } + + // Construct using + // com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + invalidAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + unorderedAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + temporaryFailedAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_AcknowledgeConfirmation_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + getDefaultInstanceForType() { + return com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation build() { + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation buildPartial() { + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation result = + new com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + ackIds_.makeImmutable(); + result.ackIds_ = ackIds_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + invalidAckIds_.makeImmutable(); + result.invalidAckIds_ = invalidAckIds_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + unorderedAckIds_.makeImmutable(); + result.unorderedAckIds_ = unorderedAckIds_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + temporaryFailedAckIds_.makeImmutable(); + result.temporaryFailedAckIds_ = temporaryFailedAckIds_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation) { + return mergeFrom( + (com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation other) { + if (other + == com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + .getDefaultInstance()) return this; + if (!other.ackIds_.isEmpty()) { + if (ackIds_.isEmpty()) { + ackIds_ = other.ackIds_; + bitField0_ |= 0x00000001; + } else { + ensureAckIdsIsMutable(); + ackIds_.addAll(other.ackIds_); + } + onChanged(); + } + if (!other.invalidAckIds_.isEmpty()) { + if (invalidAckIds_.isEmpty()) { + invalidAckIds_ = other.invalidAckIds_; + bitField0_ |= 0x00000002; + } else { + ensureInvalidAckIdsIsMutable(); + invalidAckIds_.addAll(other.invalidAckIds_); + } + onChanged(); + } + if (!other.unorderedAckIds_.isEmpty()) { + if (unorderedAckIds_.isEmpty()) { + unorderedAckIds_ = other.unorderedAckIds_; + bitField0_ |= 0x00000004; + } else { + ensureUnorderedAckIdsIsMutable(); + unorderedAckIds_.addAll(other.unorderedAckIds_); + } + onChanged(); + } + if (!other.temporaryFailedAckIds_.isEmpty()) { + if (temporaryFailedAckIds_.isEmpty()) { + temporaryFailedAckIds_ = other.temporaryFailedAckIds_; + bitField0_ |= 0x00000008; + } else { + ensureTemporaryFailedAckIdsIsMutable(); + temporaryFailedAckIds_.addAll(other.temporaryFailedAckIds_); + } + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureAckIdsIsMutable(); + ackIds_.add(s); + break; + } // case 10 + case 18: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureInvalidAckIdsIsMutable(); + invalidAckIds_.add(s); + break; + } // case 18 + case 26: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureUnorderedAckIdsIsMutable(); + unorderedAckIds_.add(s); + break; + } // case 26 + case 34: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureTemporaryFailedAckIdsIsMutable(); + temporaryFailedAckIds_.add(s); + break; + } // case 34 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.LazyStringArrayList ackIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureAckIdsIsMutable() { + if (!ackIds_.isModifiable()) { + ackIds_ = new com.google.protobuf.LazyStringArrayList(ackIds_); + } + bitField0_ |= 0x00000001; + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the ackIds. + */ + public com.google.protobuf.ProtocolStringList getAckIdsList() { + ackIds_.makeImmutable(); + return ackIds_; + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of ackIds. + */ + public int getAckIdsCount() { + return ackIds_.size(); + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + public java.lang.String getAckIds(int index) { + return ackIds_.get(index); + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + public com.google.protobuf.ByteString getAckIdsBytes(int index) { + return ackIds_.getByteString(index); + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index to set the value at. + * @param value The ackIds to set. + * @return This builder for chaining. + */ + public Builder setAckIds(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureAckIdsIsMutable(); + ackIds_.set(index, value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The ackIds to add. + * @return This builder for chaining. + */ + public Builder addAckIds(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureAckIdsIsMutable(); + ackIds_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param values The ackIds to add. + * @return This builder for chaining. + */ + public Builder addAllAckIds(java.lang.Iterable values) { + ensureAckIdsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, ackIds_); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearAckIds() { + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + ; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes of the ackIds to add. + * @return This builder for chaining. + */ + public Builder addAckIdsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureAckIdsIsMutable(); + ackIds_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.protobuf.LazyStringArrayList invalidAckIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureInvalidAckIdsIsMutable() { + if (!invalidAckIds_.isModifiable()) { + invalidAckIds_ = new com.google.protobuf.LazyStringArrayList(invalidAckIds_); + } + bitField0_ |= 0x00000002; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the invalidAckIds. + */ + public com.google.protobuf.ProtocolStringList getInvalidAckIdsList() { + invalidAckIds_.makeImmutable(); + return invalidAckIds_; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of invalidAckIds. + */ + public int getInvalidAckIdsCount() { + return invalidAckIds_.size(); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The invalidAckIds at the given index. + */ + public java.lang.String getInvalidAckIds(int index) { + return invalidAckIds_.get(index); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the invalidAckIds at the given index. + */ + public com.google.protobuf.ByteString getInvalidAckIdsBytes(int index) { + return invalidAckIds_.getByteString(index); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index to set the value at. + * @param value The invalidAckIds to set. + * @return This builder for chaining. + */ + public Builder setInvalidAckIds(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureInvalidAckIdsIsMutable(); + invalidAckIds_.set(index, value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The invalidAckIds to add. + * @return This builder for chaining. + */ + public Builder addInvalidAckIds(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureInvalidAckIdsIsMutable(); + invalidAckIds_.add(value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param values The invalidAckIds to add. + * @return This builder for chaining. + */ + public Builder addAllInvalidAckIds(java.lang.Iterable values) { + ensureInvalidAckIdsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, invalidAckIds_); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearInvalidAckIds() { + invalidAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + ; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes of the invalidAckIds to add. + * @return This builder for chaining. + */ + public Builder addInvalidAckIdsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureInvalidAckIdsIsMutable(); + invalidAckIds_.add(value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private com.google.protobuf.LazyStringArrayList unorderedAckIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureUnorderedAckIdsIsMutable() { + if (!unorderedAckIds_.isModifiable()) { + unorderedAckIds_ = new com.google.protobuf.LazyStringArrayList(unorderedAckIds_); + } + bitField0_ |= 0x00000004; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were out of order.
+       * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the unorderedAckIds. + */ + public com.google.protobuf.ProtocolStringList getUnorderedAckIdsList() { + unorderedAckIds_.makeImmutable(); + return unorderedAckIds_; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were out of order.
+       * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of unorderedAckIds. + */ + public int getUnorderedAckIdsCount() { + return unorderedAckIds_.size(); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were out of order.
+       * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The unorderedAckIds at the given index. + */ + public java.lang.String getUnorderedAckIds(int index) { + return unorderedAckIds_.get(index); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were out of order.
+       * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the value to return. + * @return The bytes of the unorderedAckIds at the given index. + */ + public com.google.protobuf.ByteString getUnorderedAckIdsBytes(int index) { + return unorderedAckIds_.getByteString(index); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were out of order.
+       * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index to set the value at. + * @param value The unorderedAckIds to set. + * @return This builder for chaining. + */ + public Builder setUnorderedAckIds(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureUnorderedAckIdsIsMutable(); + unorderedAckIds_.set(index, value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were out of order.
+       * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The unorderedAckIds to add. + * @return This builder for chaining. + */ + public Builder addUnorderedAckIds(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureUnorderedAckIdsIsMutable(); + unorderedAckIds_.add(value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were out of order.
+       * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param values The unorderedAckIds to add. + * @return This builder for chaining. + */ + public Builder addAllUnorderedAckIds(java.lang.Iterable values) { + ensureUnorderedAckIdsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, unorderedAckIds_); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were out of order.
+       * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return This builder for chaining. + */ + public Builder clearUnorderedAckIds() { + unorderedAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + ; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were out of order.
+       * 
+ * + * repeated string unordered_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The bytes of the unorderedAckIds to add. + * @return This builder for chaining. + */ + public Builder addUnorderedAckIdsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureUnorderedAckIdsIsMutable(); + unorderedAckIds_.add(value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private com.google.protobuf.LazyStringArrayList temporaryFailedAckIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureTemporaryFailedAckIdsIsMutable() { + if (!temporaryFailedAckIds_.isModifiable()) { + temporaryFailedAckIds_ = + new com.google.protobuf.LazyStringArrayList(temporaryFailedAckIds_); + } + bitField0_ |= 0x00000008; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the temporaryFailedAckIds. + */ + public com.google.protobuf.ProtocolStringList getTemporaryFailedAckIdsList() { + temporaryFailedAckIds_.makeImmutable(); + return temporaryFailedAckIds_; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of temporaryFailedAckIds. + */ + public int getTemporaryFailedAckIdsCount() { + return temporaryFailedAckIds_.size(); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The temporaryFailedAckIds at the given index. + */ + public java.lang.String getTemporaryFailedAckIds(int index) { + return temporaryFailedAckIds_.get(index); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the value to return. + * @return The bytes of the temporaryFailedAckIds at the given index. + */ + public com.google.protobuf.ByteString getTemporaryFailedAckIdsBytes(int index) { + return temporaryFailedAckIds_.getByteString(index); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index to set the value at. + * @param value The temporaryFailedAckIds to set. + * @return This builder for chaining. + */ + public Builder setTemporaryFailedAckIds(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureTemporaryFailedAckIdsIsMutable(); + temporaryFailedAckIds_.set(index, value); + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The temporaryFailedAckIds to add. + * @return This builder for chaining. + */ + public Builder addTemporaryFailedAckIds(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureTemporaryFailedAckIdsIsMutable(); + temporaryFailedAckIds_.add(value); + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param values The temporaryFailedAckIds to add. + * @return This builder for chaining. + */ + public Builder addAllTemporaryFailedAckIds(java.lang.Iterable values) { + ensureTemporaryFailedAckIdsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, temporaryFailedAckIds_); + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return This builder for chaining. + */ + public Builder clearTemporaryFailedAckIds() { + temporaryFailedAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + ; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The bytes of the temporaryFailedAckIds to add. + * @return This builder for chaining. + */ + public Builder addTemporaryFailedAckIdsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureTemporaryFailedAckIdsIsMutable(); + temporaryFailedAckIds_.add(value); + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation) + private static final com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation(); + } + + public static com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AcknowledgeConfirmation parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface ModifyAckDeadlineConfirmationOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the ackIds. + */ + java.util.List getAckIdsList(); + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of ackIds. + */ + int getAckIdsCount(); + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + java.lang.String getAckIds(int index); + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + com.google.protobuf.ByteString getAckIdsBytes(int index); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the invalidAckIds. + */ + java.util.List getInvalidAckIdsList(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of invalidAckIds. + */ + int getInvalidAckIdsCount(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The invalidAckIds at the given index. + */ + java.lang.String getInvalidAckIds(int index); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the invalidAckIds at the given index. + */ + com.google.protobuf.ByteString getInvalidAckIdsBytes(int index); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the temporaryFailedAckIds. + */ + java.util.List getTemporaryFailedAckIdsList(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of temporaryFailedAckIds. + */ + int getTemporaryFailedAckIdsCount(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The temporaryFailedAckIds at the given index. + */ + java.lang.String getTemporaryFailedAckIds(int index); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the value to return. + * @return The bytes of the temporaryFailedAckIds at the given index. + */ + com.google.protobuf.ByteString getTemporaryFailedAckIdsBytes(int index); + } + + /** + * + * + *
+   * Acknowledgment IDs sent in one or more previous requests to modify the
+   * deadline for a specific message.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation} + */ + public static final class ModifyAckDeadlineConfirmation + extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation) + ModifyAckDeadlineConfirmationOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ModifyAckDeadlineConfirmation"); + } + + // Use ModifyAckDeadlineConfirmation.newBuilder() to construct. + private ModifyAckDeadlineConfirmation(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ModifyAckDeadlineConfirmation() { + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + invalidAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + temporaryFailedAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_ModifyAckDeadlineConfirmation_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_ModifyAckDeadlineConfirmation_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation.class, + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation.Builder + .class); + } + + public static final int ACK_IDS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList ackIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the ackIds. + */ + public com.google.protobuf.ProtocolStringList getAckIdsList() { + return ackIds_; + } + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of ackIds. + */ + public int getAckIdsCount() { + return ackIds_.size(); + } + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + public java.lang.String getAckIds(int index) { + return ackIds_.get(index); + } + + /** + * + * + *
+     * Optional. Successfully processed acknowledgment IDs.
+     * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + public com.google.protobuf.ByteString getAckIdsBytes(int index) { + return ackIds_.getByteString(index); + } + + public static final int INVALID_ACK_IDS_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList invalidAckIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the invalidAckIds. + */ + public com.google.protobuf.ProtocolStringList getInvalidAckIdsList() { + return invalidAckIds_; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of invalidAckIds. + */ + public int getInvalidAckIdsCount() { + return invalidAckIds_.size(); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The invalidAckIds at the given index. + */ + public java.lang.String getInvalidAckIds(int index) { + return invalidAckIds_.get(index); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that were malformed or whose
+     * acknowledgment deadline has expired.
+     * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the invalidAckIds at the given index. + */ + public com.google.protobuf.ByteString getInvalidAckIdsBytes(int index) { + return invalidAckIds_.getByteString(index); + } + + public static final int TEMPORARY_FAILED_ACK_IDS_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList temporaryFailedAckIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the temporaryFailedAckIds. + */ + public com.google.protobuf.ProtocolStringList getTemporaryFailedAckIdsList() { + return temporaryFailedAckIds_; + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of temporaryFailedAckIds. + */ + public int getTemporaryFailedAckIdsCount() { + return temporaryFailedAckIds_.size(); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The temporaryFailedAckIds at the given index. + */ + public java.lang.String getTemporaryFailedAckIds(int index) { + return temporaryFailedAckIds_.get(index); + } + + /** + * + * + *
+     * Optional. List of acknowledgment IDs that failed processing with
+     * temporary issues.
+     * 
+ * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the value to return. + * @return The bytes of the temporaryFailedAckIds at the given index. + */ + public com.google.protobuf.ByteString getTemporaryFailedAckIdsBytes(int index) { + return temporaryFailedAckIds_.getByteString(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < ackIds_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, ackIds_.getRaw(i)); + } + for (int i = 0; i < invalidAckIds_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, invalidAckIds_.getRaw(i)); + } + for (int i = 0; i < temporaryFailedAckIds_.size(); i++) { + com.google.protobuf.GeneratedMessage.writeString( + output, 3, temporaryFailedAckIds_.getRaw(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int i = 0; i < ackIds_.size(); i++) { + dataSize += computeStringSizeNoTag(ackIds_.getRaw(i)); + } + size += dataSize; + size += 1 * getAckIdsList().size(); + } + { + int dataSize = 0; + for (int i = 0; i < invalidAckIds_.size(); i++) { + dataSize += computeStringSizeNoTag(invalidAckIds_.getRaw(i)); + } + size += dataSize; + size += 1 * getInvalidAckIdsList().size(); + } + { + int dataSize = 0; + for (int i = 0; i < temporaryFailedAckIds_.size(); i++) { + dataSize += computeStringSizeNoTag(temporaryFailedAckIds_.getRaw(i)); + } + size += dataSize; + size += 1 * getTemporaryFailedAckIdsList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj + instanceof com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation)) { + return super.equals(obj); + } + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation other = + (com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation) obj; + + if (!getAckIdsList().equals(other.getAckIdsList())) return false; + if (!getInvalidAckIdsList().equals(other.getInvalidAckIdsList())) return false; + if (!getTemporaryFailedAckIdsList().equals(other.getTemporaryFailedAckIdsList())) + return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getAckIdsCount() > 0) { + hash = (37 * hash) + ACK_IDS_FIELD_NUMBER; + hash = (53 * hash) + getAckIdsList().hashCode(); + } + if (getInvalidAckIdsCount() > 0) { + hash = (37 * hash) + INVALID_ACK_IDS_FIELD_NUMBER; + hash = (53 * hash) + getInvalidAckIdsList().hashCode(); + } + if (getTemporaryFailedAckIdsCount() > 0) { + hash = (37 * hash) + TEMPORARY_FAILED_ACK_IDS_FIELD_NUMBER; + hash = (53 * hash) + getTemporaryFailedAckIdsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + parseFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Acknowledgment IDs sent in one or more previous requests to modify the
+     * deadline for a specific message.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation) + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmationOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_ModifyAckDeadlineConfirmation_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_ModifyAckDeadlineConfirmation_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation.class, + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation.Builder + .class); + } + + // Construct using + // com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + invalidAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + temporaryFailedAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_ModifyAckDeadlineConfirmation_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + getDefaultInstanceForType() { + return com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation build() { + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + buildPartial() { + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation result = + new com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + ackIds_.makeImmutable(); + result.ackIds_ = ackIds_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + invalidAckIds_.makeImmutable(); + result.invalidAckIds_ = invalidAckIds_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + temporaryFailedAckIds_.makeImmutable(); + result.temporaryFailedAckIds_ = temporaryFailedAckIds_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other + instanceof com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation) { + return mergeFrom( + (com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation other) { + if (other + == com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + .getDefaultInstance()) return this; + if (!other.ackIds_.isEmpty()) { + if (ackIds_.isEmpty()) { + ackIds_ = other.ackIds_; + bitField0_ |= 0x00000001; + } else { + ensureAckIdsIsMutable(); + ackIds_.addAll(other.ackIds_); + } + onChanged(); + } + if (!other.invalidAckIds_.isEmpty()) { + if (invalidAckIds_.isEmpty()) { + invalidAckIds_ = other.invalidAckIds_; + bitField0_ |= 0x00000002; + } else { + ensureInvalidAckIdsIsMutable(); + invalidAckIds_.addAll(other.invalidAckIds_); + } + onChanged(); + } + if (!other.temporaryFailedAckIds_.isEmpty()) { + if (temporaryFailedAckIds_.isEmpty()) { + temporaryFailedAckIds_ = other.temporaryFailedAckIds_; + bitField0_ |= 0x00000004; + } else { + ensureTemporaryFailedAckIdsIsMutable(); + temporaryFailedAckIds_.addAll(other.temporaryFailedAckIds_); + } + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureAckIdsIsMutable(); + ackIds_.add(s); + break; + } // case 10 + case 18: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureInvalidAckIdsIsMutable(); + invalidAckIds_.add(s); + break; + } // case 18 + case 26: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureTemporaryFailedAckIdsIsMutable(); + temporaryFailedAckIds_.add(s); + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.LazyStringArrayList ackIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureAckIdsIsMutable() { + if (!ackIds_.isModifiable()) { + ackIds_ = new com.google.protobuf.LazyStringArrayList(ackIds_); + } + bitField0_ |= 0x00000001; + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the ackIds. + */ + public com.google.protobuf.ProtocolStringList getAckIdsList() { + ackIds_.makeImmutable(); + return ackIds_; + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of ackIds. + */ + public int getAckIdsCount() { + return ackIds_.size(); + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The ackIds at the given index. + */ + public java.lang.String getAckIds(int index) { + return ackIds_.get(index); + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the ackIds at the given index. + */ + public com.google.protobuf.ByteString getAckIdsBytes(int index) { + return ackIds_.getByteString(index); + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index to set the value at. + * @param value The ackIds to set. + * @return This builder for chaining. + */ + public Builder setAckIds(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureAckIdsIsMutable(); + ackIds_.set(index, value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The ackIds to add. + * @return This builder for chaining. + */ + public Builder addAckIds(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureAckIdsIsMutable(); + ackIds_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param values The ackIds to add. + * @return This builder for chaining. + */ + public Builder addAllAckIds(java.lang.Iterable values) { + ensureAckIdsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, ackIds_); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearAckIds() { + ackIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + ; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. Successfully processed acknowledgment IDs.
+       * 
+ * + * repeated string ack_ids = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes of the ackIds to add. + * @return This builder for chaining. + */ + public Builder addAckIdsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureAckIdsIsMutable(); + ackIds_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.protobuf.LazyStringArrayList invalidAckIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureInvalidAckIdsIsMutable() { + if (!invalidAckIds_.isModifiable()) { + invalidAckIds_ = new com.google.protobuf.LazyStringArrayList(invalidAckIds_); + } + bitField0_ |= 0x00000002; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return A list containing the invalidAckIds. + */ + public com.google.protobuf.ProtocolStringList getInvalidAckIdsList() { + invalidAckIds_.makeImmutable(); + return invalidAckIds_; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The count of invalidAckIds. + */ + public int getInvalidAckIdsCount() { + return invalidAckIds_.size(); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the element to return. + * @return The invalidAckIds at the given index. + */ + public java.lang.String getInvalidAckIds(int index) { + return invalidAckIds_.get(index); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index of the value to return. + * @return The bytes of the invalidAckIds at the given index. + */ + public com.google.protobuf.ByteString getInvalidAckIdsBytes(int index) { + return invalidAckIds_.getByteString(index); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param index The index to set the value at. + * @param value The invalidAckIds to set. + * @return This builder for chaining. + */ + public Builder setInvalidAckIds(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureInvalidAckIdsIsMutable(); + invalidAckIds_.set(index, value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The invalidAckIds to add. + * @return This builder for chaining. + */ + public Builder addInvalidAckIds(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureInvalidAckIdsIsMutable(); + invalidAckIds_.add(value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param values The invalidAckIds to add. + * @return This builder for chaining. + */ + public Builder addAllInvalidAckIds(java.lang.Iterable values) { + ensureInvalidAckIdsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, invalidAckIds_); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearInvalidAckIds() { + invalidAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + ; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that were malformed or whose
+       * acknowledgment deadline has expired.
+       * 
+ * + * repeated string invalid_ack_ids = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes of the invalidAckIds to add. + * @return This builder for chaining. + */ + public Builder addInvalidAckIdsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureInvalidAckIdsIsMutable(); + invalidAckIds_.add(value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private com.google.protobuf.LazyStringArrayList temporaryFailedAckIds_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureTemporaryFailedAckIdsIsMutable() { + if (!temporaryFailedAckIds_.isModifiable()) { + temporaryFailedAckIds_ = + new com.google.protobuf.LazyStringArrayList(temporaryFailedAckIds_); + } + bitField0_ |= 0x00000004; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return A list containing the temporaryFailedAckIds. + */ + public com.google.protobuf.ProtocolStringList getTemporaryFailedAckIdsList() { + temporaryFailedAckIds_.makeImmutable(); + return temporaryFailedAckIds_; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The count of temporaryFailedAckIds. + */ + public int getTemporaryFailedAckIdsCount() { + return temporaryFailedAckIds_.size(); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the element to return. + * @return The temporaryFailedAckIds at the given index. + */ + public java.lang.String getTemporaryFailedAckIds(int index) { + return temporaryFailedAckIds_.get(index); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index of the value to return. + * @return The bytes of the temporaryFailedAckIds at the given index. + */ + public com.google.protobuf.ByteString getTemporaryFailedAckIdsBytes(int index) { + return temporaryFailedAckIds_.getByteString(index); + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param index The index to set the value at. + * @param value The temporaryFailedAckIds to set. + * @return This builder for chaining. + */ + public Builder setTemporaryFailedAckIds(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureTemporaryFailedAckIdsIsMutable(); + temporaryFailedAckIds_.set(index, value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The temporaryFailedAckIds to add. + * @return This builder for chaining. + */ + public Builder addTemporaryFailedAckIds(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureTemporaryFailedAckIdsIsMutable(); + temporaryFailedAckIds_.add(value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param values The temporaryFailedAckIds to add. + * @return This builder for chaining. + */ + public Builder addAllTemporaryFailedAckIds(java.lang.Iterable values) { + ensureTemporaryFailedAckIdsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, temporaryFailedAckIds_); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return This builder for chaining. + */ + public Builder clearTemporaryFailedAckIds() { + temporaryFailedAckIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + ; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. List of acknowledgment IDs that failed processing with
+       * temporary issues.
+       * 
+ * + * + * repeated string temporary_failed_ack_ids = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The bytes of the temporaryFailedAckIds to add. + * @return This builder for chaining. + */ + public Builder addTemporaryFailedAckIdsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureTemporaryFailedAckIdsIsMutable(); + temporaryFailedAckIds_.add(value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation) + private static final com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = + new com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation(); + } + + public static com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ModifyAckDeadlineConfirmation parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface SubscriptionPropertiesOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.StreamingPullResponse.SubscriptionProperties) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Optional. True iff exactly once delivery is enabled for this
+     * subscription.
+     * 
+ * + * bool exactly_once_delivery_enabled = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The exactlyOnceDeliveryEnabled. + */ + boolean getExactlyOnceDeliveryEnabled(); + + /** + * + * + *
+     * Optional. True iff message ordering is enabled for this subscription.
+     * 
+ * + * bool message_ordering_enabled = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The messageOrderingEnabled. + */ + boolean getMessageOrderingEnabled(); + } + + /** + * + * + *
+   * Subscription properties sent as part of the response.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.StreamingPullResponse.SubscriptionProperties} + */ + public static final class SubscriptionProperties extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.StreamingPullResponse.SubscriptionProperties) + SubscriptionPropertiesOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "SubscriptionProperties"); + } + + // Use SubscriptionProperties.newBuilder() to construct. + private SubscriptionProperties(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private SubscriptionProperties() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_SubscriptionProperties_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_SubscriptionProperties_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.class, + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.Builder.class); + } + + public static final int EXACTLY_ONCE_DELIVERY_ENABLED_FIELD_NUMBER = 1; + private boolean exactlyOnceDeliveryEnabled_ = false; + + /** + * + * + *
+     * Optional. True iff exactly once delivery is enabled for this
+     * subscription.
+     * 
+ * + * bool exactly_once_delivery_enabled = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The exactlyOnceDeliveryEnabled. + */ + @java.lang.Override + public boolean getExactlyOnceDeliveryEnabled() { + return exactlyOnceDeliveryEnabled_; + } + + public static final int MESSAGE_ORDERING_ENABLED_FIELD_NUMBER = 2; + private boolean messageOrderingEnabled_ = false; + + /** + * + * + *
+     * Optional. True iff message ordering is enabled for this subscription.
+     * 
+ * + * bool message_ordering_enabled = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The messageOrderingEnabled. + */ + @java.lang.Override + public boolean getMessageOrderingEnabled() { + return messageOrderingEnabled_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (exactlyOnceDeliveryEnabled_ != false) { + output.writeBool(1, exactlyOnceDeliveryEnabled_); + } + if (messageOrderingEnabled_ != false) { + output.writeBool(2, messageOrderingEnabled_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (exactlyOnceDeliveryEnabled_ != false) { + size += + com.google.protobuf.CodedOutputStream.computeBoolSize(1, exactlyOnceDeliveryEnabled_); + } + if (messageOrderingEnabled_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(2, messageOrderingEnabled_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties)) { + return super.equals(obj); + } + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties other = + (com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties) obj; + + if (getExactlyOnceDeliveryEnabled() != other.getExactlyOnceDeliveryEnabled()) return false; + if (getMessageOrderingEnabled() != other.getMessageOrderingEnabled()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + EXACTLY_ONCE_DELIVERY_ENABLED_FIELD_NUMBER; + hash = + (53 * hash) + com.google.protobuf.Internal.hashBoolean(getExactlyOnceDeliveryEnabled()); + hash = (37 * hash) + MESSAGE_ORDERING_ENABLED_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getMessageOrderingEnabled()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Subscription properties sent as part of the response.
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.StreamingPullResponse.SubscriptionProperties} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.StreamingPullResponse.SubscriptionProperties) + com.google.pubsub.v1.StreamingPullResponse.SubscriptionPropertiesOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_SubscriptionProperties_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_SubscriptionProperties_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.class, + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.Builder.class); + } + + // Construct using + // com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + exactlyOnceDeliveryEnabled_ = false; + messageOrderingEnabled_ = false; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_SubscriptionProperties_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties + getDefaultInstanceForType() { + return com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties + .getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties build() { + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties buildPartial() { + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties result = + new com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.exactlyOnceDeliveryEnabled_ = exactlyOnceDeliveryEnabled_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.messageOrderingEnabled_ = messageOrderingEnabled_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties) { + return mergeFrom( + (com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties other) { + if (other + == com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties + .getDefaultInstance()) return this; + if (other.getExactlyOnceDeliveryEnabled() != false) { + setExactlyOnceDeliveryEnabled(other.getExactlyOnceDeliveryEnabled()); + } + if (other.getMessageOrderingEnabled() != false) { + setMessageOrderingEnabled(other.getMessageOrderingEnabled()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + exactlyOnceDeliveryEnabled_ = input.readBool(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: + { + messageOrderingEnabled_ = input.readBool(); + bitField0_ |= 0x00000002; + break; + } // case 16 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private boolean exactlyOnceDeliveryEnabled_; + + /** + * + * + *
+       * Optional. True iff exactly once delivery is enabled for this
+       * subscription.
+       * 
+ * + * bool exactly_once_delivery_enabled = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The exactlyOnceDeliveryEnabled. + */ + @java.lang.Override + public boolean getExactlyOnceDeliveryEnabled() { + return exactlyOnceDeliveryEnabled_; + } + + /** + * + * + *
+       * Optional. True iff exactly once delivery is enabled for this
+       * subscription.
+       * 
+ * + * bool exactly_once_delivery_enabled = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The exactlyOnceDeliveryEnabled to set. + * @return This builder for chaining. + */ + public Builder setExactlyOnceDeliveryEnabled(boolean value) { + + exactlyOnceDeliveryEnabled_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. True iff exactly once delivery is enabled for this
+       * subscription.
+       * 
+ * + * bool exactly_once_delivery_enabled = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return This builder for chaining. + */ + public Builder clearExactlyOnceDeliveryEnabled() { + bitField0_ = (bitField0_ & ~0x00000001); + exactlyOnceDeliveryEnabled_ = false; + onChanged(); + return this; + } + + private boolean messageOrderingEnabled_; + + /** + * + * + *
+       * Optional. True iff message ordering is enabled for this subscription.
+       * 
+ * + * bool message_ordering_enabled = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The messageOrderingEnabled. + */ + @java.lang.Override + public boolean getMessageOrderingEnabled() { + return messageOrderingEnabled_; + } + + /** + * + * + *
+       * Optional. True iff message ordering is enabled for this subscription.
+       * 
+ * + * bool message_ordering_enabled = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The messageOrderingEnabled to set. + * @return This builder for chaining. + */ + public Builder setMessageOrderingEnabled(boolean value) { + + messageOrderingEnabled_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. True iff message ordering is enabled for this subscription.
+       * 
+ * + * bool message_ordering_enabled = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearMessageOrderingEnabled() { + bitField0_ = (bitField0_ & ~0x00000002); + messageOrderingEnabled_ = false; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.StreamingPullResponse.SubscriptionProperties) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.StreamingPullResponse.SubscriptionProperties) + private static final com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties(); + } + + public static com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SubscriptionProperties parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int bitField0_; + public static final int RECEIVED_MESSAGES_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private java.util.List receivedMessages_; + + /** + * + * + *
+   * Optional. Received Pub/Sub messages.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List getReceivedMessagesList() { + return receivedMessages_; + } + + /** + * + * + *
+   * Optional. Received Pub/Sub messages.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List + getReceivedMessagesOrBuilderList() { + return receivedMessages_; + } + + /** + * + * + *
+   * Optional. Received Pub/Sub messages.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public int getReceivedMessagesCount() { + return receivedMessages_.size(); + } + + /** + * + * + *
+   * Optional. Received Pub/Sub messages.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.ReceivedMessage getReceivedMessages(int index) { + return receivedMessages_.get(index); + } + + /** + * + * + *
+   * Optional. Received Pub/Sub messages.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.ReceivedMessageOrBuilder getReceivedMessagesOrBuilder(int index) { + return receivedMessages_.get(index); + } + + public static final int ACKNOWLEDGE_CONFIRMATION_FIELD_NUMBER = 5; + private com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + acknowledgeConfirmation_; + + /** + * + * + *
+   * Optional. This field will only be set if `enable_exactly_once_delivery` is
+   * set to `true` and is not guaranteed to be populated.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the acknowledgeConfirmation field is set. + */ + @java.lang.Override + public boolean hasAcknowledgeConfirmation() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Optional. This field will only be set if `enable_exactly_once_delivery` is
+   * set to `true` and is not guaranteed to be populated.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The acknowledgeConfirmation. + */ + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + getAcknowledgeConfirmation() { + return acknowledgeConfirmation_ == null + ? com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation.getDefaultInstance() + : acknowledgeConfirmation_; + } + + /** + * + * + *
+   * Optional. This field will only be set if `enable_exactly_once_delivery` is
+   * set to `true` and is not guaranteed to be populated.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmationOrBuilder + getAcknowledgeConfirmationOrBuilder() { + return acknowledgeConfirmation_ == null + ? com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation.getDefaultInstance() + : acknowledgeConfirmation_; + } + + public static final int MODIFY_ACK_DEADLINE_CONFIRMATION_FIELD_NUMBER = 3; + private com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + modifyAckDeadlineConfirmation_; + + /** + * + * + *
+   * Optional. This field will only be set if `enable_exactly_once_delivery` is
+   * set to `true` and is not guaranteed to be populated.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the modifyAckDeadlineConfirmation field is set. + */ + @java.lang.Override + public boolean hasModifyAckDeadlineConfirmation() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+   * Optional. This field will only be set if `enable_exactly_once_delivery` is
+   * set to `true` and is not guaranteed to be populated.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The modifyAckDeadlineConfirmation. + */ + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + getModifyAckDeadlineConfirmation() { + return modifyAckDeadlineConfirmation_ == null + ? com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + .getDefaultInstance() + : modifyAckDeadlineConfirmation_; + } + + /** + * + * + *
+   * Optional. This field will only be set if `enable_exactly_once_delivery` is
+   * set to `true` and is not guaranteed to be populated.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmationOrBuilder + getModifyAckDeadlineConfirmationOrBuilder() { + return modifyAckDeadlineConfirmation_ == null + ? com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + .getDefaultInstance() + : modifyAckDeadlineConfirmation_; + } + + public static final int SUBSCRIPTION_PROPERTIES_FIELD_NUMBER = 4; + private com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscriptionProperties_; + + /** + * + * + *
+   * Optional. Properties associated with this subscription.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the subscriptionProperties field is set. + */ + @java.lang.Override + public boolean hasSubscriptionProperties() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
+   * Optional. Properties associated with this subscription.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The subscriptionProperties. + */ + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties + getSubscriptionProperties() { + return subscriptionProperties_ == null + ? com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.getDefaultInstance() + : subscriptionProperties_; + } + + /** + * + * + *
+   * Optional. Properties associated with this subscription.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse.SubscriptionPropertiesOrBuilder + getSubscriptionPropertiesOrBuilder() { + return subscriptionProperties_ == null + ? com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.getDefaultInstance() + : subscriptionProperties_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < receivedMessages_.size(); i++) { + output.writeMessage(1, receivedMessages_.get(i)); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(3, getModifyAckDeadlineConfirmation()); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(4, getSubscriptionProperties()); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(5, getAcknowledgeConfirmation()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < receivedMessages_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, receivedMessages_.get(i)); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 3, getModifyAckDeadlineConfirmation()); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize(4, getSubscriptionProperties()); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize(5, getAcknowledgeConfirmation()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.StreamingPullResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.StreamingPullResponse other = + (com.google.pubsub.v1.StreamingPullResponse) obj; + + if (!getReceivedMessagesList().equals(other.getReceivedMessagesList())) return false; + if (hasAcknowledgeConfirmation() != other.hasAcknowledgeConfirmation()) return false; + if (hasAcknowledgeConfirmation()) { + if (!getAcknowledgeConfirmation().equals(other.getAcknowledgeConfirmation())) return false; + } + if (hasModifyAckDeadlineConfirmation() != other.hasModifyAckDeadlineConfirmation()) + return false; + if (hasModifyAckDeadlineConfirmation()) { + if (!getModifyAckDeadlineConfirmation().equals(other.getModifyAckDeadlineConfirmation())) + return false; + } + if (hasSubscriptionProperties() != other.hasSubscriptionProperties()) return false; + if (hasSubscriptionProperties()) { + if (!getSubscriptionProperties().equals(other.getSubscriptionProperties())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getReceivedMessagesCount() > 0) { + hash = (37 * hash) + RECEIVED_MESSAGES_FIELD_NUMBER; + hash = (53 * hash) + getReceivedMessagesList().hashCode(); + } + if (hasAcknowledgeConfirmation()) { + hash = (37 * hash) + ACKNOWLEDGE_CONFIRMATION_FIELD_NUMBER; + hash = (53 * hash) + getAcknowledgeConfirmation().hashCode(); + } + if (hasModifyAckDeadlineConfirmation()) { + hash = (37 * hash) + MODIFY_ACK_DEADLINE_CONFIRMATION_FIELD_NUMBER; + hash = (53 * hash) + getModifyAckDeadlineConfirmation().hashCode(); + } + if (hasSubscriptionProperties()) { + hash = (37 * hash) + SUBSCRIPTION_PROPERTIES_FIELD_NUMBER; + hash = (53 * hash) + getSubscriptionProperties().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.StreamingPullResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.StreamingPullResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.StreamingPullResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.StreamingPullResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.StreamingPullResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the `StreamingPull` method. This response is used to stream
+   * messages from the server to the client.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.StreamingPullResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.StreamingPullResponse) + com.google.pubsub.v1.StreamingPullResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.StreamingPullResponse.class, + com.google.pubsub.v1.StreamingPullResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.StreamingPullResponse.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetReceivedMessagesFieldBuilder(); + internalGetAcknowledgeConfirmationFieldBuilder(); + internalGetModifyAckDeadlineConfirmationFieldBuilder(); + internalGetSubscriptionPropertiesFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (receivedMessagesBuilder_ == null) { + receivedMessages_ = java.util.Collections.emptyList(); + } else { + receivedMessages_ = null; + receivedMessagesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + acknowledgeConfirmation_ = null; + if (acknowledgeConfirmationBuilder_ != null) { + acknowledgeConfirmationBuilder_.dispose(); + acknowledgeConfirmationBuilder_ = null; + } + modifyAckDeadlineConfirmation_ = null; + if (modifyAckDeadlineConfirmationBuilder_ != null) { + modifyAckDeadlineConfirmationBuilder_.dispose(); + modifyAckDeadlineConfirmationBuilder_ = null; + } + subscriptionProperties_ = null; + if (subscriptionPropertiesBuilder_ != null) { + subscriptionPropertiesBuilder_.dispose(); + subscriptionPropertiesBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_StreamingPullResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.StreamingPullResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse build() { + com.google.pubsub.v1.StreamingPullResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse buildPartial() { + com.google.pubsub.v1.StreamingPullResponse result = + new com.google.pubsub.v1.StreamingPullResponse(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.pubsub.v1.StreamingPullResponse result) { + if (receivedMessagesBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + receivedMessages_ = java.util.Collections.unmodifiableList(receivedMessages_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.receivedMessages_ = receivedMessages_; + } else { + result.receivedMessages_ = receivedMessagesBuilder_.build(); + } + } + + private void buildPartial0(com.google.pubsub.v1.StreamingPullResponse result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.acknowledgeConfirmation_ = + acknowledgeConfirmationBuilder_ == null + ? acknowledgeConfirmation_ + : acknowledgeConfirmationBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.modifyAckDeadlineConfirmation_ = + modifyAckDeadlineConfirmationBuilder_ == null + ? modifyAckDeadlineConfirmation_ + : modifyAckDeadlineConfirmationBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.subscriptionProperties_ = + subscriptionPropertiesBuilder_ == null + ? subscriptionProperties_ + : subscriptionPropertiesBuilder_.build(); + to_bitField0_ |= 0x00000004; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.StreamingPullResponse) { + return mergeFrom((com.google.pubsub.v1.StreamingPullResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.StreamingPullResponse other) { + if (other == com.google.pubsub.v1.StreamingPullResponse.getDefaultInstance()) return this; + if (receivedMessagesBuilder_ == null) { + if (!other.receivedMessages_.isEmpty()) { + if (receivedMessages_.isEmpty()) { + receivedMessages_ = other.receivedMessages_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureReceivedMessagesIsMutable(); + receivedMessages_.addAll(other.receivedMessages_); + } + onChanged(); + } + } else { + if (!other.receivedMessages_.isEmpty()) { + if (receivedMessagesBuilder_.isEmpty()) { + receivedMessagesBuilder_.dispose(); + receivedMessagesBuilder_ = null; + receivedMessages_ = other.receivedMessages_; + bitField0_ = (bitField0_ & ~0x00000001); + receivedMessagesBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetReceivedMessagesFieldBuilder() + : null; + } else { + receivedMessagesBuilder_.addAllMessages(other.receivedMessages_); + } + } + } + if (other.hasAcknowledgeConfirmation()) { + mergeAcknowledgeConfirmation(other.getAcknowledgeConfirmation()); + } + if (other.hasModifyAckDeadlineConfirmation()) { + mergeModifyAckDeadlineConfirmation(other.getModifyAckDeadlineConfirmation()); + } + if (other.hasSubscriptionProperties()) { + mergeSubscriptionProperties(other.getSubscriptionProperties()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + com.google.pubsub.v1.ReceivedMessage m = + input.readMessage( + com.google.pubsub.v1.ReceivedMessage.parser(), extensionRegistry); + if (receivedMessagesBuilder_ == null) { + ensureReceivedMessagesIsMutable(); + receivedMessages_.add(m); + } else { + receivedMessagesBuilder_.addMessage(m); + } + break; + } // case 10 + case 26: + { + input.readMessage( + internalGetModifyAckDeadlineConfirmationFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + input.readMessage( + internalGetSubscriptionPropertiesFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: + { + input.readMessage( + internalGetAcknowledgeConfirmationFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 42 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.util.List receivedMessages_ = + java.util.Collections.emptyList(); + + private void ensureReceivedMessagesIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + receivedMessages_ = + new java.util.ArrayList(receivedMessages_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.ReceivedMessage, + com.google.pubsub.v1.ReceivedMessage.Builder, + com.google.pubsub.v1.ReceivedMessageOrBuilder> + receivedMessagesBuilder_; + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List getReceivedMessagesList() { + if (receivedMessagesBuilder_ == null) { + return java.util.Collections.unmodifiableList(receivedMessages_); + } else { + return receivedMessagesBuilder_.getMessageList(); + } + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public int getReceivedMessagesCount() { + if (receivedMessagesBuilder_ == null) { + return receivedMessages_.size(); + } else { + return receivedMessagesBuilder_.getCount(); + } + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.ReceivedMessage getReceivedMessages(int index) { + if (receivedMessagesBuilder_ == null) { + return receivedMessages_.get(index); + } else { + return receivedMessagesBuilder_.getMessage(index); + } + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setReceivedMessages(int index, com.google.pubsub.v1.ReceivedMessage value) { + if (receivedMessagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureReceivedMessagesIsMutable(); + receivedMessages_.set(index, value); + onChanged(); + } else { + receivedMessagesBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setReceivedMessages( + int index, com.google.pubsub.v1.ReceivedMessage.Builder builderForValue) { + if (receivedMessagesBuilder_ == null) { + ensureReceivedMessagesIsMutable(); + receivedMessages_.set(index, builderForValue.build()); + onChanged(); + } else { + receivedMessagesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addReceivedMessages(com.google.pubsub.v1.ReceivedMessage value) { + if (receivedMessagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureReceivedMessagesIsMutable(); + receivedMessages_.add(value); + onChanged(); + } else { + receivedMessagesBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addReceivedMessages(int index, com.google.pubsub.v1.ReceivedMessage value) { + if (receivedMessagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureReceivedMessagesIsMutable(); + receivedMessages_.add(index, value); + onChanged(); + } else { + receivedMessagesBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addReceivedMessages( + com.google.pubsub.v1.ReceivedMessage.Builder builderForValue) { + if (receivedMessagesBuilder_ == null) { + ensureReceivedMessagesIsMutable(); + receivedMessages_.add(builderForValue.build()); + onChanged(); + } else { + receivedMessagesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addReceivedMessages( + int index, com.google.pubsub.v1.ReceivedMessage.Builder builderForValue) { + if (receivedMessagesBuilder_ == null) { + ensureReceivedMessagesIsMutable(); + receivedMessages_.add(index, builderForValue.build()); + onChanged(); + } else { + receivedMessagesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addAllReceivedMessages( + java.lang.Iterable values) { + if (receivedMessagesBuilder_ == null) { + ensureReceivedMessagesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, receivedMessages_); + onChanged(); + } else { + receivedMessagesBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearReceivedMessages() { + if (receivedMessagesBuilder_ == null) { + receivedMessages_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + receivedMessagesBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeReceivedMessages(int index) { + if (receivedMessagesBuilder_ == null) { + ensureReceivedMessagesIsMutable(); + receivedMessages_.remove(index); + onChanged(); + } else { + receivedMessagesBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.ReceivedMessage.Builder getReceivedMessagesBuilder(int index) { + return internalGetReceivedMessagesFieldBuilder().getBuilder(index); + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.ReceivedMessageOrBuilder getReceivedMessagesOrBuilder(int index) { + if (receivedMessagesBuilder_ == null) { + return receivedMessages_.get(index); + } else { + return receivedMessagesBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getReceivedMessagesOrBuilderList() { + if (receivedMessagesBuilder_ != null) { + return receivedMessagesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(receivedMessages_); + } + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.ReceivedMessage.Builder addReceivedMessagesBuilder() { + return internalGetReceivedMessagesFieldBuilder() + .addBuilder(com.google.pubsub.v1.ReceivedMessage.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.ReceivedMessage.Builder addReceivedMessagesBuilder(int index) { + return internalGetReceivedMessagesFieldBuilder() + .addBuilder(index, com.google.pubsub.v1.ReceivedMessage.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. Received Pub/Sub messages.
+     * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getReceivedMessagesBuilderList() { + return internalGetReceivedMessagesFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.ReceivedMessage, + com.google.pubsub.v1.ReceivedMessage.Builder, + com.google.pubsub.v1.ReceivedMessageOrBuilder> + internalGetReceivedMessagesFieldBuilder() { + if (receivedMessagesBuilder_ == null) { + receivedMessagesBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.ReceivedMessage, + com.google.pubsub.v1.ReceivedMessage.Builder, + com.google.pubsub.v1.ReceivedMessageOrBuilder>( + receivedMessages_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + receivedMessages_ = null; + } + return receivedMessagesBuilder_; + } + + private com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + acknowledgeConfirmation_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation, + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation.Builder, + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmationOrBuilder> + acknowledgeConfirmationBuilder_; + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the acknowledgeConfirmation field is set. + */ + public boolean hasAcknowledgeConfirmation() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The acknowledgeConfirmation. + */ + public com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + getAcknowledgeConfirmation() { + if (acknowledgeConfirmationBuilder_ == null) { + return acknowledgeConfirmation_ == null + ? com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + .getDefaultInstance() + : acknowledgeConfirmation_; + } else { + return acknowledgeConfirmationBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAcknowledgeConfirmation( + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation value) { + if (acknowledgeConfirmationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + acknowledgeConfirmation_ = value; + } else { + acknowledgeConfirmationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setAcknowledgeConfirmation( + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation.Builder + builderForValue) { + if (acknowledgeConfirmationBuilder_ == null) { + acknowledgeConfirmation_ = builderForValue.build(); + } else { + acknowledgeConfirmationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeAcknowledgeConfirmation( + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation value) { + if (acknowledgeConfirmationBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && acknowledgeConfirmation_ != null + && acknowledgeConfirmation_ + != com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + .getDefaultInstance()) { + getAcknowledgeConfirmationBuilder().mergeFrom(value); + } else { + acknowledgeConfirmation_ = value; + } + } else { + acknowledgeConfirmationBuilder_.mergeFrom(value); + } + if (acknowledgeConfirmation_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearAcknowledgeConfirmation() { + bitField0_ = (bitField0_ & ~0x00000002); + acknowledgeConfirmation_ = null; + if (acknowledgeConfirmationBuilder_ != null) { + acknowledgeConfirmationBuilder_.dispose(); + acknowledgeConfirmationBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation.Builder + getAcknowledgeConfirmationBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetAcknowledgeConfirmationFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmationOrBuilder + getAcknowledgeConfirmationOrBuilder() { + if (acknowledgeConfirmationBuilder_ != null) { + return acknowledgeConfirmationBuilder_.getMessageOrBuilder(); + } else { + return acknowledgeConfirmation_ == null + ? com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation + .getDefaultInstance() + : acknowledgeConfirmation_; + } + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation, + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation.Builder, + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmationOrBuilder> + internalGetAcknowledgeConfirmationFieldBuilder() { + if (acknowledgeConfirmationBuilder_ == null) { + acknowledgeConfirmationBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation, + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation.Builder, + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmationOrBuilder>( + getAcknowledgeConfirmation(), getParentForChildren(), isClean()); + acknowledgeConfirmation_ = null; + } + return acknowledgeConfirmationBuilder_; + } + + private com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + modifyAckDeadlineConfirmation_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation, + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation.Builder, + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmationOrBuilder> + modifyAckDeadlineConfirmationBuilder_; + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the modifyAckDeadlineConfirmation field is set. + */ + public boolean hasModifyAckDeadlineConfirmation() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The modifyAckDeadlineConfirmation. + */ + public com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + getModifyAckDeadlineConfirmation() { + if (modifyAckDeadlineConfirmationBuilder_ == null) { + return modifyAckDeadlineConfirmation_ == null + ? com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + .getDefaultInstance() + : modifyAckDeadlineConfirmation_; + } else { + return modifyAckDeadlineConfirmationBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setModifyAckDeadlineConfirmation( + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation value) { + if (modifyAckDeadlineConfirmationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + modifyAckDeadlineConfirmation_ = value; + } else { + modifyAckDeadlineConfirmationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setModifyAckDeadlineConfirmation( + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation.Builder + builderForValue) { + if (modifyAckDeadlineConfirmationBuilder_ == null) { + modifyAckDeadlineConfirmation_ = builderForValue.build(); + } else { + modifyAckDeadlineConfirmationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeModifyAckDeadlineConfirmation( + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation value) { + if (modifyAckDeadlineConfirmationBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0) + && modifyAckDeadlineConfirmation_ != null + && modifyAckDeadlineConfirmation_ + != com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + .getDefaultInstance()) { + getModifyAckDeadlineConfirmationBuilder().mergeFrom(value); + } else { + modifyAckDeadlineConfirmation_ = value; + } + } else { + modifyAckDeadlineConfirmationBuilder_.mergeFrom(value); + } + if (modifyAckDeadlineConfirmation_ != null) { + bitField0_ |= 0x00000004; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearModifyAckDeadlineConfirmation() { + bitField0_ = (bitField0_ & ~0x00000004); + modifyAckDeadlineConfirmation_ = null; + if (modifyAckDeadlineConfirmationBuilder_ != null) { + modifyAckDeadlineConfirmationBuilder_.dispose(); + modifyAckDeadlineConfirmationBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation.Builder + getModifyAckDeadlineConfirmationBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return internalGetModifyAckDeadlineConfirmationFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmationOrBuilder + getModifyAckDeadlineConfirmationOrBuilder() { + if (modifyAckDeadlineConfirmationBuilder_ != null) { + return modifyAckDeadlineConfirmationBuilder_.getMessageOrBuilder(); + } else { + return modifyAckDeadlineConfirmation_ == null + ? com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + .getDefaultInstance() + : modifyAckDeadlineConfirmation_; + } + } + + /** + * + * + *
+     * Optional. This field will only be set if `enable_exactly_once_delivery` is
+     * set to `true` and is not guaranteed to be populated.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation, + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation.Builder, + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmationOrBuilder> + internalGetModifyAckDeadlineConfirmationFieldBuilder() { + if (modifyAckDeadlineConfirmationBuilder_ == null) { + modifyAckDeadlineConfirmationBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation, + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation.Builder, + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmationOrBuilder>( + getModifyAckDeadlineConfirmation(), getParentForChildren(), isClean()); + modifyAckDeadlineConfirmation_ = null; + } + return modifyAckDeadlineConfirmationBuilder_; + } + + private com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties + subscriptionProperties_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties, + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.Builder, + com.google.pubsub.v1.StreamingPullResponse.SubscriptionPropertiesOrBuilder> + subscriptionPropertiesBuilder_; + + /** + * + * + *
+     * Optional. Properties associated with this subscription.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the subscriptionProperties field is set. + */ + public boolean hasSubscriptionProperties() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
+     * Optional. Properties associated with this subscription.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The subscriptionProperties. + */ + public com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties + getSubscriptionProperties() { + if (subscriptionPropertiesBuilder_ == null) { + return subscriptionProperties_ == null + ? com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.getDefaultInstance() + : subscriptionProperties_; + } else { + return subscriptionPropertiesBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. Properties associated with this subscription.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSubscriptionProperties( + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties value) { + if (subscriptionPropertiesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + subscriptionProperties_ = value; + } else { + subscriptionPropertiesBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Properties associated with this subscription.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSubscriptionProperties( + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.Builder builderForValue) { + if (subscriptionPropertiesBuilder_ == null) { + subscriptionProperties_ = builderForValue.build(); + } else { + subscriptionPropertiesBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Properties associated with this subscription.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeSubscriptionProperties( + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties value) { + if (subscriptionPropertiesBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) + && subscriptionProperties_ != null + && subscriptionProperties_ + != com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties + .getDefaultInstance()) { + getSubscriptionPropertiesBuilder().mergeFrom(value); + } else { + subscriptionProperties_ = value; + } + } else { + subscriptionPropertiesBuilder_.mergeFrom(value); + } + if (subscriptionProperties_ != null) { + bitField0_ |= 0x00000008; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. Properties associated with this subscription.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearSubscriptionProperties() { + bitField0_ = (bitField0_ & ~0x00000008); + subscriptionProperties_ = null; + if (subscriptionPropertiesBuilder_ != null) { + subscriptionPropertiesBuilder_.dispose(); + subscriptionPropertiesBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Properties associated with this subscription.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.Builder + getSubscriptionPropertiesBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return internalGetSubscriptionPropertiesFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Properties associated with this subscription.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.StreamingPullResponse.SubscriptionPropertiesOrBuilder + getSubscriptionPropertiesOrBuilder() { + if (subscriptionPropertiesBuilder_ != null) { + return subscriptionPropertiesBuilder_.getMessageOrBuilder(); + } else { + return subscriptionProperties_ == null + ? com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.getDefaultInstance() + : subscriptionProperties_; + } + } + + /** + * + * + *
+     * Optional. Properties associated with this subscription.
+     * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties, + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.Builder, + com.google.pubsub.v1.StreamingPullResponse.SubscriptionPropertiesOrBuilder> + internalGetSubscriptionPropertiesFieldBuilder() { + if (subscriptionPropertiesBuilder_ == null) { + subscriptionPropertiesBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties, + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties.Builder, + com.google.pubsub.v1.StreamingPullResponse.SubscriptionPropertiesOrBuilder>( + getSubscriptionProperties(), getParentForChildren(), isClean()); + subscriptionProperties_ = null; + } + return subscriptionPropertiesBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.StreamingPullResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.StreamingPullResponse) + private static final com.google.pubsub.v1.StreamingPullResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.StreamingPullResponse(); + } + + public static com.google.pubsub.v1.StreamingPullResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public StreamingPullResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.StreamingPullResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/StreamingPullResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/StreamingPullResponseOrBuilder.java new file mode 100644 index 000000000000..6705ad05d1e8 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/StreamingPullResponseOrBuilder.java @@ -0,0 +1,233 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface StreamingPullResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.StreamingPullResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. Received Pub/Sub messages.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List getReceivedMessagesList(); + + /** + * + * + *
+   * Optional. Received Pub/Sub messages.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.ReceivedMessage getReceivedMessages(int index); + + /** + * + * + *
+   * Optional. Received Pub/Sub messages.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getReceivedMessagesCount(); + + /** + * + * + *
+   * Optional. Received Pub/Sub messages.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List + getReceivedMessagesOrBuilderList(); + + /** + * + * + *
+   * Optional. Received Pub/Sub messages.
+   * 
+ * + * + * repeated .google.pubsub.v1.ReceivedMessage received_messages = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.ReceivedMessageOrBuilder getReceivedMessagesOrBuilder(int index); + + /** + * + * + *
+   * Optional. This field will only be set if `enable_exactly_once_delivery` is
+   * set to `true` and is not guaranteed to be populated.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the acknowledgeConfirmation field is set. + */ + boolean hasAcknowledgeConfirmation(); + + /** + * + * + *
+   * Optional. This field will only be set if `enable_exactly_once_delivery` is
+   * set to `true` and is not guaranteed to be populated.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The acknowledgeConfirmation. + */ + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation getAcknowledgeConfirmation(); + + /** + * + * + *
+   * Optional. This field will only be set if `enable_exactly_once_delivery` is
+   * set to `true` and is not guaranteed to be populated.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmation acknowledge_confirmation = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.StreamingPullResponse.AcknowledgeConfirmationOrBuilder + getAcknowledgeConfirmationOrBuilder(); + + /** + * + * + *
+   * Optional. This field will only be set if `enable_exactly_once_delivery` is
+   * set to `true` and is not guaranteed to be populated.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the modifyAckDeadlineConfirmation field is set. + */ + boolean hasModifyAckDeadlineConfirmation(); + + /** + * + * + *
+   * Optional. This field will only be set if `enable_exactly_once_delivery` is
+   * set to `true` and is not guaranteed to be populated.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The modifyAckDeadlineConfirmation. + */ + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation + getModifyAckDeadlineConfirmation(); + + /** + * + * + *
+   * Optional. This field will only be set if `enable_exactly_once_delivery` is
+   * set to `true` and is not guaranteed to be populated.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.StreamingPullResponse.ModifyAckDeadlineConfirmationOrBuilder + getModifyAckDeadlineConfirmationOrBuilder(); + + /** + * + * + *
+   * Optional. Properties associated with this subscription.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the subscriptionProperties field is set. + */ + boolean hasSubscriptionProperties(); + + /** + * + * + *
+   * Optional. Properties associated with this subscription.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The subscriptionProperties. + */ + com.google.pubsub.v1.StreamingPullResponse.SubscriptionProperties getSubscriptionProperties(); + + /** + * + * + *
+   * Optional. Properties associated with this subscription.
+   * 
+ * + * + * .google.pubsub.v1.StreamingPullResponse.SubscriptionProperties subscription_properties = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.StreamingPullResponse.SubscriptionPropertiesOrBuilder + getSubscriptionPropertiesOrBuilder(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Subscription.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Subscription.java new file mode 100644 index 000000000000..ab7ef789dfd4 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Subscription.java @@ -0,0 +1,7805 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * A subscription resource. If none of `push_config`, `bigquery_config`, or
+ * `cloud_storage_config` is set, then the subscriber will pull and ack messages
+ * using API methods. At most one of these fields may be set.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.Subscription} + */ +@com.google.protobuf.Generated +public final class Subscription extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.Subscription) + SubscriptionOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Subscription"); + } + + // Use Subscription.newBuilder() to construct. + private Subscription(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Subscription() { + name_ = ""; + topic_ = ""; + filter_ = ""; + state_ = 0; + messageTransforms_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Subscription_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 9: + return internalGetLabels(); + case 26: + return internalGetTags(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Subscription_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.Subscription.class, + com.google.pubsub.v1.Subscription.Builder.class); + } + + /** + * + * + *
+   * Possible states for a subscription.
+   * 
+ * + * Protobuf enum {@code google.pubsub.v1.Subscription.State} + */ + public enum State implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+     * Default value. This value is unused.
+     * 
+ * + * STATE_UNSPECIFIED = 0; + */ + STATE_UNSPECIFIED(0), + /** + * + * + *
+     * The subscription can actively receive messages
+     * 
+ * + * ACTIVE = 1; + */ + ACTIVE(1), + /** + * + * + *
+     * The subscription cannot receive messages because of an error with the
+     * resource to which it pushes messages. See the more detailed error state
+     * in the corresponding configuration.
+     * 
+ * + * RESOURCE_ERROR = 2; + */ + RESOURCE_ERROR(2), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + + /** + * + * + *
+     * Default value. This value is unused.
+     * 
+ * + * STATE_UNSPECIFIED = 0; + */ + public static final int STATE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+     * The subscription can actively receive messages
+     * 
+ * + * ACTIVE = 1; + */ + public static final int ACTIVE_VALUE = 1; + + /** + * + * + *
+     * The subscription cannot receive messages because of an error with the
+     * resource to which it pushes messages. See the more detailed error state
+     * in the corresponding configuration.
+     * 
+ * + * RESOURCE_ERROR = 2; + */ + public static final int RESOURCE_ERROR_VALUE = 2; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static State valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static State forNumber(int value) { + switch (value) { + case 0: + return STATE_UNSPECIFIED; + case 1: + return ACTIVE; + case 2: + return RESOURCE_ERROR; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public State findValueByNumber(int number) { + return State.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.Subscription.getDescriptor().getEnumTypes().get(0); + } + + private static final State[] VALUES = values(); + + public static State valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private State(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.Subscription.State) + } + + public interface AnalyticsHubSubscriptionInfoOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+     * Optional. The name of the associated Analytics Hub listing resource.
+     * Pattern:
+     * "projects/{project}/locations/{location}/dataExchanges/{data_exchange}/listings/{listing}"
+     * 
+ * + * + * string listing = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The listing. + */ + java.lang.String getListing(); + + /** + * + * + *
+     * Optional. The name of the associated Analytics Hub listing resource.
+     * Pattern:
+     * "projects/{project}/locations/{location}/dataExchanges/{data_exchange}/listings/{listing}"
+     * 
+ * + * + * string listing = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for listing. + */ + com.google.protobuf.ByteString getListingBytes(); + + /** + * + * + *
+     * Optional. The name of the associated Analytics Hub subscription resource.
+     * Pattern:
+     * "projects/{project}/locations/{location}/subscriptions/{subscription}"
+     * 
+ * + * string subscription = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The subscription. + */ + java.lang.String getSubscription(); + + /** + * + * + *
+     * Optional. The name of the associated Analytics Hub subscription resource.
+     * Pattern:
+     * "projects/{project}/locations/{location}/subscriptions/{subscription}"
+     * 
+ * + * string subscription = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for subscription. + */ + com.google.protobuf.ByteString getSubscriptionBytes(); + } + + /** + * + * + *
+   * Information about an associated [Analytics Hub
+   * subscription](https://cloud.google.com/bigquery/docs/analytics-hub-manage-subscriptions).
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo} + */ + public static final class AnalyticsHubSubscriptionInfo + extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo) + AnalyticsHubSubscriptionInfoOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "AnalyticsHubSubscriptionInfo"); + } + + // Use AnalyticsHubSubscriptionInfo.newBuilder() to construct. + private AnalyticsHubSubscriptionInfo(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private AnalyticsHubSubscriptionInfo() { + listing_ = ""; + subscription_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Subscription_AnalyticsHubSubscriptionInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Subscription_AnalyticsHubSubscriptionInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.class, + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.Builder.class); + } + + public static final int LISTING_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object listing_ = ""; + + /** + * + * + *
+     * Optional. The name of the associated Analytics Hub listing resource.
+     * Pattern:
+     * "projects/{project}/locations/{location}/dataExchanges/{data_exchange}/listings/{listing}"
+     * 
+ * + * + * string listing = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The listing. + */ + @java.lang.Override + public java.lang.String getListing() { + java.lang.Object ref = listing_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + listing_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The name of the associated Analytics Hub listing resource.
+     * Pattern:
+     * "projects/{project}/locations/{location}/dataExchanges/{data_exchange}/listings/{listing}"
+     * 
+ * + * + * string listing = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for listing. + */ + @java.lang.Override + public com.google.protobuf.ByteString getListingBytes() { + java.lang.Object ref = listing_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + listing_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SUBSCRIPTION_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object subscription_ = ""; + + /** + * + * + *
+     * Optional. The name of the associated Analytics Hub subscription resource.
+     * Pattern:
+     * "projects/{project}/locations/{location}/subscriptions/{subscription}"
+     * 
+ * + * string subscription = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The subscription. + */ + @java.lang.Override + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } + } + + /** + * + * + *
+     * Optional. The name of the associated Analytics Hub subscription resource.
+     * Pattern:
+     * "projects/{project}/locations/{location}/subscriptions/{subscription}"
+     * 
+ * + * string subscription = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for subscription. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(listing_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, listing_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, subscription_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(listing_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, listing_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(subscription_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, subscription_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo)) { + return super.equals(obj); + } + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo other = + (com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo) obj; + + if (!getListing().equals(other.getListing())) return false; + if (!getSubscription().equals(other.getSubscription())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + LISTING_FIELD_NUMBER; + hash = (53 * hash) + getListing().hashCode(); + hash = (37 * hash) + SUBSCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getSubscription().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * Information about an associated [Analytics Hub
+     * subscription](https://cloud.google.com/bigquery/docs/analytics-hub-manage-subscriptions).
+     * 
+ * + * Protobuf type {@code google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo) + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfoOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Subscription_AnalyticsHubSubscriptionInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Subscription_AnalyticsHubSubscriptionInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.class, + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.Builder.class); + } + + // Construct using com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + listing_ = ""; + subscription_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Subscription_AnalyticsHubSubscriptionInfo_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo + getDefaultInstanceForType() { + return com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo build() { + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo buildPartial() { + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo result = + new com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.listing_ = listing_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.subscription_ = subscription_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo) { + return mergeFrom((com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo other) { + if (other + == com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.getDefaultInstance()) + return this; + if (!other.getListing().isEmpty()) { + listing_ = other.listing_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getSubscription().isEmpty()) { + subscription_ = other.subscription_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + listing_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + subscription_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object listing_ = ""; + + /** + * + * + *
+       * Optional. The name of the associated Analytics Hub listing resource.
+       * Pattern:
+       * "projects/{project}/locations/{location}/dataExchanges/{data_exchange}/listings/{listing}"
+       * 
+ * + * + * string listing = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The listing. + */ + public java.lang.String getListing() { + java.lang.Object ref = listing_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + listing_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the associated Analytics Hub listing resource.
+       * Pattern:
+       * "projects/{project}/locations/{location}/dataExchanges/{data_exchange}/listings/{listing}"
+       * 
+ * + * + * string listing = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for listing. + */ + public com.google.protobuf.ByteString getListingBytes() { + java.lang.Object ref = listing_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + listing_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the associated Analytics Hub listing resource.
+       * Pattern:
+       * "projects/{project}/locations/{location}/dataExchanges/{data_exchange}/listings/{listing}"
+       * 
+ * + * + * string listing = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The listing to set. + * @return This builder for chaining. + */ + public Builder setListing(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + listing_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the associated Analytics Hub listing resource.
+       * Pattern:
+       * "projects/{project}/locations/{location}/dataExchanges/{data_exchange}/listings/{listing}"
+       * 
+ * + * + * string listing = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearListing() { + listing_ = getDefaultInstance().getListing(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the associated Analytics Hub listing resource.
+       * Pattern:
+       * "projects/{project}/locations/{location}/dataExchanges/{data_exchange}/listings/{listing}"
+       * 
+ * + * + * string listing = 1 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for listing to set. + * @return This builder for chaining. + */ + public Builder setListingBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + listing_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object subscription_ = ""; + + /** + * + * + *
+       * Optional. The name of the associated Analytics Hub subscription resource.
+       * Pattern:
+       * "projects/{project}/locations/{location}/subscriptions/{subscription}"
+       * 
+ * + * string subscription = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The subscription. + */ + public java.lang.String getSubscription() { + java.lang.Object ref = subscription_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + subscription_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the associated Analytics Hub subscription resource.
+       * Pattern:
+       * "projects/{project}/locations/{location}/subscriptions/{subscription}"
+       * 
+ * + * string subscription = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for subscription. + */ + public com.google.protobuf.ByteString getSubscriptionBytes() { + java.lang.Object ref = subscription_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + subscription_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+       * Optional. The name of the associated Analytics Hub subscription resource.
+       * Pattern:
+       * "projects/{project}/locations/{location}/subscriptions/{subscription}"
+       * 
+ * + * string subscription = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscription(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + subscription_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the associated Analytics Hub subscription resource.
+       * Pattern:
+       * "projects/{project}/locations/{location}/subscriptions/{subscription}"
+       * 
+ * + * string subscription = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearSubscription() { + subscription_ = getDefaultInstance().getSubscription(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+       * Optional. The name of the associated Analytics Hub subscription resource.
+       * Pattern:
+       * "projects/{project}/locations/{location}/subscriptions/{subscription}"
+       * 
+ * + * string subscription = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for subscription to set. + * @return This builder for chaining. + */ + public Builder setSubscriptionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + subscription_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo) + private static final com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo(); + } + + public static com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AnalyticsHubSubscriptionInfo parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int bitField0_; + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
+   * Required. Identifier. The name of the subscription. It must have the format
+   * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must
+   * start with a letter, and contain only letters (`[A-Za-z]`), numbers
+   * (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
+   * plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
+   * in length, and it must not start with `"goog"`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. Identifier. The name of the subscription. It must have the format
+   * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must
+   * start with a letter, and contain only letters (`[A-Za-z]`), numbers
+   * (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
+   * plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
+   * in length, and it must not start with `"goog"`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TOPIC_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object topic_ = ""; + + /** + * + * + *
+   * Required. The name of the topic from which this subscription is receiving
+   * messages. Format is `projects/{project}/topics/{topic}`. The value of this
+   * field will be `_deleted-topic_` if the topic has been deleted.
+   * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + @java.lang.Override + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the topic from which this subscription is receiving
+   * messages. Format is `projects/{project}/topics/{topic}`. The value of this
+   * field will be `_deleted-topic_` if the topic has been deleted.
+   * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + @java.lang.Override + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PUSH_CONFIG_FIELD_NUMBER = 4; + private com.google.pubsub.v1.PushConfig pushConfig_; + + /** + * + * + *
+   * Optional. If push delivery is used with this subscription, this field is
+   * used to configure it.
+   * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the pushConfig field is set. + */ + @java.lang.Override + public boolean hasPushConfig() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Optional. If push delivery is used with this subscription, this field is
+   * used to configure it.
+   * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The pushConfig. + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfig getPushConfig() { + return pushConfig_ == null ? com.google.pubsub.v1.PushConfig.getDefaultInstance() : pushConfig_; + } + + /** + * + * + *
+   * Optional. If push delivery is used with this subscription, this field is
+   * used to configure it.
+   * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.PushConfigOrBuilder getPushConfigOrBuilder() { + return pushConfig_ == null ? com.google.pubsub.v1.PushConfig.getDefaultInstance() : pushConfig_; + } + + public static final int BIGQUERY_CONFIG_FIELD_NUMBER = 18; + private com.google.pubsub.v1.BigQueryConfig bigqueryConfig_; + + /** + * + * + *
+   * Optional. If delivery to BigQuery is used with this subscription, this
+   * field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the bigqueryConfig field is set. + */ + @java.lang.Override + public boolean hasBigqueryConfig() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+   * Optional. If delivery to BigQuery is used with this subscription, this
+   * field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The bigqueryConfig. + */ + @java.lang.Override + public com.google.pubsub.v1.BigQueryConfig getBigqueryConfig() { + return bigqueryConfig_ == null + ? com.google.pubsub.v1.BigQueryConfig.getDefaultInstance() + : bigqueryConfig_; + } + + /** + * + * + *
+   * Optional. If delivery to BigQuery is used with this subscription, this
+   * field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.BigQueryConfigOrBuilder getBigqueryConfigOrBuilder() { + return bigqueryConfig_ == null + ? com.google.pubsub.v1.BigQueryConfig.getDefaultInstance() + : bigqueryConfig_; + } + + public static final int CLOUD_STORAGE_CONFIG_FIELD_NUMBER = 22; + private com.google.pubsub.v1.CloudStorageConfig cloudStorageConfig_; + + /** + * + * + *
+   * Optional. If delivery to Google Cloud Storage is used with this
+   * subscription, this field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cloudStorageConfig field is set. + */ + @java.lang.Override + public boolean hasCloudStorageConfig() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
+   * Optional. If delivery to Google Cloud Storage is used with this
+   * subscription, this field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cloudStorageConfig. + */ + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfig getCloudStorageConfig() { + return cloudStorageConfig_ == null + ? com.google.pubsub.v1.CloudStorageConfig.getDefaultInstance() + : cloudStorageConfig_; + } + + /** + * + * + *
+   * Optional. If delivery to Google Cloud Storage is used with this
+   * subscription, this field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.CloudStorageConfigOrBuilder getCloudStorageConfigOrBuilder() { + return cloudStorageConfig_ == null + ? com.google.pubsub.v1.CloudStorageConfig.getDefaultInstance() + : cloudStorageConfig_; + } + + public static final int BIGTABLE_CONFIG_FIELD_NUMBER = 27; + private com.google.pubsub.v1.BigtableConfig bigtableConfig_; + + /** + * + * + *
+   * Optional. If delivery to Bigtable is used with this subscription, this
+   * field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the bigtableConfig field is set. + */ + @java.lang.Override + public boolean hasBigtableConfig() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
+   * Optional. If delivery to Bigtable is used with this subscription, this
+   * field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The bigtableConfig. + */ + @java.lang.Override + public com.google.pubsub.v1.BigtableConfig getBigtableConfig() { + return bigtableConfig_ == null + ? com.google.pubsub.v1.BigtableConfig.getDefaultInstance() + : bigtableConfig_; + } + + /** + * + * + *
+   * Optional. If delivery to Bigtable is used with this subscription, this
+   * field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.BigtableConfigOrBuilder getBigtableConfigOrBuilder() { + return bigtableConfig_ == null + ? com.google.pubsub.v1.BigtableConfig.getDefaultInstance() + : bigtableConfig_; + } + + public static final int ACK_DEADLINE_SECONDS_FIELD_NUMBER = 5; + private int ackDeadlineSeconds_ = 0; + + /** + * + * + *
+   * Optional. The approximate amount of time (on a best-effort basis) Pub/Sub
+   * waits for the subscriber to acknowledge receipt before resending the
+   * message. In the interval after the message is delivered and before it is
+   * acknowledged, it is considered to be _outstanding_. During that time
+   * period, the message will not be redelivered (on a best-effort basis).
+   *
+   * For pull subscriptions, this value is used as the initial value for the ack
+   * deadline. To override this value for a given message, call
+   * `ModifyAckDeadline` with the corresponding `ack_id` if using
+   * non-streaming pull or send the `ack_id` in a
+   * `StreamingModifyAckDeadlineRequest` if using streaming pull.
+   * The minimum custom deadline you can specify is 10 seconds.
+   * The maximum custom deadline you can specify is 600 seconds (10 minutes).
+   * If this parameter is 0, a default value of 10 seconds is used.
+   *
+   * For push delivery, this value is also used to set the request timeout for
+   * the call to the push endpoint.
+   *
+   * If the subscriber never acknowledges the message, the Pub/Sub
+   * system will eventually redeliver the message.
+   * 
+ * + * int32 ack_deadline_seconds = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The ackDeadlineSeconds. + */ + @java.lang.Override + public int getAckDeadlineSeconds() { + return ackDeadlineSeconds_; + } + + public static final int RETAIN_ACKED_MESSAGES_FIELD_NUMBER = 7; + private boolean retainAckedMessages_ = false; + + /** + * + * + *
+   * Optional. Indicates whether to retain acknowledged messages. If true, then
+   * messages are not expunged from the subscription's backlog, even if they are
+   * acknowledged, until they fall out of the `message_retention_duration`
+   * window. This must be true if you would like to [`Seek` to a timestamp]
+   * (https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time) in
+   * the past to replay previously-acknowledged messages.
+   * 
+ * + * bool retain_acked_messages = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The retainAckedMessages. + */ + @java.lang.Override + public boolean getRetainAckedMessages() { + return retainAckedMessages_; + } + + public static final int MESSAGE_RETENTION_DURATION_FIELD_NUMBER = 8; + private com.google.protobuf.Duration messageRetentionDuration_; + + /** + * + * + *
+   * Optional. How long to retain unacknowledged messages in the subscription's
+   * backlog, from the moment a message is published. If `retain_acked_messages`
+   * is true, then this also configures the retention of acknowledged messages,
+   * and thus configures how far back in time a `Seek` can be done. Defaults to
+   * 7 days. Cannot be more than 31 days or less than 10 minutes.
+   * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageRetentionDuration field is set. + */ + @java.lang.Override + public boolean hasMessageRetentionDuration() { + return ((bitField0_ & 0x00000010) != 0); + } + + /** + * + * + *
+   * Optional. How long to retain unacknowledged messages in the subscription's
+   * backlog, from the moment a message is published. If `retain_acked_messages`
+   * is true, then this also configures the retention of acknowledged messages,
+   * and thus configures how far back in time a `Seek` can be done. Defaults to
+   * 7 days. Cannot be more than 31 days or less than 10 minutes.
+   * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageRetentionDuration. + */ + @java.lang.Override + public com.google.protobuf.Duration getMessageRetentionDuration() { + return messageRetentionDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : messageRetentionDuration_; + } + + /** + * + * + *
+   * Optional. How long to retain unacknowledged messages in the subscription's
+   * backlog, from the moment a message is published. If `retain_acked_messages`
+   * is true, then this also configures the retention of acknowledged messages,
+   * and thus configures how far back in time a `Seek` can be done. Defaults to
+   * 7 days. Cannot be more than 31 days or less than 10 minutes.
+   * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.protobuf.DurationOrBuilder getMessageRetentionDurationOrBuilder() { + return messageRetentionDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : messageRetentionDuration_; + } + + public static final int LABELS_FIELD_NUMBER = 9; + + private static final class LabelsDefaultEntryHolder { + static final com.google.protobuf.MapEntry defaultEntry = + com.google.protobuf.MapEntry.newDefaultInstance( + com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Subscription_LabelsEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + + @SuppressWarnings("serial") + private com.google.protobuf.MapField labels_; + + private com.google.protobuf.MapField internalGetLabels() { + if (labels_ == null) { + return com.google.protobuf.MapField.emptyMapField(LabelsDefaultEntryHolder.defaultEntry); + } + return labels_; + } + + public int getLabelsCount() { + return internalGetLabels().getMap().size(); + } + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public boolean containsLabels(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetLabels().getMap().containsKey(key); + } + + /** Use {@link #getLabelsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getLabels() { + return getLabelsMap(); + } + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.util.Map getLabelsMap() { + return internalGetLabels().getMap(); + } + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public /* nullable */ java.lang.String getLabelsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.lang.String getLabelsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public static final int ENABLE_MESSAGE_ORDERING_FIELD_NUMBER = 10; + private boolean enableMessageOrdering_ = false; + + /** + * + * + *
+   * Optional. If true, messages published with the same `ordering_key` in
+   * `PubsubMessage` will be delivered to the subscribers in the order in which
+   * they are received by the Pub/Sub system. Otherwise, they may be delivered
+   * in any order.
+   * 
+ * + * bool enable_message_ordering = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The enableMessageOrdering. + */ + @java.lang.Override + public boolean getEnableMessageOrdering() { + return enableMessageOrdering_; + } + + public static final int EXPIRATION_POLICY_FIELD_NUMBER = 11; + private com.google.pubsub.v1.ExpirationPolicy expirationPolicy_; + + /** + * + * + *
+   * Optional. A policy that specifies the conditions for this subscription's
+   * expiration. A subscription is considered active as long as any connected
+   * subscriber is successfully consuming messages from the subscription or is
+   * issuing operations on the subscription. If `expiration_policy` is not set,
+   * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+   * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+   * but `expiration_policy.ttl` is not set, the subscription never expires.
+   * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the expirationPolicy field is set. + */ + @java.lang.Override + public boolean hasExpirationPolicy() { + return ((bitField0_ & 0x00000020) != 0); + } + + /** + * + * + *
+   * Optional. A policy that specifies the conditions for this subscription's
+   * expiration. A subscription is considered active as long as any connected
+   * subscriber is successfully consuming messages from the subscription or is
+   * issuing operations on the subscription. If `expiration_policy` is not set,
+   * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+   * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+   * but `expiration_policy.ttl` is not set, the subscription never expires.
+   * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The expirationPolicy. + */ + @java.lang.Override + public com.google.pubsub.v1.ExpirationPolicy getExpirationPolicy() { + return expirationPolicy_ == null + ? com.google.pubsub.v1.ExpirationPolicy.getDefaultInstance() + : expirationPolicy_; + } + + /** + * + * + *
+   * Optional. A policy that specifies the conditions for this subscription's
+   * expiration. A subscription is considered active as long as any connected
+   * subscriber is successfully consuming messages from the subscription or is
+   * issuing operations on the subscription. If `expiration_policy` is not set,
+   * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+   * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+   * but `expiration_policy.ttl` is not set, the subscription never expires.
+   * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.ExpirationPolicyOrBuilder getExpirationPolicyOrBuilder() { + return expirationPolicy_ == null + ? com.google.pubsub.v1.ExpirationPolicy.getDefaultInstance() + : expirationPolicy_; + } + + public static final int FILTER_FIELD_NUMBER = 12; + + @SuppressWarnings("serial") + private volatile java.lang.Object filter_ = ""; + + /** + * + * + *
+   * Optional. An expression written in the Pub/Sub [filter
+   * language](https://cloud.google.com/pubsub/docs/filtering). If non-empty,
+   * then only `PubsubMessage`s whose `attributes` field matches the filter are
+   * delivered on this subscription. If empty, then no messages are filtered
+   * out.
+   * 
+ * + * string filter = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The filter. + */ + @java.lang.Override + public java.lang.String getFilter() { + java.lang.Object ref = filter_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + filter_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. An expression written in the Pub/Sub [filter
+   * language](https://cloud.google.com/pubsub/docs/filtering). If non-empty,
+   * then only `PubsubMessage`s whose `attributes` field matches the filter are
+   * delivered on this subscription. If empty, then no messages are filtered
+   * out.
+   * 
+ * + * string filter = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for filter. + */ + @java.lang.Override + public com.google.protobuf.ByteString getFilterBytes() { + java.lang.Object ref = filter_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + filter_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int DEAD_LETTER_POLICY_FIELD_NUMBER = 13; + private com.google.pubsub.v1.DeadLetterPolicy deadLetterPolicy_; + + /** + * + * + *
+   * Optional. A policy that specifies the conditions for dead lettering
+   * messages in this subscription. If dead_letter_policy is not set, dead
+   * lettering is disabled.
+   *
+   * The Pub/Sub service account associated with this subscriptions's
+   * parent project (i.e.,
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+   * permission to Acknowledge() messages on this subscription.
+   * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the deadLetterPolicy field is set. + */ + @java.lang.Override + public boolean hasDeadLetterPolicy() { + return ((bitField0_ & 0x00000040) != 0); + } + + /** + * + * + *
+   * Optional. A policy that specifies the conditions for dead lettering
+   * messages in this subscription. If dead_letter_policy is not set, dead
+   * lettering is disabled.
+   *
+   * The Pub/Sub service account associated with this subscriptions's
+   * parent project (i.e.,
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+   * permission to Acknowledge() messages on this subscription.
+   * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The deadLetterPolicy. + */ + @java.lang.Override + public com.google.pubsub.v1.DeadLetterPolicy getDeadLetterPolicy() { + return deadLetterPolicy_ == null + ? com.google.pubsub.v1.DeadLetterPolicy.getDefaultInstance() + : deadLetterPolicy_; + } + + /** + * + * + *
+   * Optional. A policy that specifies the conditions for dead lettering
+   * messages in this subscription. If dead_letter_policy is not set, dead
+   * lettering is disabled.
+   *
+   * The Pub/Sub service account associated with this subscriptions's
+   * parent project (i.e.,
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+   * permission to Acknowledge() messages on this subscription.
+   * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.DeadLetterPolicyOrBuilder getDeadLetterPolicyOrBuilder() { + return deadLetterPolicy_ == null + ? com.google.pubsub.v1.DeadLetterPolicy.getDefaultInstance() + : deadLetterPolicy_; + } + + public static final int RETRY_POLICY_FIELD_NUMBER = 14; + private com.google.pubsub.v1.RetryPolicy retryPolicy_; + + /** + * + * + *
+   * Optional. A policy that specifies how Pub/Sub retries message delivery for
+   * this subscription.
+   *
+   * If not set, the default retry policy is applied. This generally implies
+   * that messages will be retried as soon as possible for healthy subscribers.
+   * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+   * events for a given message.
+   * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the retryPolicy field is set. + */ + @java.lang.Override + public boolean hasRetryPolicy() { + return ((bitField0_ & 0x00000080) != 0); + } + + /** + * + * + *
+   * Optional. A policy that specifies how Pub/Sub retries message delivery for
+   * this subscription.
+   *
+   * If not set, the default retry policy is applied. This generally implies
+   * that messages will be retried as soon as possible for healthy subscribers.
+   * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+   * events for a given message.
+   * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The retryPolicy. + */ + @java.lang.Override + public com.google.pubsub.v1.RetryPolicy getRetryPolicy() { + return retryPolicy_ == null + ? com.google.pubsub.v1.RetryPolicy.getDefaultInstance() + : retryPolicy_; + } + + /** + * + * + *
+   * Optional. A policy that specifies how Pub/Sub retries message delivery for
+   * this subscription.
+   *
+   * If not set, the default retry policy is applied. This generally implies
+   * that messages will be retried as soon as possible for healthy subscribers.
+   * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+   * events for a given message.
+   * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.RetryPolicyOrBuilder getRetryPolicyOrBuilder() { + return retryPolicy_ == null + ? com.google.pubsub.v1.RetryPolicy.getDefaultInstance() + : retryPolicy_; + } + + public static final int DETACHED_FIELD_NUMBER = 15; + private boolean detached_ = false; + + /** + * + * + *
+   * Optional. Indicates whether the subscription is detached from its topic.
+   * Detached subscriptions don't receive messages from their topic and don't
+   * retain any backlog. `Pull` and `StreamingPull` requests will return
+   * FAILED_PRECONDITION. If the subscription is a push subscription, pushes to
+   * the endpoint will not be made.
+   * 
+ * + * bool detached = 15 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The detached. + */ + @java.lang.Override + public boolean getDetached() { + return detached_; + } + + public static final int ENABLE_EXACTLY_ONCE_DELIVERY_FIELD_NUMBER = 16; + private boolean enableExactlyOnceDelivery_ = false; + + /** + * + * + *
+   * Optional. If true, Pub/Sub provides the following guarantees for the
+   * delivery of a message with a given value of `message_id` on this
+   * subscription:
+   *
+   * * The message sent to a subscriber is guaranteed not to be resent
+   * before the message's acknowledgment deadline expires.
+   * * An acknowledged message will not be resent to a subscriber.
+   *
+   * Note that subscribers may still receive multiple copies of a message
+   * when `enable_exactly_once_delivery` is true if the message was published
+   * multiple times by a publisher client. These copies are  considered distinct
+   * by Pub/Sub and have distinct `message_id` values.
+   * 
+ * + * bool enable_exactly_once_delivery = 16 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The enableExactlyOnceDelivery. + */ + @java.lang.Override + public boolean getEnableExactlyOnceDelivery() { + return enableExactlyOnceDelivery_; + } + + public static final int TOPIC_MESSAGE_RETENTION_DURATION_FIELD_NUMBER = 17; + private com.google.protobuf.Duration topicMessageRetentionDuration_; + + /** + * + * + *
+   * Output only. Indicates the minimum duration for which a message is retained
+   * after it is published to the subscription's topic. If this field is set,
+   * messages published to the subscription's topic in the last
+   * `topic_message_retention_duration` are always available to subscribers. See
+   * the `message_retention_duration` field in `Topic`. This field is set only
+   * in responses from the server; it is ignored if it is set in any requests.
+   * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the topicMessageRetentionDuration field is set. + */ + @java.lang.Override + public boolean hasTopicMessageRetentionDuration() { + return ((bitField0_ & 0x00000100) != 0); + } + + /** + * + * + *
+   * Output only. Indicates the minimum duration for which a message is retained
+   * after it is published to the subscription's topic. If this field is set,
+   * messages published to the subscription's topic in the last
+   * `topic_message_retention_duration` are always available to subscribers. See
+   * the `message_retention_duration` field in `Topic`. This field is set only
+   * in responses from the server; it is ignored if it is set in any requests.
+   * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The topicMessageRetentionDuration. + */ + @java.lang.Override + public com.google.protobuf.Duration getTopicMessageRetentionDuration() { + return topicMessageRetentionDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : topicMessageRetentionDuration_; + } + + /** + * + * + *
+   * Output only. Indicates the minimum duration for which a message is retained
+   * after it is published to the subscription's topic. If this field is set,
+   * messages published to the subscription's topic in the last
+   * `topic_message_retention_duration` are always available to subscribers. See
+   * the `message_retention_duration` field in `Topic`. This field is set only
+   * in responses from the server; it is ignored if it is set in any requests.
+   * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public com.google.protobuf.DurationOrBuilder getTopicMessageRetentionDurationOrBuilder() { + return topicMessageRetentionDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : topicMessageRetentionDuration_; + } + + public static final int STATE_FIELD_NUMBER = 19; + private int state_ = 0; + + /** + * + * + *
+   * Output only. An output-only field indicating whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.Subscription.State state = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+   * Output only. An output-only field indicating whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.Subscription.State state = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.Subscription.State getState() { + com.google.pubsub.v1.Subscription.State result = + com.google.pubsub.v1.Subscription.State.forNumber(state_); + return result == null ? com.google.pubsub.v1.Subscription.State.UNRECOGNIZED : result; + } + + public static final int ANALYTICS_HUB_SUBSCRIPTION_INFO_FIELD_NUMBER = 23; + private com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo + analyticsHubSubscriptionInfo_; + + /** + * + * + *
+   * Output only. Information about the associated Analytics Hub subscription.
+   * Only set if the subscription is created by Analytics Hub.
+   * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the analyticsHubSubscriptionInfo field is set. + */ + @java.lang.Override + public boolean hasAnalyticsHubSubscriptionInfo() { + return ((bitField0_ & 0x00000200) != 0); + } + + /** + * + * + *
+   * Output only. Information about the associated Analytics Hub subscription.
+   * Only set if the subscription is created by Analytics Hub.
+   * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The analyticsHubSubscriptionInfo. + */ + @java.lang.Override + public com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo + getAnalyticsHubSubscriptionInfo() { + return analyticsHubSubscriptionInfo_ == null + ? com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.getDefaultInstance() + : analyticsHubSubscriptionInfo_; + } + + /** + * + * + *
+   * Output only. Information about the associated Analytics Hub subscription.
+   * Only set if the subscription is created by Analytics Hub.
+   * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfoOrBuilder + getAnalyticsHubSubscriptionInfoOrBuilder() { + return analyticsHubSubscriptionInfo_ == null + ? com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.getDefaultInstance() + : analyticsHubSubscriptionInfo_; + } + + public static final int MESSAGE_TRANSFORMS_FIELD_NUMBER = 25; + + @SuppressWarnings("serial") + private java.util.List messageTransforms_; + + /** + * + * + *
+   * Optional. Transforms to be applied to messages before they are delivered to
+   * subscribers. Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List getMessageTransformsList() { + return messageTransforms_; + } + + /** + * + * + *
+   * Optional. Transforms to be applied to messages before they are delivered to
+   * subscribers. Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List + getMessageTransformsOrBuilderList() { + return messageTransforms_; + } + + /** + * + * + *
+   * Optional. Transforms to be applied to messages before they are delivered to
+   * subscribers. Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public int getMessageTransformsCount() { + return messageTransforms_.size(); + } + + /** + * + * + *
+   * Optional. Transforms to be applied to messages before they are delivered to
+   * subscribers. Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.MessageTransform getMessageTransforms(int index) { + return messageTransforms_.get(index); + } + + /** + * + * + *
+   * Optional. Transforms to be applied to messages before they are delivered to
+   * subscribers. Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.MessageTransformOrBuilder getMessageTransformsOrBuilder(int index) { + return messageTransforms_.get(index); + } + + public static final int TAGS_FIELD_NUMBER = 26; + + private static final class TagsDefaultEntryHolder { + static final com.google.protobuf.MapEntry defaultEntry = + com.google.protobuf.MapEntry.newDefaultInstance( + com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Subscription_TagsEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + + @SuppressWarnings("serial") + private com.google.protobuf.MapField tags_; + + private com.google.protobuf.MapField internalGetTags() { + if (tags_ == null) { + return com.google.protobuf.MapField.emptyMapField(TagsDefaultEntryHolder.defaultEntry); + } + return tags_; + } + + public int getTagsCount() { + return internalGetTags().getMap().size(); + } + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsTags(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetTags().getMap().containsKey(key); + } + + /** Use {@link #getTagsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getTags() { + return getTagsMap(); + } + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getTagsMap() { + return internalGetTags().getMap(); + } + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getTagsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetTags().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getTagsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetTags().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, topic_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(4, getPushConfig()); + } + if (ackDeadlineSeconds_ != 0) { + output.writeInt32(5, ackDeadlineSeconds_); + } + if (retainAckedMessages_ != false) { + output.writeBool(7, retainAckedMessages_); + } + if (((bitField0_ & 0x00000010) != 0)) { + output.writeMessage(8, getMessageRetentionDuration()); + } + com.google.protobuf.GeneratedMessage.serializeStringMapTo( + output, internalGetLabels(), LabelsDefaultEntryHolder.defaultEntry, 9); + if (enableMessageOrdering_ != false) { + output.writeBool(10, enableMessageOrdering_); + } + if (((bitField0_ & 0x00000020) != 0)) { + output.writeMessage(11, getExpirationPolicy()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 12, filter_); + } + if (((bitField0_ & 0x00000040) != 0)) { + output.writeMessage(13, getDeadLetterPolicy()); + } + if (((bitField0_ & 0x00000080) != 0)) { + output.writeMessage(14, getRetryPolicy()); + } + if (detached_ != false) { + output.writeBool(15, detached_); + } + if (enableExactlyOnceDelivery_ != false) { + output.writeBool(16, enableExactlyOnceDelivery_); + } + if (((bitField0_ & 0x00000100) != 0)) { + output.writeMessage(17, getTopicMessageRetentionDuration()); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(18, getBigqueryConfig()); + } + if (state_ != com.google.pubsub.v1.Subscription.State.STATE_UNSPECIFIED.getNumber()) { + output.writeEnum(19, state_); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(22, getCloudStorageConfig()); + } + if (((bitField0_ & 0x00000200) != 0)) { + output.writeMessage(23, getAnalyticsHubSubscriptionInfo()); + } + for (int i = 0; i < messageTransforms_.size(); i++) { + output.writeMessage(25, messageTransforms_.get(i)); + } + com.google.protobuf.GeneratedMessage.serializeStringMapTo( + output, internalGetTags(), TagsDefaultEntryHolder.defaultEntry, 26); + if (((bitField0_ & 0x00000008) != 0)) { + output.writeMessage(27, getBigtableConfig()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(topic_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, topic_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getPushConfig()); + } + if (ackDeadlineSeconds_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(5, ackDeadlineSeconds_); + } + if (retainAckedMessages_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(7, retainAckedMessages_); + } + if (((bitField0_ & 0x00000010) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 8, getMessageRetentionDuration()); + } + for (java.util.Map.Entry entry : + internalGetLabels().getMap().entrySet()) { + com.google.protobuf.MapEntry labels__ = + LabelsDefaultEntryHolder.defaultEntry + .newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream.computeMessageSize(9, labels__); + } + if (enableMessageOrdering_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(10, enableMessageOrdering_); + } + if (((bitField0_ & 0x00000020) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(11, getExpirationPolicy()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(filter_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(12, filter_); + } + if (((bitField0_ & 0x00000040) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(13, getDeadLetterPolicy()); + } + if (((bitField0_ & 0x00000080) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(14, getRetryPolicy()); + } + if (detached_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(15, detached_); + } + if (enableExactlyOnceDelivery_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(16, enableExactlyOnceDelivery_); + } + if (((bitField0_ & 0x00000100) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 17, getTopicMessageRetentionDuration()); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(18, getBigqueryConfig()); + } + if (state_ != com.google.pubsub.v1.Subscription.State.STATE_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(19, state_); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(22, getCloudStorageConfig()); + } + if (((bitField0_ & 0x00000200) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 23, getAnalyticsHubSubscriptionInfo()); + } + for (int i = 0; i < messageTransforms_.size(); i++) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize(25, messageTransforms_.get(i)); + } + for (java.util.Map.Entry entry : + internalGetTags().getMap().entrySet()) { + com.google.protobuf.MapEntry tags__ = + TagsDefaultEntryHolder.defaultEntry + .newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream.computeMessageSize(26, tags__); + } + if (((bitField0_ & 0x00000008) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(27, getBigtableConfig()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.Subscription)) { + return super.equals(obj); + } + com.google.pubsub.v1.Subscription other = (com.google.pubsub.v1.Subscription) obj; + + if (!getName().equals(other.getName())) return false; + if (!getTopic().equals(other.getTopic())) return false; + if (hasPushConfig() != other.hasPushConfig()) return false; + if (hasPushConfig()) { + if (!getPushConfig().equals(other.getPushConfig())) return false; + } + if (hasBigqueryConfig() != other.hasBigqueryConfig()) return false; + if (hasBigqueryConfig()) { + if (!getBigqueryConfig().equals(other.getBigqueryConfig())) return false; + } + if (hasCloudStorageConfig() != other.hasCloudStorageConfig()) return false; + if (hasCloudStorageConfig()) { + if (!getCloudStorageConfig().equals(other.getCloudStorageConfig())) return false; + } + if (hasBigtableConfig() != other.hasBigtableConfig()) return false; + if (hasBigtableConfig()) { + if (!getBigtableConfig().equals(other.getBigtableConfig())) return false; + } + if (getAckDeadlineSeconds() != other.getAckDeadlineSeconds()) return false; + if (getRetainAckedMessages() != other.getRetainAckedMessages()) return false; + if (hasMessageRetentionDuration() != other.hasMessageRetentionDuration()) return false; + if (hasMessageRetentionDuration()) { + if (!getMessageRetentionDuration().equals(other.getMessageRetentionDuration())) return false; + } + if (!internalGetLabels().equals(other.internalGetLabels())) return false; + if (getEnableMessageOrdering() != other.getEnableMessageOrdering()) return false; + if (hasExpirationPolicy() != other.hasExpirationPolicy()) return false; + if (hasExpirationPolicy()) { + if (!getExpirationPolicy().equals(other.getExpirationPolicy())) return false; + } + if (!getFilter().equals(other.getFilter())) return false; + if (hasDeadLetterPolicy() != other.hasDeadLetterPolicy()) return false; + if (hasDeadLetterPolicy()) { + if (!getDeadLetterPolicy().equals(other.getDeadLetterPolicy())) return false; + } + if (hasRetryPolicy() != other.hasRetryPolicy()) return false; + if (hasRetryPolicy()) { + if (!getRetryPolicy().equals(other.getRetryPolicy())) return false; + } + if (getDetached() != other.getDetached()) return false; + if (getEnableExactlyOnceDelivery() != other.getEnableExactlyOnceDelivery()) return false; + if (hasTopicMessageRetentionDuration() != other.hasTopicMessageRetentionDuration()) + return false; + if (hasTopicMessageRetentionDuration()) { + if (!getTopicMessageRetentionDuration().equals(other.getTopicMessageRetentionDuration())) + return false; + } + if (state_ != other.state_) return false; + if (hasAnalyticsHubSubscriptionInfo() != other.hasAnalyticsHubSubscriptionInfo()) return false; + if (hasAnalyticsHubSubscriptionInfo()) { + if (!getAnalyticsHubSubscriptionInfo().equals(other.getAnalyticsHubSubscriptionInfo())) + return false; + } + if (!getMessageTransformsList().equals(other.getMessageTransformsList())) return false; + if (!internalGetTags().equals(other.internalGetTags())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getTopic().hashCode(); + if (hasPushConfig()) { + hash = (37 * hash) + PUSH_CONFIG_FIELD_NUMBER; + hash = (53 * hash) + getPushConfig().hashCode(); + } + if (hasBigqueryConfig()) { + hash = (37 * hash) + BIGQUERY_CONFIG_FIELD_NUMBER; + hash = (53 * hash) + getBigqueryConfig().hashCode(); + } + if (hasCloudStorageConfig()) { + hash = (37 * hash) + CLOUD_STORAGE_CONFIG_FIELD_NUMBER; + hash = (53 * hash) + getCloudStorageConfig().hashCode(); + } + if (hasBigtableConfig()) { + hash = (37 * hash) + BIGTABLE_CONFIG_FIELD_NUMBER; + hash = (53 * hash) + getBigtableConfig().hashCode(); + } + hash = (37 * hash) + ACK_DEADLINE_SECONDS_FIELD_NUMBER; + hash = (53 * hash) + getAckDeadlineSeconds(); + hash = (37 * hash) + RETAIN_ACKED_MESSAGES_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getRetainAckedMessages()); + if (hasMessageRetentionDuration()) { + hash = (37 * hash) + MESSAGE_RETENTION_DURATION_FIELD_NUMBER; + hash = (53 * hash) + getMessageRetentionDuration().hashCode(); + } + if (!internalGetLabels().getMap().isEmpty()) { + hash = (37 * hash) + LABELS_FIELD_NUMBER; + hash = (53 * hash) + internalGetLabels().hashCode(); + } + hash = (37 * hash) + ENABLE_MESSAGE_ORDERING_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getEnableMessageOrdering()); + if (hasExpirationPolicy()) { + hash = (37 * hash) + EXPIRATION_POLICY_FIELD_NUMBER; + hash = (53 * hash) + getExpirationPolicy().hashCode(); + } + hash = (37 * hash) + FILTER_FIELD_NUMBER; + hash = (53 * hash) + getFilter().hashCode(); + if (hasDeadLetterPolicy()) { + hash = (37 * hash) + DEAD_LETTER_POLICY_FIELD_NUMBER; + hash = (53 * hash) + getDeadLetterPolicy().hashCode(); + } + if (hasRetryPolicy()) { + hash = (37 * hash) + RETRY_POLICY_FIELD_NUMBER; + hash = (53 * hash) + getRetryPolicy().hashCode(); + } + hash = (37 * hash) + DETACHED_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getDetached()); + hash = (37 * hash) + ENABLE_EXACTLY_ONCE_DELIVERY_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getEnableExactlyOnceDelivery()); + if (hasTopicMessageRetentionDuration()) { + hash = (37 * hash) + TOPIC_MESSAGE_RETENTION_DURATION_FIELD_NUMBER; + hash = (53 * hash) + getTopicMessageRetentionDuration().hashCode(); + } + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + state_; + if (hasAnalyticsHubSubscriptionInfo()) { + hash = (37 * hash) + ANALYTICS_HUB_SUBSCRIPTION_INFO_FIELD_NUMBER; + hash = (53 * hash) + getAnalyticsHubSubscriptionInfo().hashCode(); + } + if (getMessageTransformsCount() > 0) { + hash = (37 * hash) + MESSAGE_TRANSFORMS_FIELD_NUMBER; + hash = (53 * hash) + getMessageTransformsList().hashCode(); + } + if (!internalGetTags().getMap().isEmpty()) { + hash = (37 * hash) + TAGS_FIELD_NUMBER; + hash = (53 * hash) + internalGetTags().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.Subscription parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Subscription parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Subscription parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Subscription parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Subscription parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Subscription parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Subscription parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Subscription parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.Subscription parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Subscription parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.Subscription parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Subscription parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.Subscription prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * A subscription resource. If none of `push_config`, `bigquery_config`, or
+   * `cloud_storage_config` is set, then the subscriber will pull and ack messages
+   * using API methods. At most one of these fields may be set.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.Subscription} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.Subscription) + com.google.pubsub.v1.SubscriptionOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Subscription_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 9: + return internalGetLabels(); + case 26: + return internalGetTags(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 9: + return internalGetMutableLabels(); + case 26: + return internalGetMutableTags(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Subscription_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.Subscription.class, + com.google.pubsub.v1.Subscription.Builder.class); + } + + // Construct using com.google.pubsub.v1.Subscription.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetPushConfigFieldBuilder(); + internalGetBigqueryConfigFieldBuilder(); + internalGetCloudStorageConfigFieldBuilder(); + internalGetBigtableConfigFieldBuilder(); + internalGetMessageRetentionDurationFieldBuilder(); + internalGetExpirationPolicyFieldBuilder(); + internalGetDeadLetterPolicyFieldBuilder(); + internalGetRetryPolicyFieldBuilder(); + internalGetTopicMessageRetentionDurationFieldBuilder(); + internalGetAnalyticsHubSubscriptionInfoFieldBuilder(); + internalGetMessageTransformsFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + topic_ = ""; + pushConfig_ = null; + if (pushConfigBuilder_ != null) { + pushConfigBuilder_.dispose(); + pushConfigBuilder_ = null; + } + bigqueryConfig_ = null; + if (bigqueryConfigBuilder_ != null) { + bigqueryConfigBuilder_.dispose(); + bigqueryConfigBuilder_ = null; + } + cloudStorageConfig_ = null; + if (cloudStorageConfigBuilder_ != null) { + cloudStorageConfigBuilder_.dispose(); + cloudStorageConfigBuilder_ = null; + } + bigtableConfig_ = null; + if (bigtableConfigBuilder_ != null) { + bigtableConfigBuilder_.dispose(); + bigtableConfigBuilder_ = null; + } + ackDeadlineSeconds_ = 0; + retainAckedMessages_ = false; + messageRetentionDuration_ = null; + if (messageRetentionDurationBuilder_ != null) { + messageRetentionDurationBuilder_.dispose(); + messageRetentionDurationBuilder_ = null; + } + internalGetMutableLabels().clear(); + enableMessageOrdering_ = false; + expirationPolicy_ = null; + if (expirationPolicyBuilder_ != null) { + expirationPolicyBuilder_.dispose(); + expirationPolicyBuilder_ = null; + } + filter_ = ""; + deadLetterPolicy_ = null; + if (deadLetterPolicyBuilder_ != null) { + deadLetterPolicyBuilder_.dispose(); + deadLetterPolicyBuilder_ = null; + } + retryPolicy_ = null; + if (retryPolicyBuilder_ != null) { + retryPolicyBuilder_.dispose(); + retryPolicyBuilder_ = null; + } + detached_ = false; + enableExactlyOnceDelivery_ = false; + topicMessageRetentionDuration_ = null; + if (topicMessageRetentionDurationBuilder_ != null) { + topicMessageRetentionDurationBuilder_.dispose(); + topicMessageRetentionDurationBuilder_ = null; + } + state_ = 0; + analyticsHubSubscriptionInfo_ = null; + if (analyticsHubSubscriptionInfoBuilder_ != null) { + analyticsHubSubscriptionInfoBuilder_.dispose(); + analyticsHubSubscriptionInfoBuilder_ = null; + } + if (messageTransformsBuilder_ == null) { + messageTransforms_ = java.util.Collections.emptyList(); + } else { + messageTransforms_ = null; + messageTransformsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00100000); + internalGetMutableTags().clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Subscription_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.Subscription getDefaultInstanceForType() { + return com.google.pubsub.v1.Subscription.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.Subscription build() { + com.google.pubsub.v1.Subscription result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.Subscription buildPartial() { + com.google.pubsub.v1.Subscription result = new com.google.pubsub.v1.Subscription(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.pubsub.v1.Subscription result) { + if (messageTransformsBuilder_ == null) { + if (((bitField0_ & 0x00100000) != 0)) { + messageTransforms_ = java.util.Collections.unmodifiableList(messageTransforms_); + bitField0_ = (bitField0_ & ~0x00100000); + } + result.messageTransforms_ = messageTransforms_; + } else { + result.messageTransforms_ = messageTransformsBuilder_.build(); + } + } + + private void buildPartial0(com.google.pubsub.v1.Subscription result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.topic_ = topic_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000004) != 0)) { + result.pushConfig_ = pushConfigBuilder_ == null ? pushConfig_ : pushConfigBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.bigqueryConfig_ = + bigqueryConfigBuilder_ == null ? bigqueryConfig_ : bigqueryConfigBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.cloudStorageConfig_ = + cloudStorageConfigBuilder_ == null + ? cloudStorageConfig_ + : cloudStorageConfigBuilder_.build(); + to_bitField0_ |= 0x00000004; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.bigtableConfig_ = + bigtableConfigBuilder_ == null ? bigtableConfig_ : bigtableConfigBuilder_.build(); + to_bitField0_ |= 0x00000008; + } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.ackDeadlineSeconds_ = ackDeadlineSeconds_; + } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.retainAckedMessages_ = retainAckedMessages_; + } + if (((from_bitField0_ & 0x00000100) != 0)) { + result.messageRetentionDuration_ = + messageRetentionDurationBuilder_ == null + ? messageRetentionDuration_ + : messageRetentionDurationBuilder_.build(); + to_bitField0_ |= 0x00000010; + } + if (((from_bitField0_ & 0x00000200) != 0)) { + result.labels_ = internalGetLabels(); + result.labels_.makeImmutable(); + } + if (((from_bitField0_ & 0x00000400) != 0)) { + result.enableMessageOrdering_ = enableMessageOrdering_; + } + if (((from_bitField0_ & 0x00000800) != 0)) { + result.expirationPolicy_ = + expirationPolicyBuilder_ == null ? expirationPolicy_ : expirationPolicyBuilder_.build(); + to_bitField0_ |= 0x00000020; + } + if (((from_bitField0_ & 0x00001000) != 0)) { + result.filter_ = filter_; + } + if (((from_bitField0_ & 0x00002000) != 0)) { + result.deadLetterPolicy_ = + deadLetterPolicyBuilder_ == null ? deadLetterPolicy_ : deadLetterPolicyBuilder_.build(); + to_bitField0_ |= 0x00000040; + } + if (((from_bitField0_ & 0x00004000) != 0)) { + result.retryPolicy_ = + retryPolicyBuilder_ == null ? retryPolicy_ : retryPolicyBuilder_.build(); + to_bitField0_ |= 0x00000080; + } + if (((from_bitField0_ & 0x00008000) != 0)) { + result.detached_ = detached_; + } + if (((from_bitField0_ & 0x00010000) != 0)) { + result.enableExactlyOnceDelivery_ = enableExactlyOnceDelivery_; + } + if (((from_bitField0_ & 0x00020000) != 0)) { + result.topicMessageRetentionDuration_ = + topicMessageRetentionDurationBuilder_ == null + ? topicMessageRetentionDuration_ + : topicMessageRetentionDurationBuilder_.build(); + to_bitField0_ |= 0x00000100; + } + if (((from_bitField0_ & 0x00040000) != 0)) { + result.state_ = state_; + } + if (((from_bitField0_ & 0x00080000) != 0)) { + result.analyticsHubSubscriptionInfo_ = + analyticsHubSubscriptionInfoBuilder_ == null + ? analyticsHubSubscriptionInfo_ + : analyticsHubSubscriptionInfoBuilder_.build(); + to_bitField0_ |= 0x00000200; + } + if (((from_bitField0_ & 0x00200000) != 0)) { + result.tags_ = internalGetTags(); + result.tags_.makeImmutable(); + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.Subscription) { + return mergeFrom((com.google.pubsub.v1.Subscription) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.Subscription other) { + if (other == com.google.pubsub.v1.Subscription.getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getTopic().isEmpty()) { + topic_ = other.topic_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (other.hasPushConfig()) { + mergePushConfig(other.getPushConfig()); + } + if (other.hasBigqueryConfig()) { + mergeBigqueryConfig(other.getBigqueryConfig()); + } + if (other.hasCloudStorageConfig()) { + mergeCloudStorageConfig(other.getCloudStorageConfig()); + } + if (other.hasBigtableConfig()) { + mergeBigtableConfig(other.getBigtableConfig()); + } + if (other.getAckDeadlineSeconds() != 0) { + setAckDeadlineSeconds(other.getAckDeadlineSeconds()); + } + if (other.getRetainAckedMessages() != false) { + setRetainAckedMessages(other.getRetainAckedMessages()); + } + if (other.hasMessageRetentionDuration()) { + mergeMessageRetentionDuration(other.getMessageRetentionDuration()); + } + internalGetMutableLabels().mergeFrom(other.internalGetLabels()); + bitField0_ |= 0x00000200; + if (other.getEnableMessageOrdering() != false) { + setEnableMessageOrdering(other.getEnableMessageOrdering()); + } + if (other.hasExpirationPolicy()) { + mergeExpirationPolicy(other.getExpirationPolicy()); + } + if (!other.getFilter().isEmpty()) { + filter_ = other.filter_; + bitField0_ |= 0x00001000; + onChanged(); + } + if (other.hasDeadLetterPolicy()) { + mergeDeadLetterPolicy(other.getDeadLetterPolicy()); + } + if (other.hasRetryPolicy()) { + mergeRetryPolicy(other.getRetryPolicy()); + } + if (other.getDetached() != false) { + setDetached(other.getDetached()); + } + if (other.getEnableExactlyOnceDelivery() != false) { + setEnableExactlyOnceDelivery(other.getEnableExactlyOnceDelivery()); + } + if (other.hasTopicMessageRetentionDuration()) { + mergeTopicMessageRetentionDuration(other.getTopicMessageRetentionDuration()); + } + if (other.state_ != 0) { + setStateValue(other.getStateValue()); + } + if (other.hasAnalyticsHubSubscriptionInfo()) { + mergeAnalyticsHubSubscriptionInfo(other.getAnalyticsHubSubscriptionInfo()); + } + if (messageTransformsBuilder_ == null) { + if (!other.messageTransforms_.isEmpty()) { + if (messageTransforms_.isEmpty()) { + messageTransforms_ = other.messageTransforms_; + bitField0_ = (bitField0_ & ~0x00100000); + } else { + ensureMessageTransformsIsMutable(); + messageTransforms_.addAll(other.messageTransforms_); + } + onChanged(); + } + } else { + if (!other.messageTransforms_.isEmpty()) { + if (messageTransformsBuilder_.isEmpty()) { + messageTransformsBuilder_.dispose(); + messageTransformsBuilder_ = null; + messageTransforms_ = other.messageTransforms_; + bitField0_ = (bitField0_ & ~0x00100000); + messageTransformsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetMessageTransformsFieldBuilder() + : null; + } else { + messageTransformsBuilder_.addAllMessages(other.messageTransforms_); + } + } + } + internalGetMutableTags().mergeFrom(other.internalGetTags()); + bitField0_ |= 0x00200000; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + topic_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 34: + { + input.readMessage( + internalGetPushConfigFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000004; + break; + } // case 34 + case 40: + { + ackDeadlineSeconds_ = input.readInt32(); + bitField0_ |= 0x00000040; + break; + } // case 40 + case 56: + { + retainAckedMessages_ = input.readBool(); + bitField0_ |= 0x00000080; + break; + } // case 56 + case 66: + { + input.readMessage( + internalGetMessageRetentionDurationFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000100; + break; + } // case 66 + case 74: + { + com.google.protobuf.MapEntry labels__ = + input.readMessage( + LabelsDefaultEntryHolder.defaultEntry.getParserForType(), + extensionRegistry); + internalGetMutableLabels() + .getMutableMap() + .put(labels__.getKey(), labels__.getValue()); + bitField0_ |= 0x00000200; + break; + } // case 74 + case 80: + { + enableMessageOrdering_ = input.readBool(); + bitField0_ |= 0x00000400; + break; + } // case 80 + case 90: + { + input.readMessage( + internalGetExpirationPolicyFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000800; + break; + } // case 90 + case 98: + { + filter_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00001000; + break; + } // case 98 + case 106: + { + input.readMessage( + internalGetDeadLetterPolicyFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00002000; + break; + } // case 106 + case 114: + { + input.readMessage( + internalGetRetryPolicyFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00004000; + break; + } // case 114 + case 120: + { + detached_ = input.readBool(); + bitField0_ |= 0x00008000; + break; + } // case 120 + case 128: + { + enableExactlyOnceDelivery_ = input.readBool(); + bitField0_ |= 0x00010000; + break; + } // case 128 + case 138: + { + input.readMessage( + internalGetTopicMessageRetentionDurationFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00020000; + break; + } // case 138 + case 146: + { + input.readMessage( + internalGetBigqueryConfigFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 146 + case 152: + { + state_ = input.readEnum(); + bitField0_ |= 0x00040000; + break; + } // case 152 + case 178: + { + input.readMessage( + internalGetCloudStorageConfigFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000010; + break; + } // case 178 + case 186: + { + input.readMessage( + internalGetAnalyticsHubSubscriptionInfoFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00080000; + break; + } // case 186 + case 202: + { + com.google.pubsub.v1.MessageTransform m = + input.readMessage( + com.google.pubsub.v1.MessageTransform.parser(), extensionRegistry); + if (messageTransformsBuilder_ == null) { + ensureMessageTransformsIsMutable(); + messageTransforms_.add(m); + } else { + messageTransformsBuilder_.addMessage(m); + } + break; + } // case 202 + case 210: + { + com.google.protobuf.MapEntry tags__ = + input.readMessage( + TagsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry); + internalGetMutableTags().getMutableMap().put(tags__.getKey(), tags__.getValue()); + bitField0_ |= 0x00200000; + break; + } // case 210 + case 218: + { + input.readMessage( + internalGetBigtableConfigFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000020; + break; + } // case 218 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object name_ = ""; + + /** + * + * + *
+     * Required. Identifier. The name of the subscription. It must have the format
+     * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must
+     * start with a letter, and contain only letters (`[A-Za-z]`), numbers
+     * (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
+     * plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
+     * in length, and it must not start with `"goog"`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. Identifier. The name of the subscription. It must have the format
+     * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must
+     * start with a letter, and contain only letters (`[A-Za-z]`), numbers
+     * (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
+     * plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
+     * in length, and it must not start with `"goog"`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. Identifier. The name of the subscription. It must have the format
+     * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must
+     * start with a letter, and contain only letters (`[A-Za-z]`), numbers
+     * (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
+     * plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
+     * in length, and it must not start with `"goog"`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Identifier. The name of the subscription. It must have the format
+     * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must
+     * start with a letter, and contain only letters (`[A-Za-z]`), numbers
+     * (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
+     * plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
+     * in length, and it must not start with `"goog"`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Identifier. The name of the subscription. It must have the format
+     * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must
+     * start with a letter, and contain only letters (`[A-Za-z]`), numbers
+     * (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
+     * plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
+     * in length, and it must not start with `"goog"`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object topic_ = ""; + + /** + * + * + *
+     * Required. The name of the topic from which this subscription is receiving
+     * messages. Format is `projects/{project}/topics/{topic}`. The value of this
+     * field will be `_deleted-topic_` if the topic has been deleted.
+     * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + public java.lang.String getTopic() { + java.lang.Object ref = topic_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + topic_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the topic from which this subscription is receiving
+     * messages. Format is `projects/{project}/topics/{topic}`. The value of this
+     * field will be `_deleted-topic_` if the topic has been deleted.
+     * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + public com.google.protobuf.ByteString getTopicBytes() { + java.lang.Object ref = topic_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + topic_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the topic from which this subscription is receiving
+     * messages. Format is `projects/{project}/topics/{topic}`. The value of this
+     * field will be `_deleted-topic_` if the topic has been deleted.
+     * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The topic to set. + * @return This builder for chaining. + */ + public Builder setTopic(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + topic_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the topic from which this subscription is receiving
+     * messages. Format is `projects/{project}/topics/{topic}`. The value of this
+     * field will be `_deleted-topic_` if the topic has been deleted.
+     * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearTopic() { + topic_ = getDefaultInstance().getTopic(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the topic from which this subscription is receiving
+     * messages. Format is `projects/{project}/topics/{topic}`. The value of this
+     * field will be `_deleted-topic_` if the topic has been deleted.
+     * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for topic to set. + * @return This builder for chaining. + */ + public Builder setTopicBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + topic_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private com.google.pubsub.v1.PushConfig pushConfig_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig, + com.google.pubsub.v1.PushConfig.Builder, + com.google.pubsub.v1.PushConfigOrBuilder> + pushConfigBuilder_; + + /** + * + * + *
+     * Optional. If push delivery is used with this subscription, this field is
+     * used to configure it.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the pushConfig field is set. + */ + public boolean hasPushConfig() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
+     * Optional. If push delivery is used with this subscription, this field is
+     * used to configure it.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The pushConfig. + */ + public com.google.pubsub.v1.PushConfig getPushConfig() { + if (pushConfigBuilder_ == null) { + return pushConfig_ == null + ? com.google.pubsub.v1.PushConfig.getDefaultInstance() + : pushConfig_; + } else { + return pushConfigBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. If push delivery is used with this subscription, this field is
+     * used to configure it.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setPushConfig(com.google.pubsub.v1.PushConfig value) { + if (pushConfigBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + pushConfig_ = value; + } else { + pushConfigBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If push delivery is used with this subscription, this field is
+     * used to configure it.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setPushConfig(com.google.pubsub.v1.PushConfig.Builder builderForValue) { + if (pushConfigBuilder_ == null) { + pushConfig_ = builderForValue.build(); + } else { + pushConfigBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If push delivery is used with this subscription, this field is
+     * used to configure it.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergePushConfig(com.google.pubsub.v1.PushConfig value) { + if (pushConfigBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0) + && pushConfig_ != null + && pushConfig_ != com.google.pubsub.v1.PushConfig.getDefaultInstance()) { + getPushConfigBuilder().mergeFrom(value); + } else { + pushConfig_ = value; + } + } else { + pushConfigBuilder_.mergeFrom(value); + } + if (pushConfig_ != null) { + bitField0_ |= 0x00000004; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. If push delivery is used with this subscription, this field is
+     * used to configure it.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearPushConfig() { + bitField0_ = (bitField0_ & ~0x00000004); + pushConfig_ = null; + if (pushConfigBuilder_ != null) { + pushConfigBuilder_.dispose(); + pushConfigBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If push delivery is used with this subscription, this field is
+     * used to configure it.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.PushConfig.Builder getPushConfigBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return internalGetPushConfigFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. If push delivery is used with this subscription, this field is
+     * used to configure it.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.PushConfigOrBuilder getPushConfigOrBuilder() { + if (pushConfigBuilder_ != null) { + return pushConfigBuilder_.getMessageOrBuilder(); + } else { + return pushConfig_ == null + ? com.google.pubsub.v1.PushConfig.getDefaultInstance() + : pushConfig_; + } + } + + /** + * + * + *
+     * Optional. If push delivery is used with this subscription, this field is
+     * used to configure it.
+     * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig, + com.google.pubsub.v1.PushConfig.Builder, + com.google.pubsub.v1.PushConfigOrBuilder> + internalGetPushConfigFieldBuilder() { + if (pushConfigBuilder_ == null) { + pushConfigBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.PushConfig, + com.google.pubsub.v1.PushConfig.Builder, + com.google.pubsub.v1.PushConfigOrBuilder>( + getPushConfig(), getParentForChildren(), isClean()); + pushConfig_ = null; + } + return pushConfigBuilder_; + } + + private com.google.pubsub.v1.BigQueryConfig bigqueryConfig_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.BigQueryConfig, + com.google.pubsub.v1.BigQueryConfig.Builder, + com.google.pubsub.v1.BigQueryConfigOrBuilder> + bigqueryConfigBuilder_; + + /** + * + * + *
+     * Optional. If delivery to BigQuery is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the bigqueryConfig field is set. + */ + public boolean hasBigqueryConfig() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
+     * Optional. If delivery to BigQuery is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The bigqueryConfig. + */ + public com.google.pubsub.v1.BigQueryConfig getBigqueryConfig() { + if (bigqueryConfigBuilder_ == null) { + return bigqueryConfig_ == null + ? com.google.pubsub.v1.BigQueryConfig.getDefaultInstance() + : bigqueryConfig_; + } else { + return bigqueryConfigBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. If delivery to BigQuery is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setBigqueryConfig(com.google.pubsub.v1.BigQueryConfig value) { + if (bigqueryConfigBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + bigqueryConfig_ = value; + } else { + bigqueryConfigBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If delivery to BigQuery is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setBigqueryConfig(com.google.pubsub.v1.BigQueryConfig.Builder builderForValue) { + if (bigqueryConfigBuilder_ == null) { + bigqueryConfig_ = builderForValue.build(); + } else { + bigqueryConfigBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If delivery to BigQuery is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeBigqueryConfig(com.google.pubsub.v1.BigQueryConfig value) { + if (bigqueryConfigBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) + && bigqueryConfig_ != null + && bigqueryConfig_ != com.google.pubsub.v1.BigQueryConfig.getDefaultInstance()) { + getBigqueryConfigBuilder().mergeFrom(value); + } else { + bigqueryConfig_ = value; + } + } else { + bigqueryConfigBuilder_.mergeFrom(value); + } + if (bigqueryConfig_ != null) { + bitField0_ |= 0x00000008; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. If delivery to BigQuery is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearBigqueryConfig() { + bitField0_ = (bitField0_ & ~0x00000008); + bigqueryConfig_ = null; + if (bigqueryConfigBuilder_ != null) { + bigqueryConfigBuilder_.dispose(); + bigqueryConfigBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If delivery to BigQuery is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.BigQueryConfig.Builder getBigqueryConfigBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return internalGetBigqueryConfigFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. If delivery to BigQuery is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.BigQueryConfigOrBuilder getBigqueryConfigOrBuilder() { + if (bigqueryConfigBuilder_ != null) { + return bigqueryConfigBuilder_.getMessageOrBuilder(); + } else { + return bigqueryConfig_ == null + ? com.google.pubsub.v1.BigQueryConfig.getDefaultInstance() + : bigqueryConfig_; + } + } + + /** + * + * + *
+     * Optional. If delivery to BigQuery is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.BigQueryConfig, + com.google.pubsub.v1.BigQueryConfig.Builder, + com.google.pubsub.v1.BigQueryConfigOrBuilder> + internalGetBigqueryConfigFieldBuilder() { + if (bigqueryConfigBuilder_ == null) { + bigqueryConfigBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.BigQueryConfig, + com.google.pubsub.v1.BigQueryConfig.Builder, + com.google.pubsub.v1.BigQueryConfigOrBuilder>( + getBigqueryConfig(), getParentForChildren(), isClean()); + bigqueryConfig_ = null; + } + return bigqueryConfigBuilder_; + } + + private com.google.pubsub.v1.CloudStorageConfig cloudStorageConfig_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.CloudStorageConfig, + com.google.pubsub.v1.CloudStorageConfig.Builder, + com.google.pubsub.v1.CloudStorageConfigOrBuilder> + cloudStorageConfigBuilder_; + + /** + * + * + *
+     * Optional. If delivery to Google Cloud Storage is used with this
+     * subscription, this field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cloudStorageConfig field is set. + */ + public boolean hasCloudStorageConfig() { + return ((bitField0_ & 0x00000010) != 0); + } + + /** + * + * + *
+     * Optional. If delivery to Google Cloud Storage is used with this
+     * subscription, this field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cloudStorageConfig. + */ + public com.google.pubsub.v1.CloudStorageConfig getCloudStorageConfig() { + if (cloudStorageConfigBuilder_ == null) { + return cloudStorageConfig_ == null + ? com.google.pubsub.v1.CloudStorageConfig.getDefaultInstance() + : cloudStorageConfig_; + } else { + return cloudStorageConfigBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. If delivery to Google Cloud Storage is used with this
+     * subscription, this field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCloudStorageConfig(com.google.pubsub.v1.CloudStorageConfig value) { + if (cloudStorageConfigBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + cloudStorageConfig_ = value; + } else { + cloudStorageConfigBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If delivery to Google Cloud Storage is used with this
+     * subscription, this field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setCloudStorageConfig( + com.google.pubsub.v1.CloudStorageConfig.Builder builderForValue) { + if (cloudStorageConfigBuilder_ == null) { + cloudStorageConfig_ = builderForValue.build(); + } else { + cloudStorageConfigBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If delivery to Google Cloud Storage is used with this
+     * subscription, this field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeCloudStorageConfig(com.google.pubsub.v1.CloudStorageConfig value) { + if (cloudStorageConfigBuilder_ == null) { + if (((bitField0_ & 0x00000010) != 0) + && cloudStorageConfig_ != null + && cloudStorageConfig_ + != com.google.pubsub.v1.CloudStorageConfig.getDefaultInstance()) { + getCloudStorageConfigBuilder().mergeFrom(value); + } else { + cloudStorageConfig_ = value; + } + } else { + cloudStorageConfigBuilder_.mergeFrom(value); + } + if (cloudStorageConfig_ != null) { + bitField0_ |= 0x00000010; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. If delivery to Google Cloud Storage is used with this
+     * subscription, this field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearCloudStorageConfig() { + bitField0_ = (bitField0_ & ~0x00000010); + cloudStorageConfig_ = null; + if (cloudStorageConfigBuilder_ != null) { + cloudStorageConfigBuilder_.dispose(); + cloudStorageConfigBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If delivery to Google Cloud Storage is used with this
+     * subscription, this field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.CloudStorageConfig.Builder getCloudStorageConfigBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return internalGetCloudStorageConfigFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. If delivery to Google Cloud Storage is used with this
+     * subscription, this field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.CloudStorageConfigOrBuilder getCloudStorageConfigOrBuilder() { + if (cloudStorageConfigBuilder_ != null) { + return cloudStorageConfigBuilder_.getMessageOrBuilder(); + } else { + return cloudStorageConfig_ == null + ? com.google.pubsub.v1.CloudStorageConfig.getDefaultInstance() + : cloudStorageConfig_; + } + } + + /** + * + * + *
+     * Optional. If delivery to Google Cloud Storage is used with this
+     * subscription, this field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.CloudStorageConfig, + com.google.pubsub.v1.CloudStorageConfig.Builder, + com.google.pubsub.v1.CloudStorageConfigOrBuilder> + internalGetCloudStorageConfigFieldBuilder() { + if (cloudStorageConfigBuilder_ == null) { + cloudStorageConfigBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.CloudStorageConfig, + com.google.pubsub.v1.CloudStorageConfig.Builder, + com.google.pubsub.v1.CloudStorageConfigOrBuilder>( + getCloudStorageConfig(), getParentForChildren(), isClean()); + cloudStorageConfig_ = null; + } + return cloudStorageConfigBuilder_; + } + + private com.google.pubsub.v1.BigtableConfig bigtableConfig_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.BigtableConfig, + com.google.pubsub.v1.BigtableConfig.Builder, + com.google.pubsub.v1.BigtableConfigOrBuilder> + bigtableConfigBuilder_; + + /** + * + * + *
+     * Optional. If delivery to Bigtable is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the bigtableConfig field is set. + */ + public boolean hasBigtableConfig() { + return ((bitField0_ & 0x00000020) != 0); + } + + /** + * + * + *
+     * Optional. If delivery to Bigtable is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The bigtableConfig. + */ + public com.google.pubsub.v1.BigtableConfig getBigtableConfig() { + if (bigtableConfigBuilder_ == null) { + return bigtableConfig_ == null + ? com.google.pubsub.v1.BigtableConfig.getDefaultInstance() + : bigtableConfig_; + } else { + return bigtableConfigBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. If delivery to Bigtable is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setBigtableConfig(com.google.pubsub.v1.BigtableConfig value) { + if (bigtableConfigBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + bigtableConfig_ = value; + } else { + bigtableConfigBuilder_.setMessage(value); + } + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If delivery to Bigtable is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setBigtableConfig(com.google.pubsub.v1.BigtableConfig.Builder builderForValue) { + if (bigtableConfigBuilder_ == null) { + bigtableConfig_ = builderForValue.build(); + } else { + bigtableConfigBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If delivery to Bigtable is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeBigtableConfig(com.google.pubsub.v1.BigtableConfig value) { + if (bigtableConfigBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0) + && bigtableConfig_ != null + && bigtableConfig_ != com.google.pubsub.v1.BigtableConfig.getDefaultInstance()) { + getBigtableConfigBuilder().mergeFrom(value); + } else { + bigtableConfig_ = value; + } + } else { + bigtableConfigBuilder_.mergeFrom(value); + } + if (bigtableConfig_ != null) { + bitField0_ |= 0x00000020; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. If delivery to Bigtable is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearBigtableConfig() { + bitField0_ = (bitField0_ & ~0x00000020); + bigtableConfig_ = null; + if (bigtableConfigBuilder_ != null) { + bigtableConfigBuilder_.dispose(); + bigtableConfigBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If delivery to Bigtable is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.BigtableConfig.Builder getBigtableConfigBuilder() { + bitField0_ |= 0x00000020; + onChanged(); + return internalGetBigtableConfigFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. If delivery to Bigtable is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.BigtableConfigOrBuilder getBigtableConfigOrBuilder() { + if (bigtableConfigBuilder_ != null) { + return bigtableConfigBuilder_.getMessageOrBuilder(); + } else { + return bigtableConfig_ == null + ? com.google.pubsub.v1.BigtableConfig.getDefaultInstance() + : bigtableConfig_; + } + } + + /** + * + * + *
+     * Optional. If delivery to Bigtable is used with this subscription, this
+     * field is used to configure it.
+     * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.BigtableConfig, + com.google.pubsub.v1.BigtableConfig.Builder, + com.google.pubsub.v1.BigtableConfigOrBuilder> + internalGetBigtableConfigFieldBuilder() { + if (bigtableConfigBuilder_ == null) { + bigtableConfigBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.BigtableConfig, + com.google.pubsub.v1.BigtableConfig.Builder, + com.google.pubsub.v1.BigtableConfigOrBuilder>( + getBigtableConfig(), getParentForChildren(), isClean()); + bigtableConfig_ = null; + } + return bigtableConfigBuilder_; + } + + private int ackDeadlineSeconds_; + + /** + * + * + *
+     * Optional. The approximate amount of time (on a best-effort basis) Pub/Sub
+     * waits for the subscriber to acknowledge receipt before resending the
+     * message. In the interval after the message is delivered and before it is
+     * acknowledged, it is considered to be _outstanding_. During that time
+     * period, the message will not be redelivered (on a best-effort basis).
+     *
+     * For pull subscriptions, this value is used as the initial value for the ack
+     * deadline. To override this value for a given message, call
+     * `ModifyAckDeadline` with the corresponding `ack_id` if using
+     * non-streaming pull or send the `ack_id` in a
+     * `StreamingModifyAckDeadlineRequest` if using streaming pull.
+     * The minimum custom deadline you can specify is 10 seconds.
+     * The maximum custom deadline you can specify is 600 seconds (10 minutes).
+     * If this parameter is 0, a default value of 10 seconds is used.
+     *
+     * For push delivery, this value is also used to set the request timeout for
+     * the call to the push endpoint.
+     *
+     * If the subscriber never acknowledges the message, the Pub/Sub
+     * system will eventually redeliver the message.
+     * 
+ * + * int32 ack_deadline_seconds = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The ackDeadlineSeconds. + */ + @java.lang.Override + public int getAckDeadlineSeconds() { + return ackDeadlineSeconds_; + } + + /** + * + * + *
+     * Optional. The approximate amount of time (on a best-effort basis) Pub/Sub
+     * waits for the subscriber to acknowledge receipt before resending the
+     * message. In the interval after the message is delivered and before it is
+     * acknowledged, it is considered to be _outstanding_. During that time
+     * period, the message will not be redelivered (on a best-effort basis).
+     *
+     * For pull subscriptions, this value is used as the initial value for the ack
+     * deadline. To override this value for a given message, call
+     * `ModifyAckDeadline` with the corresponding `ack_id` if using
+     * non-streaming pull or send the `ack_id` in a
+     * `StreamingModifyAckDeadlineRequest` if using streaming pull.
+     * The minimum custom deadline you can specify is 10 seconds.
+     * The maximum custom deadline you can specify is 600 seconds (10 minutes).
+     * If this parameter is 0, a default value of 10 seconds is used.
+     *
+     * For push delivery, this value is also used to set the request timeout for
+     * the call to the push endpoint.
+     *
+     * If the subscriber never acknowledges the message, the Pub/Sub
+     * system will eventually redeliver the message.
+     * 
+ * + * int32 ack_deadline_seconds = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The ackDeadlineSeconds to set. + * @return This builder for chaining. + */ + public Builder setAckDeadlineSeconds(int value) { + + ackDeadlineSeconds_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The approximate amount of time (on a best-effort basis) Pub/Sub
+     * waits for the subscriber to acknowledge receipt before resending the
+     * message. In the interval after the message is delivered and before it is
+     * acknowledged, it is considered to be _outstanding_. During that time
+     * period, the message will not be redelivered (on a best-effort basis).
+     *
+     * For pull subscriptions, this value is used as the initial value for the ack
+     * deadline. To override this value for a given message, call
+     * `ModifyAckDeadline` with the corresponding `ack_id` if using
+     * non-streaming pull or send the `ack_id` in a
+     * `StreamingModifyAckDeadlineRequest` if using streaming pull.
+     * The minimum custom deadline you can specify is 10 seconds.
+     * The maximum custom deadline you can specify is 600 seconds (10 minutes).
+     * If this parameter is 0, a default value of 10 seconds is used.
+     *
+     * For push delivery, this value is also used to set the request timeout for
+     * the call to the push endpoint.
+     *
+     * If the subscriber never acknowledges the message, the Pub/Sub
+     * system will eventually redeliver the message.
+     * 
+ * + * int32 ack_deadline_seconds = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearAckDeadlineSeconds() { + bitField0_ = (bitField0_ & ~0x00000040); + ackDeadlineSeconds_ = 0; + onChanged(); + return this; + } + + private boolean retainAckedMessages_; + + /** + * + * + *
+     * Optional. Indicates whether to retain acknowledged messages. If true, then
+     * messages are not expunged from the subscription's backlog, even if they are
+     * acknowledged, until they fall out of the `message_retention_duration`
+     * window. This must be true if you would like to [`Seek` to a timestamp]
+     * (https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time) in
+     * the past to replay previously-acknowledged messages.
+     * 
+ * + * bool retain_acked_messages = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The retainAckedMessages. + */ + @java.lang.Override + public boolean getRetainAckedMessages() { + return retainAckedMessages_; + } + + /** + * + * + *
+     * Optional. Indicates whether to retain acknowledged messages. If true, then
+     * messages are not expunged from the subscription's backlog, even if they are
+     * acknowledged, until they fall out of the `message_retention_duration`
+     * window. This must be true if you would like to [`Seek` to a timestamp]
+     * (https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time) in
+     * the past to replay previously-acknowledged messages.
+     * 
+ * + * bool retain_acked_messages = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The retainAckedMessages to set. + * @return This builder for chaining. + */ + public Builder setRetainAckedMessages(boolean value) { + + retainAckedMessages_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Indicates whether to retain acknowledged messages. If true, then
+     * messages are not expunged from the subscription's backlog, even if they are
+     * acknowledged, until they fall out of the `message_retention_duration`
+     * window. This must be true if you would like to [`Seek` to a timestamp]
+     * (https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time) in
+     * the past to replay previously-acknowledged messages.
+     * 
+ * + * bool retain_acked_messages = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearRetainAckedMessages() { + bitField0_ = (bitField0_ & ~0x00000080); + retainAckedMessages_ = false; + onChanged(); + return this; + } + + private com.google.protobuf.Duration messageRetentionDuration_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + messageRetentionDurationBuilder_; + + /** + * + * + *
+     * Optional. How long to retain unacknowledged messages in the subscription's
+     * backlog, from the moment a message is published. If `retain_acked_messages`
+     * is true, then this also configures the retention of acknowledged messages,
+     * and thus configures how far back in time a `Seek` can be done. Defaults to
+     * 7 days. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageRetentionDuration field is set. + */ + public boolean hasMessageRetentionDuration() { + return ((bitField0_ & 0x00000100) != 0); + } + + /** + * + * + *
+     * Optional. How long to retain unacknowledged messages in the subscription's
+     * backlog, from the moment a message is published. If `retain_acked_messages`
+     * is true, then this also configures the retention of acknowledged messages,
+     * and thus configures how far back in time a `Seek` can be done. Defaults to
+     * 7 days. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageRetentionDuration. + */ + public com.google.protobuf.Duration getMessageRetentionDuration() { + if (messageRetentionDurationBuilder_ == null) { + return messageRetentionDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : messageRetentionDuration_; + } else { + return messageRetentionDurationBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. How long to retain unacknowledged messages in the subscription's
+     * backlog, from the moment a message is published. If `retain_acked_messages`
+     * is true, then this also configures the retention of acknowledged messages,
+     * and thus configures how far back in time a `Seek` can be done. Defaults to
+     * 7 days. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageRetentionDuration(com.google.protobuf.Duration value) { + if (messageRetentionDurationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + messageRetentionDuration_ = value; + } else { + messageRetentionDurationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. How long to retain unacknowledged messages in the subscription's
+     * backlog, from the moment a message is published. If `retain_acked_messages`
+     * is true, then this also configures the retention of acknowledged messages,
+     * and thus configures how far back in time a `Seek` can be done. Defaults to
+     * 7 days. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageRetentionDuration( + com.google.protobuf.Duration.Builder builderForValue) { + if (messageRetentionDurationBuilder_ == null) { + messageRetentionDuration_ = builderForValue.build(); + } else { + messageRetentionDurationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. How long to retain unacknowledged messages in the subscription's
+     * backlog, from the moment a message is published. If `retain_acked_messages`
+     * is true, then this also configures the retention of acknowledged messages,
+     * and thus configures how far back in time a `Seek` can be done. Defaults to
+     * 7 days. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeMessageRetentionDuration(com.google.protobuf.Duration value) { + if (messageRetentionDurationBuilder_ == null) { + if (((bitField0_ & 0x00000100) != 0) + && messageRetentionDuration_ != null + && messageRetentionDuration_ != com.google.protobuf.Duration.getDefaultInstance()) { + getMessageRetentionDurationBuilder().mergeFrom(value); + } else { + messageRetentionDuration_ = value; + } + } else { + messageRetentionDurationBuilder_.mergeFrom(value); + } + if (messageRetentionDuration_ != null) { + bitField0_ |= 0x00000100; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. How long to retain unacknowledged messages in the subscription's
+     * backlog, from the moment a message is published. If `retain_acked_messages`
+     * is true, then this also configures the retention of acknowledged messages,
+     * and thus configures how far back in time a `Seek` can be done. Defaults to
+     * 7 days. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMessageRetentionDuration() { + bitField0_ = (bitField0_ & ~0x00000100); + messageRetentionDuration_ = null; + if (messageRetentionDurationBuilder_ != null) { + messageRetentionDurationBuilder_.dispose(); + messageRetentionDurationBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. How long to retain unacknowledged messages in the subscription's
+     * backlog, from the moment a message is published. If `retain_acked_messages`
+     * is true, then this also configures the retention of acknowledged messages,
+     * and thus configures how far back in time a `Seek` can be done. Defaults to
+     * 7 days. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.Duration.Builder getMessageRetentionDurationBuilder() { + bitField0_ |= 0x00000100; + onChanged(); + return internalGetMessageRetentionDurationFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. How long to retain unacknowledged messages in the subscription's
+     * backlog, from the moment a message is published. If `retain_acked_messages`
+     * is true, then this also configures the retention of acknowledged messages,
+     * and thus configures how far back in time a `Seek` can be done. Defaults to
+     * 7 days. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.DurationOrBuilder getMessageRetentionDurationOrBuilder() { + if (messageRetentionDurationBuilder_ != null) { + return messageRetentionDurationBuilder_.getMessageOrBuilder(); + } else { + return messageRetentionDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : messageRetentionDuration_; + } + } + + /** + * + * + *
+     * Optional. How long to retain unacknowledged messages in the subscription's
+     * backlog, from the moment a message is published. If `retain_acked_messages`
+     * is true, then this also configures the retention of acknowledged messages,
+     * and thus configures how far back in time a `Seek` can be done. Defaults to
+     * 7 days. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + internalGetMessageRetentionDurationFieldBuilder() { + if (messageRetentionDurationBuilder_ == null) { + messageRetentionDurationBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder>( + getMessageRetentionDuration(), getParentForChildren(), isClean()); + messageRetentionDuration_ = null; + } + return messageRetentionDurationBuilder_; + } + + private com.google.protobuf.MapField labels_; + + private com.google.protobuf.MapField internalGetLabels() { + if (labels_ == null) { + return com.google.protobuf.MapField.emptyMapField(LabelsDefaultEntryHolder.defaultEntry); + } + return labels_; + } + + private com.google.protobuf.MapField + internalGetMutableLabels() { + if (labels_ == null) { + labels_ = com.google.protobuf.MapField.newMapField(LabelsDefaultEntryHolder.defaultEntry); + } + if (!labels_.isMutable()) { + labels_ = labels_.copy(); + } + bitField0_ |= 0x00000200; + onChanged(); + return labels_; + } + + public int getLabelsCount() { + return internalGetLabels().getMap().size(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public boolean containsLabels(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetLabels().getMap().containsKey(key); + } + + /** Use {@link #getLabelsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getLabels() { + return getLabelsMap(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.util.Map getLabelsMap() { + return internalGetLabels().getMap(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public /* nullable */ java.lang.String getLabelsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.lang.String getLabelsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearLabels() { + bitField0_ = (bitField0_ & ~0x00000200); + internalGetMutableLabels().getMutableMap().clear(); + return this; + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder removeLabels(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + internalGetMutableLabels().getMutableMap().remove(key); + return this; + } + + /** Use alternate mutation accessors instead. */ + @java.lang.Deprecated + public java.util.Map getMutableLabels() { + bitField0_ |= 0x00000200; + return internalGetMutableLabels().getMutableMap(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder putLabels(java.lang.String key, java.lang.String value) { + if (key == null) { + throw new NullPointerException("map key"); + } + if (value == null) { + throw new NullPointerException("map value"); + } + internalGetMutableLabels().getMutableMap().put(key, value); + bitField0_ |= 0x00000200; + return this; + } + + /** + * + * + *
+     * Optional. See [Creating and managing
+     * labels](https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder putAllLabels(java.util.Map values) { + internalGetMutableLabels().getMutableMap().putAll(values); + bitField0_ |= 0x00000200; + return this; + } + + private boolean enableMessageOrdering_; + + /** + * + * + *
+     * Optional. If true, messages published with the same `ordering_key` in
+     * `PubsubMessage` will be delivered to the subscribers in the order in which
+     * they are received by the Pub/Sub system. Otherwise, they may be delivered
+     * in any order.
+     * 
+ * + * bool enable_message_ordering = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The enableMessageOrdering. + */ + @java.lang.Override + public boolean getEnableMessageOrdering() { + return enableMessageOrdering_; + } + + /** + * + * + *
+     * Optional. If true, messages published with the same `ordering_key` in
+     * `PubsubMessage` will be delivered to the subscribers in the order in which
+     * they are received by the Pub/Sub system. Otherwise, they may be delivered
+     * in any order.
+     * 
+ * + * bool enable_message_ordering = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The enableMessageOrdering to set. + * @return This builder for chaining. + */ + public Builder setEnableMessageOrdering(boolean value) { + + enableMessageOrdering_ = value; + bitField0_ |= 0x00000400; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If true, messages published with the same `ordering_key` in
+     * `PubsubMessage` will be delivered to the subscribers in the order in which
+     * they are received by the Pub/Sub system. Otherwise, they may be delivered
+     * in any order.
+     * 
+ * + * bool enable_message_ordering = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearEnableMessageOrdering() { + bitField0_ = (bitField0_ & ~0x00000400); + enableMessageOrdering_ = false; + onChanged(); + return this; + } + + private com.google.pubsub.v1.ExpirationPolicy expirationPolicy_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.ExpirationPolicy, + com.google.pubsub.v1.ExpirationPolicy.Builder, + com.google.pubsub.v1.ExpirationPolicyOrBuilder> + expirationPolicyBuilder_; + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for this subscription's
+     * expiration. A subscription is considered active as long as any connected
+     * subscriber is successfully consuming messages from the subscription or is
+     * issuing operations on the subscription. If `expiration_policy` is not set,
+     * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+     * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+     * but `expiration_policy.ttl` is not set, the subscription never expires.
+     * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the expirationPolicy field is set. + */ + public boolean hasExpirationPolicy() { + return ((bitField0_ & 0x00000800) != 0); + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for this subscription's
+     * expiration. A subscription is considered active as long as any connected
+     * subscriber is successfully consuming messages from the subscription or is
+     * issuing operations on the subscription. If `expiration_policy` is not set,
+     * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+     * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+     * but `expiration_policy.ttl` is not set, the subscription never expires.
+     * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The expirationPolicy. + */ + public com.google.pubsub.v1.ExpirationPolicy getExpirationPolicy() { + if (expirationPolicyBuilder_ == null) { + return expirationPolicy_ == null + ? com.google.pubsub.v1.ExpirationPolicy.getDefaultInstance() + : expirationPolicy_; + } else { + return expirationPolicyBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for this subscription's
+     * expiration. A subscription is considered active as long as any connected
+     * subscriber is successfully consuming messages from the subscription or is
+     * issuing operations on the subscription. If `expiration_policy` is not set,
+     * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+     * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+     * but `expiration_policy.ttl` is not set, the subscription never expires.
+     * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setExpirationPolicy(com.google.pubsub.v1.ExpirationPolicy value) { + if (expirationPolicyBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + expirationPolicy_ = value; + } else { + expirationPolicyBuilder_.setMessage(value); + } + bitField0_ |= 0x00000800; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for this subscription's
+     * expiration. A subscription is considered active as long as any connected
+     * subscriber is successfully consuming messages from the subscription or is
+     * issuing operations on the subscription. If `expiration_policy` is not set,
+     * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+     * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+     * but `expiration_policy.ttl` is not set, the subscription never expires.
+     * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setExpirationPolicy( + com.google.pubsub.v1.ExpirationPolicy.Builder builderForValue) { + if (expirationPolicyBuilder_ == null) { + expirationPolicy_ = builderForValue.build(); + } else { + expirationPolicyBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000800; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for this subscription's
+     * expiration. A subscription is considered active as long as any connected
+     * subscriber is successfully consuming messages from the subscription or is
+     * issuing operations on the subscription. If `expiration_policy` is not set,
+     * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+     * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+     * but `expiration_policy.ttl` is not set, the subscription never expires.
+     * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeExpirationPolicy(com.google.pubsub.v1.ExpirationPolicy value) { + if (expirationPolicyBuilder_ == null) { + if (((bitField0_ & 0x00000800) != 0) + && expirationPolicy_ != null + && expirationPolicy_ != com.google.pubsub.v1.ExpirationPolicy.getDefaultInstance()) { + getExpirationPolicyBuilder().mergeFrom(value); + } else { + expirationPolicy_ = value; + } + } else { + expirationPolicyBuilder_.mergeFrom(value); + } + if (expirationPolicy_ != null) { + bitField0_ |= 0x00000800; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for this subscription's
+     * expiration. A subscription is considered active as long as any connected
+     * subscriber is successfully consuming messages from the subscription or is
+     * issuing operations on the subscription. If `expiration_policy` is not set,
+     * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+     * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+     * but `expiration_policy.ttl` is not set, the subscription never expires.
+     * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearExpirationPolicy() { + bitField0_ = (bitField0_ & ~0x00000800); + expirationPolicy_ = null; + if (expirationPolicyBuilder_ != null) { + expirationPolicyBuilder_.dispose(); + expirationPolicyBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for this subscription's
+     * expiration. A subscription is considered active as long as any connected
+     * subscriber is successfully consuming messages from the subscription or is
+     * issuing operations on the subscription. If `expiration_policy` is not set,
+     * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+     * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+     * but `expiration_policy.ttl` is not set, the subscription never expires.
+     * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.ExpirationPolicy.Builder getExpirationPolicyBuilder() { + bitField0_ |= 0x00000800; + onChanged(); + return internalGetExpirationPolicyFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for this subscription's
+     * expiration. A subscription is considered active as long as any connected
+     * subscriber is successfully consuming messages from the subscription or is
+     * issuing operations on the subscription. If `expiration_policy` is not set,
+     * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+     * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+     * but `expiration_policy.ttl` is not set, the subscription never expires.
+     * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.ExpirationPolicyOrBuilder getExpirationPolicyOrBuilder() { + if (expirationPolicyBuilder_ != null) { + return expirationPolicyBuilder_.getMessageOrBuilder(); + } else { + return expirationPolicy_ == null + ? com.google.pubsub.v1.ExpirationPolicy.getDefaultInstance() + : expirationPolicy_; + } + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for this subscription's
+     * expiration. A subscription is considered active as long as any connected
+     * subscriber is successfully consuming messages from the subscription or is
+     * issuing operations on the subscription. If `expiration_policy` is not set,
+     * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+     * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+     * but `expiration_policy.ttl` is not set, the subscription never expires.
+     * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.ExpirationPolicy, + com.google.pubsub.v1.ExpirationPolicy.Builder, + com.google.pubsub.v1.ExpirationPolicyOrBuilder> + internalGetExpirationPolicyFieldBuilder() { + if (expirationPolicyBuilder_ == null) { + expirationPolicyBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.ExpirationPolicy, + com.google.pubsub.v1.ExpirationPolicy.Builder, + com.google.pubsub.v1.ExpirationPolicyOrBuilder>( + getExpirationPolicy(), getParentForChildren(), isClean()); + expirationPolicy_ = null; + } + return expirationPolicyBuilder_; + } + + private java.lang.Object filter_ = ""; + + /** + * + * + *
+     * Optional. An expression written in the Pub/Sub [filter
+     * language](https://cloud.google.com/pubsub/docs/filtering). If non-empty,
+     * then only `PubsubMessage`s whose `attributes` field matches the filter are
+     * delivered on this subscription. If empty, then no messages are filtered
+     * out.
+     * 
+ * + * string filter = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The filter. + */ + public java.lang.String getFilter() { + java.lang.Object ref = filter_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + filter_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. An expression written in the Pub/Sub [filter
+     * language](https://cloud.google.com/pubsub/docs/filtering). If non-empty,
+     * then only `PubsubMessage`s whose `attributes` field matches the filter are
+     * delivered on this subscription. If empty, then no messages are filtered
+     * out.
+     * 
+ * + * string filter = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for filter. + */ + public com.google.protobuf.ByteString getFilterBytes() { + java.lang.Object ref = filter_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + filter_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. An expression written in the Pub/Sub [filter
+     * language](https://cloud.google.com/pubsub/docs/filtering). If non-empty,
+     * then only `PubsubMessage`s whose `attributes` field matches the filter are
+     * delivered on this subscription. If empty, then no messages are filtered
+     * out.
+     * 
+ * + * string filter = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The filter to set. + * @return This builder for chaining. + */ + public Builder setFilter(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + filter_ = value; + bitField0_ |= 0x00001000; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. An expression written in the Pub/Sub [filter
+     * language](https://cloud.google.com/pubsub/docs/filtering). If non-empty,
+     * then only `PubsubMessage`s whose `attributes` field matches the filter are
+     * delivered on this subscription. If empty, then no messages are filtered
+     * out.
+     * 
+ * + * string filter = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearFilter() { + filter_ = getDefaultInstance().getFilter(); + bitField0_ = (bitField0_ & ~0x00001000); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. An expression written in the Pub/Sub [filter
+     * language](https://cloud.google.com/pubsub/docs/filtering). If non-empty,
+     * then only `PubsubMessage`s whose `attributes` field matches the filter are
+     * delivered on this subscription. If empty, then no messages are filtered
+     * out.
+     * 
+ * + * string filter = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for filter to set. + * @return This builder for chaining. + */ + public Builder setFilterBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + filter_ = value; + bitField0_ |= 0x00001000; + onChanged(); + return this; + } + + private com.google.pubsub.v1.DeadLetterPolicy deadLetterPolicy_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.DeadLetterPolicy, + com.google.pubsub.v1.DeadLetterPolicy.Builder, + com.google.pubsub.v1.DeadLetterPolicyOrBuilder> + deadLetterPolicyBuilder_; + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for dead lettering
+     * messages in this subscription. If dead_letter_policy is not set, dead
+     * lettering is disabled.
+     *
+     * The Pub/Sub service account associated with this subscriptions's
+     * parent project (i.e.,
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+     * permission to Acknowledge() messages on this subscription.
+     * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the deadLetterPolicy field is set. + */ + public boolean hasDeadLetterPolicy() { + return ((bitField0_ & 0x00002000) != 0); + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for dead lettering
+     * messages in this subscription. If dead_letter_policy is not set, dead
+     * lettering is disabled.
+     *
+     * The Pub/Sub service account associated with this subscriptions's
+     * parent project (i.e.,
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+     * permission to Acknowledge() messages on this subscription.
+     * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The deadLetterPolicy. + */ + public com.google.pubsub.v1.DeadLetterPolicy getDeadLetterPolicy() { + if (deadLetterPolicyBuilder_ == null) { + return deadLetterPolicy_ == null + ? com.google.pubsub.v1.DeadLetterPolicy.getDefaultInstance() + : deadLetterPolicy_; + } else { + return deadLetterPolicyBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for dead lettering
+     * messages in this subscription. If dead_letter_policy is not set, dead
+     * lettering is disabled.
+     *
+     * The Pub/Sub service account associated with this subscriptions's
+     * parent project (i.e.,
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+     * permission to Acknowledge() messages on this subscription.
+     * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setDeadLetterPolicy(com.google.pubsub.v1.DeadLetterPolicy value) { + if (deadLetterPolicyBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + deadLetterPolicy_ = value; + } else { + deadLetterPolicyBuilder_.setMessage(value); + } + bitField0_ |= 0x00002000; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for dead lettering
+     * messages in this subscription. If dead_letter_policy is not set, dead
+     * lettering is disabled.
+     *
+     * The Pub/Sub service account associated with this subscriptions's
+     * parent project (i.e.,
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+     * permission to Acknowledge() messages on this subscription.
+     * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setDeadLetterPolicy( + com.google.pubsub.v1.DeadLetterPolicy.Builder builderForValue) { + if (deadLetterPolicyBuilder_ == null) { + deadLetterPolicy_ = builderForValue.build(); + } else { + deadLetterPolicyBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00002000; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for dead lettering
+     * messages in this subscription. If dead_letter_policy is not set, dead
+     * lettering is disabled.
+     *
+     * The Pub/Sub service account associated with this subscriptions's
+     * parent project (i.e.,
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+     * permission to Acknowledge() messages on this subscription.
+     * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeDeadLetterPolicy(com.google.pubsub.v1.DeadLetterPolicy value) { + if (deadLetterPolicyBuilder_ == null) { + if (((bitField0_ & 0x00002000) != 0) + && deadLetterPolicy_ != null + && deadLetterPolicy_ != com.google.pubsub.v1.DeadLetterPolicy.getDefaultInstance()) { + getDeadLetterPolicyBuilder().mergeFrom(value); + } else { + deadLetterPolicy_ = value; + } + } else { + deadLetterPolicyBuilder_.mergeFrom(value); + } + if (deadLetterPolicy_ != null) { + bitField0_ |= 0x00002000; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for dead lettering
+     * messages in this subscription. If dead_letter_policy is not set, dead
+     * lettering is disabled.
+     *
+     * The Pub/Sub service account associated with this subscriptions's
+     * parent project (i.e.,
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+     * permission to Acknowledge() messages on this subscription.
+     * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearDeadLetterPolicy() { + bitField0_ = (bitField0_ & ~0x00002000); + deadLetterPolicy_ = null; + if (deadLetterPolicyBuilder_ != null) { + deadLetterPolicyBuilder_.dispose(); + deadLetterPolicyBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for dead lettering
+     * messages in this subscription. If dead_letter_policy is not set, dead
+     * lettering is disabled.
+     *
+     * The Pub/Sub service account associated with this subscriptions's
+     * parent project (i.e.,
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+     * permission to Acknowledge() messages on this subscription.
+     * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.DeadLetterPolicy.Builder getDeadLetterPolicyBuilder() { + bitField0_ |= 0x00002000; + onChanged(); + return internalGetDeadLetterPolicyFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for dead lettering
+     * messages in this subscription. If dead_letter_policy is not set, dead
+     * lettering is disabled.
+     *
+     * The Pub/Sub service account associated with this subscriptions's
+     * parent project (i.e.,
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+     * permission to Acknowledge() messages on this subscription.
+     * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.DeadLetterPolicyOrBuilder getDeadLetterPolicyOrBuilder() { + if (deadLetterPolicyBuilder_ != null) { + return deadLetterPolicyBuilder_.getMessageOrBuilder(); + } else { + return deadLetterPolicy_ == null + ? com.google.pubsub.v1.DeadLetterPolicy.getDefaultInstance() + : deadLetterPolicy_; + } + } + + /** + * + * + *
+     * Optional. A policy that specifies the conditions for dead lettering
+     * messages in this subscription. If dead_letter_policy is not set, dead
+     * lettering is disabled.
+     *
+     * The Pub/Sub service account associated with this subscriptions's
+     * parent project (i.e.,
+     * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+     * permission to Acknowledge() messages on this subscription.
+     * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.DeadLetterPolicy, + com.google.pubsub.v1.DeadLetterPolicy.Builder, + com.google.pubsub.v1.DeadLetterPolicyOrBuilder> + internalGetDeadLetterPolicyFieldBuilder() { + if (deadLetterPolicyBuilder_ == null) { + deadLetterPolicyBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.DeadLetterPolicy, + com.google.pubsub.v1.DeadLetterPolicy.Builder, + com.google.pubsub.v1.DeadLetterPolicyOrBuilder>( + getDeadLetterPolicy(), getParentForChildren(), isClean()); + deadLetterPolicy_ = null; + } + return deadLetterPolicyBuilder_; + } + + private com.google.pubsub.v1.RetryPolicy retryPolicy_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.RetryPolicy, + com.google.pubsub.v1.RetryPolicy.Builder, + com.google.pubsub.v1.RetryPolicyOrBuilder> + retryPolicyBuilder_; + + /** + * + * + *
+     * Optional. A policy that specifies how Pub/Sub retries message delivery for
+     * this subscription.
+     *
+     * If not set, the default retry policy is applied. This generally implies
+     * that messages will be retried as soon as possible for healthy subscribers.
+     * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+     * events for a given message.
+     * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the retryPolicy field is set. + */ + public boolean hasRetryPolicy() { + return ((bitField0_ & 0x00004000) != 0); + } + + /** + * + * + *
+     * Optional. A policy that specifies how Pub/Sub retries message delivery for
+     * this subscription.
+     *
+     * If not set, the default retry policy is applied. This generally implies
+     * that messages will be retried as soon as possible for healthy subscribers.
+     * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+     * events for a given message.
+     * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The retryPolicy. + */ + public com.google.pubsub.v1.RetryPolicy getRetryPolicy() { + if (retryPolicyBuilder_ == null) { + return retryPolicy_ == null + ? com.google.pubsub.v1.RetryPolicy.getDefaultInstance() + : retryPolicy_; + } else { + return retryPolicyBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. A policy that specifies how Pub/Sub retries message delivery for
+     * this subscription.
+     *
+     * If not set, the default retry policy is applied. This generally implies
+     * that messages will be retried as soon as possible for healthy subscribers.
+     * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+     * events for a given message.
+     * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setRetryPolicy(com.google.pubsub.v1.RetryPolicy value) { + if (retryPolicyBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + retryPolicy_ = value; + } else { + retryPolicyBuilder_.setMessage(value); + } + bitField0_ |= 0x00004000; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A policy that specifies how Pub/Sub retries message delivery for
+     * this subscription.
+     *
+     * If not set, the default retry policy is applied. This generally implies
+     * that messages will be retried as soon as possible for healthy subscribers.
+     * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+     * events for a given message.
+     * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setRetryPolicy(com.google.pubsub.v1.RetryPolicy.Builder builderForValue) { + if (retryPolicyBuilder_ == null) { + retryPolicy_ = builderForValue.build(); + } else { + retryPolicyBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00004000; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A policy that specifies how Pub/Sub retries message delivery for
+     * this subscription.
+     *
+     * If not set, the default retry policy is applied. This generally implies
+     * that messages will be retried as soon as possible for healthy subscribers.
+     * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+     * events for a given message.
+     * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeRetryPolicy(com.google.pubsub.v1.RetryPolicy value) { + if (retryPolicyBuilder_ == null) { + if (((bitField0_ & 0x00004000) != 0) + && retryPolicy_ != null + && retryPolicy_ != com.google.pubsub.v1.RetryPolicy.getDefaultInstance()) { + getRetryPolicyBuilder().mergeFrom(value); + } else { + retryPolicy_ = value; + } + } else { + retryPolicyBuilder_.mergeFrom(value); + } + if (retryPolicy_ != null) { + bitField0_ |= 0x00004000; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. A policy that specifies how Pub/Sub retries message delivery for
+     * this subscription.
+     *
+     * If not set, the default retry policy is applied. This generally implies
+     * that messages will be retried as soon as possible for healthy subscribers.
+     * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+     * events for a given message.
+     * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearRetryPolicy() { + bitField0_ = (bitField0_ & ~0x00004000); + retryPolicy_ = null; + if (retryPolicyBuilder_ != null) { + retryPolicyBuilder_.dispose(); + retryPolicyBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A policy that specifies how Pub/Sub retries message delivery for
+     * this subscription.
+     *
+     * If not set, the default retry policy is applied. This generally implies
+     * that messages will be retried as soon as possible for healthy subscribers.
+     * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+     * events for a given message.
+     * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.RetryPolicy.Builder getRetryPolicyBuilder() { + bitField0_ |= 0x00004000; + onChanged(); + return internalGetRetryPolicyFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. A policy that specifies how Pub/Sub retries message delivery for
+     * this subscription.
+     *
+     * If not set, the default retry policy is applied. This generally implies
+     * that messages will be retried as soon as possible for healthy subscribers.
+     * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+     * events for a given message.
+     * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.RetryPolicyOrBuilder getRetryPolicyOrBuilder() { + if (retryPolicyBuilder_ != null) { + return retryPolicyBuilder_.getMessageOrBuilder(); + } else { + return retryPolicy_ == null + ? com.google.pubsub.v1.RetryPolicy.getDefaultInstance() + : retryPolicy_; + } + } + + /** + * + * + *
+     * Optional. A policy that specifies how Pub/Sub retries message delivery for
+     * this subscription.
+     *
+     * If not set, the default retry policy is applied. This generally implies
+     * that messages will be retried as soon as possible for healthy subscribers.
+     * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+     * events for a given message.
+     * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.RetryPolicy, + com.google.pubsub.v1.RetryPolicy.Builder, + com.google.pubsub.v1.RetryPolicyOrBuilder> + internalGetRetryPolicyFieldBuilder() { + if (retryPolicyBuilder_ == null) { + retryPolicyBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.RetryPolicy, + com.google.pubsub.v1.RetryPolicy.Builder, + com.google.pubsub.v1.RetryPolicyOrBuilder>( + getRetryPolicy(), getParentForChildren(), isClean()); + retryPolicy_ = null; + } + return retryPolicyBuilder_; + } + + private boolean detached_; + + /** + * + * + *
+     * Optional. Indicates whether the subscription is detached from its topic.
+     * Detached subscriptions don't receive messages from their topic and don't
+     * retain any backlog. `Pull` and `StreamingPull` requests will return
+     * FAILED_PRECONDITION. If the subscription is a push subscription, pushes to
+     * the endpoint will not be made.
+     * 
+ * + * bool detached = 15 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The detached. + */ + @java.lang.Override + public boolean getDetached() { + return detached_; + } + + /** + * + * + *
+     * Optional. Indicates whether the subscription is detached from its topic.
+     * Detached subscriptions don't receive messages from their topic and don't
+     * retain any backlog. `Pull` and `StreamingPull` requests will return
+     * FAILED_PRECONDITION. If the subscription is a push subscription, pushes to
+     * the endpoint will not be made.
+     * 
+ * + * bool detached = 15 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The detached to set. + * @return This builder for chaining. + */ + public Builder setDetached(boolean value) { + + detached_ = value; + bitField0_ |= 0x00008000; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Indicates whether the subscription is detached from its topic.
+     * Detached subscriptions don't receive messages from their topic and don't
+     * retain any backlog. `Pull` and `StreamingPull` requests will return
+     * FAILED_PRECONDITION. If the subscription is a push subscription, pushes to
+     * the endpoint will not be made.
+     * 
+ * + * bool detached = 15 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearDetached() { + bitField0_ = (bitField0_ & ~0x00008000); + detached_ = false; + onChanged(); + return this; + } + + private boolean enableExactlyOnceDelivery_; + + /** + * + * + *
+     * Optional. If true, Pub/Sub provides the following guarantees for the
+     * delivery of a message with a given value of `message_id` on this
+     * subscription:
+     *
+     * * The message sent to a subscriber is guaranteed not to be resent
+     * before the message's acknowledgment deadline expires.
+     * * An acknowledged message will not be resent to a subscriber.
+     *
+     * Note that subscribers may still receive multiple copies of a message
+     * when `enable_exactly_once_delivery` is true if the message was published
+     * multiple times by a publisher client. These copies are  considered distinct
+     * by Pub/Sub and have distinct `message_id` values.
+     * 
+ * + * bool enable_exactly_once_delivery = 16 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The enableExactlyOnceDelivery. + */ + @java.lang.Override + public boolean getEnableExactlyOnceDelivery() { + return enableExactlyOnceDelivery_; + } + + /** + * + * + *
+     * Optional. If true, Pub/Sub provides the following guarantees for the
+     * delivery of a message with a given value of `message_id` on this
+     * subscription:
+     *
+     * * The message sent to a subscriber is guaranteed not to be resent
+     * before the message's acknowledgment deadline expires.
+     * * An acknowledged message will not be resent to a subscriber.
+     *
+     * Note that subscribers may still receive multiple copies of a message
+     * when `enable_exactly_once_delivery` is true if the message was published
+     * multiple times by a publisher client. These copies are  considered distinct
+     * by Pub/Sub and have distinct `message_id` values.
+     * 
+ * + * bool enable_exactly_once_delivery = 16 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @param value The enableExactlyOnceDelivery to set. + * @return This builder for chaining. + */ + public Builder setEnableExactlyOnceDelivery(boolean value) { + + enableExactlyOnceDelivery_ = value; + bitField0_ |= 0x00010000; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. If true, Pub/Sub provides the following guarantees for the
+     * delivery of a message with a given value of `message_id` on this
+     * subscription:
+     *
+     * * The message sent to a subscriber is guaranteed not to be resent
+     * before the message's acknowledgment deadline expires.
+     * * An acknowledged message will not be resent to a subscriber.
+     *
+     * Note that subscribers may still receive multiple copies of a message
+     * when `enable_exactly_once_delivery` is true if the message was published
+     * multiple times by a publisher client. These copies are  considered distinct
+     * by Pub/Sub and have distinct `message_id` values.
+     * 
+ * + * bool enable_exactly_once_delivery = 16 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return This builder for chaining. + */ + public Builder clearEnableExactlyOnceDelivery() { + bitField0_ = (bitField0_ & ~0x00010000); + enableExactlyOnceDelivery_ = false; + onChanged(); + return this; + } + + private com.google.protobuf.Duration topicMessageRetentionDuration_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + topicMessageRetentionDurationBuilder_; + + /** + * + * + *
+     * Output only. Indicates the minimum duration for which a message is retained
+     * after it is published to the subscription's topic. If this field is set,
+     * messages published to the subscription's topic in the last
+     * `topic_message_retention_duration` are always available to subscribers. See
+     * the `message_retention_duration` field in `Topic`. This field is set only
+     * in responses from the server; it is ignored if it is set in any requests.
+     * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the topicMessageRetentionDuration field is set. + */ + public boolean hasTopicMessageRetentionDuration() { + return ((bitField0_ & 0x00020000) != 0); + } + + /** + * + * + *
+     * Output only. Indicates the minimum duration for which a message is retained
+     * after it is published to the subscription's topic. If this field is set,
+     * messages published to the subscription's topic in the last
+     * `topic_message_retention_duration` are always available to subscribers. See
+     * the `message_retention_duration` field in `Topic`. This field is set only
+     * in responses from the server; it is ignored if it is set in any requests.
+     * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The topicMessageRetentionDuration. + */ + public com.google.protobuf.Duration getTopicMessageRetentionDuration() { + if (topicMessageRetentionDurationBuilder_ == null) { + return topicMessageRetentionDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : topicMessageRetentionDuration_; + } else { + return topicMessageRetentionDurationBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Output only. Indicates the minimum duration for which a message is retained
+     * after it is published to the subscription's topic. If this field is set,
+     * messages published to the subscription's topic in the last
+     * `topic_message_retention_duration` are always available to subscribers. See
+     * the `message_retention_duration` field in `Topic`. This field is set only
+     * in responses from the server; it is ignored if it is set in any requests.
+     * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setTopicMessageRetentionDuration(com.google.protobuf.Duration value) { + if (topicMessageRetentionDurationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + topicMessageRetentionDuration_ = value; + } else { + topicMessageRetentionDurationBuilder_.setMessage(value); + } + bitField0_ |= 0x00020000; + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. Indicates the minimum duration for which a message is retained
+     * after it is published to the subscription's topic. If this field is set,
+     * messages published to the subscription's topic in the last
+     * `topic_message_retention_duration` are always available to subscribers. See
+     * the `message_retention_duration` field in `Topic`. This field is set only
+     * in responses from the server; it is ignored if it is set in any requests.
+     * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setTopicMessageRetentionDuration( + com.google.protobuf.Duration.Builder builderForValue) { + if (topicMessageRetentionDurationBuilder_ == null) { + topicMessageRetentionDuration_ = builderForValue.build(); + } else { + topicMessageRetentionDurationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00020000; + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. Indicates the minimum duration for which a message is retained
+     * after it is published to the subscription's topic. If this field is set,
+     * messages published to the subscription's topic in the last
+     * `topic_message_retention_duration` are always available to subscribers. See
+     * the `message_retention_duration` field in `Topic`. This field is set only
+     * in responses from the server; it is ignored if it is set in any requests.
+     * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder mergeTopicMessageRetentionDuration(com.google.protobuf.Duration value) { + if (topicMessageRetentionDurationBuilder_ == null) { + if (((bitField0_ & 0x00020000) != 0) + && topicMessageRetentionDuration_ != null + && topicMessageRetentionDuration_ + != com.google.protobuf.Duration.getDefaultInstance()) { + getTopicMessageRetentionDurationBuilder().mergeFrom(value); + } else { + topicMessageRetentionDuration_ = value; + } + } else { + topicMessageRetentionDurationBuilder_.mergeFrom(value); + } + if (topicMessageRetentionDuration_ != null) { + bitField0_ |= 0x00020000; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Output only. Indicates the minimum duration for which a message is retained
+     * after it is published to the subscription's topic. If this field is set,
+     * messages published to the subscription's topic in the last
+     * `topic_message_retention_duration` are always available to subscribers. See
+     * the `message_retention_duration` field in `Topic`. This field is set only
+     * in responses from the server; it is ignored if it is set in any requests.
+     * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder clearTopicMessageRetentionDuration() { + bitField0_ = (bitField0_ & ~0x00020000); + topicMessageRetentionDuration_ = null; + if (topicMessageRetentionDurationBuilder_ != null) { + topicMessageRetentionDurationBuilder_.dispose(); + topicMessageRetentionDurationBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. Indicates the minimum duration for which a message is retained
+     * after it is published to the subscription's topic. If this field is set,
+     * messages published to the subscription's topic in the last
+     * `topic_message_retention_duration` are always available to subscribers. See
+     * the `message_retention_duration` field in `Topic`. This field is set only
+     * in responses from the server; it is ignored if it is set in any requests.
+     * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.protobuf.Duration.Builder getTopicMessageRetentionDurationBuilder() { + bitField0_ |= 0x00020000; + onChanged(); + return internalGetTopicMessageRetentionDurationFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Output only. Indicates the minimum duration for which a message is retained
+     * after it is published to the subscription's topic. If this field is set,
+     * messages published to the subscription's topic in the last
+     * `topic_message_retention_duration` are always available to subscribers. See
+     * the `message_retention_duration` field in `Topic`. This field is set only
+     * in responses from the server; it is ignored if it is set in any requests.
+     * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.protobuf.DurationOrBuilder getTopicMessageRetentionDurationOrBuilder() { + if (topicMessageRetentionDurationBuilder_ != null) { + return topicMessageRetentionDurationBuilder_.getMessageOrBuilder(); + } else { + return topicMessageRetentionDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : topicMessageRetentionDuration_; + } + } + + /** + * + * + *
+     * Output only. Indicates the minimum duration for which a message is retained
+     * after it is published to the subscription's topic. If this field is set,
+     * messages published to the subscription's topic in the last
+     * `topic_message_retention_duration` are always available to subscribers. See
+     * the `message_retention_duration` field in `Topic`. This field is set only
+     * in responses from the server; it is ignored if it is set in any requests.
+     * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + internalGetTopicMessageRetentionDurationFieldBuilder() { + if (topicMessageRetentionDurationBuilder_ == null) { + topicMessageRetentionDurationBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder>( + getTopicMessageRetentionDuration(), getParentForChildren(), isClean()); + topicMessageRetentionDuration_ = null; + } + return topicMessageRetentionDurationBuilder_; + } + + private int state_ = 0; + + /** + * + * + *
+     * Output only. An output-only field indicating whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.State state = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+     * Output only. An output-only field indicating whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.State state = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The enum numeric value on the wire for state to set. + * @return This builder for chaining. + */ + public Builder setStateValue(int value) { + state_ = value; + bitField0_ |= 0x00040000; + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. An output-only field indicating whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.State state = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.Subscription.State getState() { + com.google.pubsub.v1.Subscription.State result = + com.google.pubsub.v1.Subscription.State.forNumber(state_); + return result == null ? com.google.pubsub.v1.Subscription.State.UNRECOGNIZED : result; + } + + /** + * + * + *
+     * Output only. An output-only field indicating whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.State state = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The state to set. + * @return This builder for chaining. + */ + public Builder setState(com.google.pubsub.v1.Subscription.State value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00040000; + state_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. An output-only field indicating whether or not the
+     * subscription can receive messages.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.State state = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearState() { + bitField0_ = (bitField0_ & ~0x00040000); + state_ = 0; + onChanged(); + return this; + } + + private com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo + analyticsHubSubscriptionInfo_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo, + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.Builder, + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfoOrBuilder> + analyticsHubSubscriptionInfoBuilder_; + + /** + * + * + *
+     * Output only. Information about the associated Analytics Hub subscription.
+     * Only set if the subscription is created by Analytics Hub.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the analyticsHubSubscriptionInfo field is set. + */ + public boolean hasAnalyticsHubSubscriptionInfo() { + return ((bitField0_ & 0x00080000) != 0); + } + + /** + * + * + *
+     * Output only. Information about the associated Analytics Hub subscription.
+     * Only set if the subscription is created by Analytics Hub.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The analyticsHubSubscriptionInfo. + */ + public com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo + getAnalyticsHubSubscriptionInfo() { + if (analyticsHubSubscriptionInfoBuilder_ == null) { + return analyticsHubSubscriptionInfo_ == null + ? com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.getDefaultInstance() + : analyticsHubSubscriptionInfo_; + } else { + return analyticsHubSubscriptionInfoBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Output only. Information about the associated Analytics Hub subscription.
+     * Only set if the subscription is created by Analytics Hub.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setAnalyticsHubSubscriptionInfo( + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo value) { + if (analyticsHubSubscriptionInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + analyticsHubSubscriptionInfo_ = value; + } else { + analyticsHubSubscriptionInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00080000; + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. Information about the associated Analytics Hub subscription.
+     * Only set if the subscription is created by Analytics Hub.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder setAnalyticsHubSubscriptionInfo( + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.Builder builderForValue) { + if (analyticsHubSubscriptionInfoBuilder_ == null) { + analyticsHubSubscriptionInfo_ = builderForValue.build(); + } else { + analyticsHubSubscriptionInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00080000; + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. Information about the associated Analytics Hub subscription.
+     * Only set if the subscription is created by Analytics Hub.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder mergeAnalyticsHubSubscriptionInfo( + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo value) { + if (analyticsHubSubscriptionInfoBuilder_ == null) { + if (((bitField0_ & 0x00080000) != 0) + && analyticsHubSubscriptionInfo_ != null + && analyticsHubSubscriptionInfo_ + != com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo + .getDefaultInstance()) { + getAnalyticsHubSubscriptionInfoBuilder().mergeFrom(value); + } else { + analyticsHubSubscriptionInfo_ = value; + } + } else { + analyticsHubSubscriptionInfoBuilder_.mergeFrom(value); + } + if (analyticsHubSubscriptionInfo_ != null) { + bitField0_ |= 0x00080000; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Output only. Information about the associated Analytics Hub subscription.
+     * Only set if the subscription is created by Analytics Hub.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public Builder clearAnalyticsHubSubscriptionInfo() { + bitField0_ = (bitField0_ & ~0x00080000); + analyticsHubSubscriptionInfo_ = null; + if (analyticsHubSubscriptionInfoBuilder_ != null) { + analyticsHubSubscriptionInfoBuilder_.dispose(); + analyticsHubSubscriptionInfoBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. Information about the associated Analytics Hub subscription.
+     * Only set if the subscription is created by Analytics Hub.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.Builder + getAnalyticsHubSubscriptionInfoBuilder() { + bitField0_ |= 0x00080000; + onChanged(); + return internalGetAnalyticsHubSubscriptionInfoFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Output only. Information about the associated Analytics Hub subscription.
+     * Only set if the subscription is created by Analytics Hub.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + public com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfoOrBuilder + getAnalyticsHubSubscriptionInfoOrBuilder() { + if (analyticsHubSubscriptionInfoBuilder_ != null) { + return analyticsHubSubscriptionInfoBuilder_.getMessageOrBuilder(); + } else { + return analyticsHubSubscriptionInfo_ == null + ? com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.getDefaultInstance() + : analyticsHubSubscriptionInfo_; + } + } + + /** + * + * + *
+     * Output only. Information about the associated Analytics Hub subscription.
+     * Only set if the subscription is created by Analytics Hub.
+     * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo, + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.Builder, + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfoOrBuilder> + internalGetAnalyticsHubSubscriptionInfoFieldBuilder() { + if (analyticsHubSubscriptionInfoBuilder_ == null) { + analyticsHubSubscriptionInfoBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo, + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo.Builder, + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfoOrBuilder>( + getAnalyticsHubSubscriptionInfo(), getParentForChildren(), isClean()); + analyticsHubSubscriptionInfo_ = null; + } + return analyticsHubSubscriptionInfoBuilder_; + } + + private java.util.List messageTransforms_ = + java.util.Collections.emptyList(); + + private void ensureMessageTransformsIsMutable() { + if (!((bitField0_ & 0x00100000) != 0)) { + messageTransforms_ = + new java.util.ArrayList(messageTransforms_); + bitField0_ |= 0x00100000; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.MessageTransform, + com.google.pubsub.v1.MessageTransform.Builder, + com.google.pubsub.v1.MessageTransformOrBuilder> + messageTransformsBuilder_; + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List getMessageTransformsList() { + if (messageTransformsBuilder_ == null) { + return java.util.Collections.unmodifiableList(messageTransforms_); + } else { + return messageTransformsBuilder_.getMessageList(); + } + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public int getMessageTransformsCount() { + if (messageTransformsBuilder_ == null) { + return messageTransforms_.size(); + } else { + return messageTransformsBuilder_.getCount(); + } + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.MessageTransform getMessageTransforms(int index) { + if (messageTransformsBuilder_ == null) { + return messageTransforms_.get(index); + } else { + return messageTransformsBuilder_.getMessage(index); + } + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransforms(int index, com.google.pubsub.v1.MessageTransform value) { + if (messageTransformsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessageTransformsIsMutable(); + messageTransforms_.set(index, value); + onChanged(); + } else { + messageTransformsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransforms( + int index, com.google.pubsub.v1.MessageTransform.Builder builderForValue) { + if (messageTransformsBuilder_ == null) { + ensureMessageTransformsIsMutable(); + messageTransforms_.set(index, builderForValue.build()); + onChanged(); + } else { + messageTransformsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addMessageTransforms(com.google.pubsub.v1.MessageTransform value) { + if (messageTransformsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessageTransformsIsMutable(); + messageTransforms_.add(value); + onChanged(); + } else { + messageTransformsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addMessageTransforms(int index, com.google.pubsub.v1.MessageTransform value) { + if (messageTransformsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessageTransformsIsMutable(); + messageTransforms_.add(index, value); + onChanged(); + } else { + messageTransformsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addMessageTransforms( + com.google.pubsub.v1.MessageTransform.Builder builderForValue) { + if (messageTransformsBuilder_ == null) { + ensureMessageTransformsIsMutable(); + messageTransforms_.add(builderForValue.build()); + onChanged(); + } else { + messageTransformsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addMessageTransforms( + int index, com.google.pubsub.v1.MessageTransform.Builder builderForValue) { + if (messageTransformsBuilder_ == null) { + ensureMessageTransformsIsMutable(); + messageTransforms_.add(index, builderForValue.build()); + onChanged(); + } else { + messageTransformsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addAllMessageTransforms( + java.lang.Iterable values) { + if (messageTransformsBuilder_ == null) { + ensureMessageTransformsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, messageTransforms_); + onChanged(); + } else { + messageTransformsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMessageTransforms() { + if (messageTransformsBuilder_ == null) { + messageTransforms_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00100000); + onChanged(); + } else { + messageTransformsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeMessageTransforms(int index) { + if (messageTransformsBuilder_ == null) { + ensureMessageTransformsIsMutable(); + messageTransforms_.remove(index); + onChanged(); + } else { + messageTransformsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.MessageTransform.Builder getMessageTransformsBuilder(int index) { + return internalGetMessageTransformsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.MessageTransformOrBuilder getMessageTransformsOrBuilder(int index) { + if (messageTransformsBuilder_ == null) { + return messageTransforms_.get(index); + } else { + return messageTransformsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getMessageTransformsOrBuilderList() { + if (messageTransformsBuilder_ != null) { + return messageTransformsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(messageTransforms_); + } + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.MessageTransform.Builder addMessageTransformsBuilder() { + return internalGetMessageTransformsFieldBuilder() + .addBuilder(com.google.pubsub.v1.MessageTransform.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.MessageTransform.Builder addMessageTransformsBuilder(int index) { + return internalGetMessageTransformsFieldBuilder() + .addBuilder(index, com.google.pubsub.v1.MessageTransform.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages before they are delivered to
+     * subscribers. Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getMessageTransformsBuilderList() { + return internalGetMessageTransformsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.MessageTransform, + com.google.pubsub.v1.MessageTransform.Builder, + com.google.pubsub.v1.MessageTransformOrBuilder> + internalGetMessageTransformsFieldBuilder() { + if (messageTransformsBuilder_ == null) { + messageTransformsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.MessageTransform, + com.google.pubsub.v1.MessageTransform.Builder, + com.google.pubsub.v1.MessageTransformOrBuilder>( + messageTransforms_, + ((bitField0_ & 0x00100000) != 0), + getParentForChildren(), + isClean()); + messageTransforms_ = null; + } + return messageTransformsBuilder_; + } + + private com.google.protobuf.MapField tags_; + + private com.google.protobuf.MapField internalGetTags() { + if (tags_ == null) { + return com.google.protobuf.MapField.emptyMapField(TagsDefaultEntryHolder.defaultEntry); + } + return tags_; + } + + private com.google.protobuf.MapField + internalGetMutableTags() { + if (tags_ == null) { + tags_ = com.google.protobuf.MapField.newMapField(TagsDefaultEntryHolder.defaultEntry); + } + if (!tags_.isMutable()) { + tags_ = tags_.copy(); + } + bitField0_ |= 0x00200000; + onChanged(); + return tags_; + } + + public int getTagsCount() { + return internalGetTags().getMap().size(); + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsTags(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetTags().getMap().containsKey(key); + } + + /** Use {@link #getTagsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getTags() { + return getTagsMap(); + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getTagsMap() { + return internalGetTags().getMap(); + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getTagsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetTags().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getTagsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetTags().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearTags() { + bitField0_ = (bitField0_ & ~0x00200000); + internalGetMutableTags().getMutableMap().clear(); + return this; + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeTags(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + internalGetMutableTags().getMutableMap().remove(key); + return this; + } + + /** Use alternate mutation accessors instead. */ + @java.lang.Deprecated + public java.util.Map getMutableTags() { + bitField0_ |= 0x00200000; + return internalGetMutableTags().getMutableMap(); + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putTags(java.lang.String key, java.lang.String value) { + if (key == null) { + throw new NullPointerException("map key"); + } + if (value == null) { + throw new NullPointerException("map value"); + } + internalGetMutableTags().getMutableMap().put(key, value); + bitField0_ |= 0x00200000; + return this; + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putAllTags(java.util.Map values) { + internalGetMutableTags().getMutableMap().putAll(values); + bitField0_ |= 0x00200000; + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.Subscription) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.Subscription) + private static final com.google.pubsub.v1.Subscription DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.Subscription(); + } + + public static com.google.pubsub.v1.Subscription getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Subscription parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.Subscription getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SubscriptionName.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SubscriptionName.java new file mode 100644 index 000000000000..2c12a10dcde1 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SubscriptionName.java @@ -0,0 +1,192 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.pubsub.v1; + +import com.google.api.pathtemplate.PathTemplate; +import com.google.api.resourcenames.ResourceName; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +@Generated("by gapic-generator-java") +public class SubscriptionName implements ResourceName { + private static final PathTemplate PROJECT_SUBSCRIPTION = + PathTemplate.createWithoutUrlEncoding("projects/{project}/subscriptions/{subscription}"); + private volatile Map fieldValuesMap; + private final String project; + private final String subscription; + + @Deprecated + protected SubscriptionName() { + project = null; + subscription = null; + } + + private SubscriptionName(Builder builder) { + project = Preconditions.checkNotNull(builder.getProject()); + subscription = Preconditions.checkNotNull(builder.getSubscription()); + } + + public String getProject() { + return project; + } + + public String getSubscription() { + return subscription; + } + + public static Builder newBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + public static SubscriptionName of(String project, String subscription) { + return newBuilder().setProject(project).setSubscription(subscription).build(); + } + + public static String format(String project, String subscription) { + return newBuilder().setProject(project).setSubscription(subscription).build().toString(); + } + + public static SubscriptionName parse(String formattedString) { + if (formattedString.isEmpty()) { + return null; + } + Map matchMap = + PROJECT_SUBSCRIPTION.validatedMatch( + formattedString, "SubscriptionName.parse: formattedString not in valid format"); + return of(matchMap.get("project"), matchMap.get("subscription")); + } + + public static List parseList(List formattedStrings) { + List list = new ArrayList<>(formattedStrings.size()); + for (String formattedString : formattedStrings) { + list.add(parse(formattedString)); + } + return list; + } + + public static List toStringList(List values) { + List list = new ArrayList<>(values.size()); + for (SubscriptionName value : values) { + if (value == null) { + list.add(""); + } else { + list.add(value.toString()); + } + } + return list; + } + + public static boolean isParsableFrom(String formattedString) { + return PROJECT_SUBSCRIPTION.matches(formattedString); + } + + @Override + public Map getFieldValuesMap() { + if (fieldValuesMap == null) { + synchronized (this) { + if (fieldValuesMap == null) { + ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder(); + if (project != null) { + fieldMapBuilder.put("project", project); + } + if (subscription != null) { + fieldMapBuilder.put("subscription", subscription); + } + fieldValuesMap = fieldMapBuilder.build(); + } + } + } + return fieldValuesMap; + } + + public String getFieldValue(String fieldName) { + return getFieldValuesMap().get(fieldName); + } + + @Override + public String toString() { + return PROJECT_SUBSCRIPTION.instantiate("project", project, "subscription", subscription); + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o != null && getClass() == o.getClass()) { + SubscriptionName that = ((SubscriptionName) o); + return Objects.equals(this.project, that.project) + && Objects.equals(this.subscription, that.subscription); + } + return false; + } + + @Override + public int hashCode() { + int h = 1; + h *= 1000003; + h ^= Objects.hashCode(project); + h *= 1000003; + h ^= Objects.hashCode(subscription); + return h; + } + + /** Builder for projects/{project}/subscriptions/{subscription}. */ + public static class Builder { + private String project; + private String subscription; + + protected Builder() {} + + public String getProject() { + return project; + } + + public String getSubscription() { + return subscription; + } + + public Builder setProject(String project) { + this.project = project; + return this; + } + + public Builder setSubscription(String subscription) { + this.subscription = subscription; + return this; + } + + private Builder(SubscriptionName subscriptionName) { + this.project = subscriptionName.project; + this.subscription = subscriptionName.subscription; + } + + public SubscriptionName build() { + return new SubscriptionName(this); + } + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SubscriptionOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SubscriptionOrBuilder.java new file mode 100644 index 000000000000..ebb45ec6a686 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/SubscriptionOrBuilder.java @@ -0,0 +1,1039 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface SubscriptionOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.Subscription) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. Identifier. The name of the subscription. It must have the format
+   * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must
+   * start with a letter, and contain only letters (`[A-Za-z]`), numbers
+   * (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
+   * plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
+   * in length, and it must not start with `"goog"`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Required. Identifier. The name of the subscription. It must have the format
+   * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must
+   * start with a letter, and contain only letters (`[A-Za-z]`), numbers
+   * (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),
+   * plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters
+   * in length, and it must not start with `"goog"`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * + * + *
+   * Required. The name of the topic from which this subscription is receiving
+   * messages. Format is `projects/{project}/topics/{topic}`. The value of this
+   * field will be `_deleted-topic_` if the topic has been deleted.
+   * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The topic. + */ + java.lang.String getTopic(); + + /** + * + * + *
+   * Required. The name of the topic from which this subscription is receiving
+   * messages. Format is `projects/{project}/topics/{topic}`. The value of this
+   * field will be `_deleted-topic_` if the topic has been deleted.
+   * 
+ * + * + * string topic = 2 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for topic. + */ + com.google.protobuf.ByteString getTopicBytes(); + + /** + * + * + *
+   * Optional. If push delivery is used with this subscription, this field is
+   * used to configure it.
+   * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the pushConfig field is set. + */ + boolean hasPushConfig(); + + /** + * + * + *
+   * Optional. If push delivery is used with this subscription, this field is
+   * used to configure it.
+   * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The pushConfig. + */ + com.google.pubsub.v1.PushConfig getPushConfig(); + + /** + * + * + *
+   * Optional. If push delivery is used with this subscription, this field is
+   * used to configure it.
+   * 
+ * + * .google.pubsub.v1.PushConfig push_config = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.PushConfigOrBuilder getPushConfigOrBuilder(); + + /** + * + * + *
+   * Optional. If delivery to BigQuery is used with this subscription, this
+   * field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the bigqueryConfig field is set. + */ + boolean hasBigqueryConfig(); + + /** + * + * + *
+   * Optional. If delivery to BigQuery is used with this subscription, this
+   * field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The bigqueryConfig. + */ + com.google.pubsub.v1.BigQueryConfig getBigqueryConfig(); + + /** + * + * + *
+   * Optional. If delivery to BigQuery is used with this subscription, this
+   * field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.BigQueryConfig bigquery_config = 18 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.BigQueryConfigOrBuilder getBigqueryConfigOrBuilder(); + + /** + * + * + *
+   * Optional. If delivery to Google Cloud Storage is used with this
+   * subscription, this field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the cloudStorageConfig field is set. + */ + boolean hasCloudStorageConfig(); + + /** + * + * + *
+   * Optional. If delivery to Google Cloud Storage is used with this
+   * subscription, this field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The cloudStorageConfig. + */ + com.google.pubsub.v1.CloudStorageConfig getCloudStorageConfig(); + + /** + * + * + *
+   * Optional. If delivery to Google Cloud Storage is used with this
+   * subscription, this field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.CloudStorageConfig cloud_storage_config = 22 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.CloudStorageConfigOrBuilder getCloudStorageConfigOrBuilder(); + + /** + * + * + *
+   * Optional. If delivery to Bigtable is used with this subscription, this
+   * field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the bigtableConfig field is set. + */ + boolean hasBigtableConfig(); + + /** + * + * + *
+   * Optional. If delivery to Bigtable is used with this subscription, this
+   * field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The bigtableConfig. + */ + com.google.pubsub.v1.BigtableConfig getBigtableConfig(); + + /** + * + * + *
+   * Optional. If delivery to Bigtable is used with this subscription, this
+   * field is used to configure it.
+   * 
+ * + * + * .google.pubsub.v1.BigtableConfig bigtable_config = 27 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.BigtableConfigOrBuilder getBigtableConfigOrBuilder(); + + /** + * + * + *
+   * Optional. The approximate amount of time (on a best-effort basis) Pub/Sub
+   * waits for the subscriber to acknowledge receipt before resending the
+   * message. In the interval after the message is delivered and before it is
+   * acknowledged, it is considered to be _outstanding_. During that time
+   * period, the message will not be redelivered (on a best-effort basis).
+   *
+   * For pull subscriptions, this value is used as the initial value for the ack
+   * deadline. To override this value for a given message, call
+   * `ModifyAckDeadline` with the corresponding `ack_id` if using
+   * non-streaming pull or send the `ack_id` in a
+   * `StreamingModifyAckDeadlineRequest` if using streaming pull.
+   * The minimum custom deadline you can specify is 10 seconds.
+   * The maximum custom deadline you can specify is 600 seconds (10 minutes).
+   * If this parameter is 0, a default value of 10 seconds is used.
+   *
+   * For push delivery, this value is also used to set the request timeout for
+   * the call to the push endpoint.
+   *
+   * If the subscriber never acknowledges the message, the Pub/Sub
+   * system will eventually redeliver the message.
+   * 
+ * + * int32 ack_deadline_seconds = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The ackDeadlineSeconds. + */ + int getAckDeadlineSeconds(); + + /** + * + * + *
+   * Optional. Indicates whether to retain acknowledged messages. If true, then
+   * messages are not expunged from the subscription's backlog, even if they are
+   * acknowledged, until they fall out of the `message_retention_duration`
+   * window. This must be true if you would like to [`Seek` to a timestamp]
+   * (https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time) in
+   * the past to replay previously-acknowledged messages.
+   * 
+ * + * bool retain_acked_messages = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The retainAckedMessages. + */ + boolean getRetainAckedMessages(); + + /** + * + * + *
+   * Optional. How long to retain unacknowledged messages in the subscription's
+   * backlog, from the moment a message is published. If `retain_acked_messages`
+   * is true, then this also configures the retention of acknowledged messages,
+   * and thus configures how far back in time a `Seek` can be done. Defaults to
+   * 7 days. Cannot be more than 31 days or less than 10 minutes.
+   * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageRetentionDuration field is set. + */ + boolean hasMessageRetentionDuration(); + + /** + * + * + *
+   * Optional. How long to retain unacknowledged messages in the subscription's
+   * backlog, from the moment a message is published. If `retain_acked_messages`
+   * is true, then this also configures the retention of acknowledged messages,
+   * and thus configures how far back in time a `Seek` can be done. Defaults to
+   * 7 days. Cannot be more than 31 days or less than 10 minutes.
+   * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageRetentionDuration. + */ + com.google.protobuf.Duration getMessageRetentionDuration(); + + /** + * + * + *
+   * Optional. How long to retain unacknowledged messages in the subscription's
+   * backlog, from the moment a message is published. If `retain_acked_messages`
+   * is true, then this also configures the retention of acknowledged messages,
+   * and thus configures how far back in time a `Seek` can be done. Defaults to
+   * 7 days. Cannot be more than 31 days or less than 10 minutes.
+   * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.protobuf.DurationOrBuilder getMessageRetentionDurationOrBuilder(); + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + int getLabelsCount(); + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + boolean containsLabels(java.lang.String key); + + /** Use {@link #getLabelsMap()} instead. */ + @java.lang.Deprecated + java.util.Map getLabels(); + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + java.util.Map getLabelsMap(); + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + /* nullable */ + java.lang.String getLabelsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue); + + /** + * + * + *
+   * Optional. See [Creating and managing
+   * labels](https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 9 [(.google.api.field_behavior) = OPTIONAL]; + */ + java.lang.String getLabelsOrThrow(java.lang.String key); + + /** + * + * + *
+   * Optional. If true, messages published with the same `ordering_key` in
+   * `PubsubMessage` will be delivered to the subscribers in the order in which
+   * they are received by the Pub/Sub system. Otherwise, they may be delivered
+   * in any order.
+   * 
+ * + * bool enable_message_ordering = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The enableMessageOrdering. + */ + boolean getEnableMessageOrdering(); + + /** + * + * + *
+   * Optional. A policy that specifies the conditions for this subscription's
+   * expiration. A subscription is considered active as long as any connected
+   * subscriber is successfully consuming messages from the subscription or is
+   * issuing operations on the subscription. If `expiration_policy` is not set,
+   * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+   * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+   * but `expiration_policy.ttl` is not set, the subscription never expires.
+   * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the expirationPolicy field is set. + */ + boolean hasExpirationPolicy(); + + /** + * + * + *
+   * Optional. A policy that specifies the conditions for this subscription's
+   * expiration. A subscription is considered active as long as any connected
+   * subscriber is successfully consuming messages from the subscription or is
+   * issuing operations on the subscription. If `expiration_policy` is not set,
+   * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+   * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+   * but `expiration_policy.ttl` is not set, the subscription never expires.
+   * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The expirationPolicy. + */ + com.google.pubsub.v1.ExpirationPolicy getExpirationPolicy(); + + /** + * + * + *
+   * Optional. A policy that specifies the conditions for this subscription's
+   * expiration. A subscription is considered active as long as any connected
+   * subscriber is successfully consuming messages from the subscription or is
+   * issuing operations on the subscription. If `expiration_policy` is not set,
+   * a *default policy* with `ttl` of 31 days will be used. The minimum allowed
+   * value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set,
+   * but `expiration_policy.ttl` is not set, the subscription never expires.
+   * 
+ * + * + * .google.pubsub.v1.ExpirationPolicy expiration_policy = 11 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.ExpirationPolicyOrBuilder getExpirationPolicyOrBuilder(); + + /** + * + * + *
+   * Optional. An expression written in the Pub/Sub [filter
+   * language](https://cloud.google.com/pubsub/docs/filtering). If non-empty,
+   * then only `PubsubMessage`s whose `attributes` field matches the filter are
+   * delivered on this subscription. If empty, then no messages are filtered
+   * out.
+   * 
+ * + * string filter = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The filter. + */ + java.lang.String getFilter(); + + /** + * + * + *
+   * Optional. An expression written in the Pub/Sub [filter
+   * language](https://cloud.google.com/pubsub/docs/filtering). If non-empty,
+   * then only `PubsubMessage`s whose `attributes` field matches the filter are
+   * delivered on this subscription. If empty, then no messages are filtered
+   * out.
+   * 
+ * + * string filter = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for filter. + */ + com.google.protobuf.ByteString getFilterBytes(); + + /** + * + * + *
+   * Optional. A policy that specifies the conditions for dead lettering
+   * messages in this subscription. If dead_letter_policy is not set, dead
+   * lettering is disabled.
+   *
+   * The Pub/Sub service account associated with this subscriptions's
+   * parent project (i.e.,
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+   * permission to Acknowledge() messages on this subscription.
+   * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the deadLetterPolicy field is set. + */ + boolean hasDeadLetterPolicy(); + + /** + * + * + *
+   * Optional. A policy that specifies the conditions for dead lettering
+   * messages in this subscription. If dead_letter_policy is not set, dead
+   * lettering is disabled.
+   *
+   * The Pub/Sub service account associated with this subscriptions's
+   * parent project (i.e.,
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+   * permission to Acknowledge() messages on this subscription.
+   * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The deadLetterPolicy. + */ + com.google.pubsub.v1.DeadLetterPolicy getDeadLetterPolicy(); + + /** + * + * + *
+   * Optional. A policy that specifies the conditions for dead lettering
+   * messages in this subscription. If dead_letter_policy is not set, dead
+   * lettering is disabled.
+   *
+   * The Pub/Sub service account associated with this subscriptions's
+   * parent project (i.e.,
+   * service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have
+   * permission to Acknowledge() messages on this subscription.
+   * 
+ * + * + * .google.pubsub.v1.DeadLetterPolicy dead_letter_policy = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.DeadLetterPolicyOrBuilder getDeadLetterPolicyOrBuilder(); + + /** + * + * + *
+   * Optional. A policy that specifies how Pub/Sub retries message delivery for
+   * this subscription.
+   *
+   * If not set, the default retry policy is applied. This generally implies
+   * that messages will be retried as soon as possible for healthy subscribers.
+   * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+   * events for a given message.
+   * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the retryPolicy field is set. + */ + boolean hasRetryPolicy(); + + /** + * + * + *
+   * Optional. A policy that specifies how Pub/Sub retries message delivery for
+   * this subscription.
+   *
+   * If not set, the default retry policy is applied. This generally implies
+   * that messages will be retried as soon as possible for healthy subscribers.
+   * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+   * events for a given message.
+   * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The retryPolicy. + */ + com.google.pubsub.v1.RetryPolicy getRetryPolicy(); + + /** + * + * + *
+   * Optional. A policy that specifies how Pub/Sub retries message delivery for
+   * this subscription.
+   *
+   * If not set, the default retry policy is applied. This generally implies
+   * that messages will be retried as soon as possible for healthy subscribers.
+   * RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded
+   * events for a given message.
+   * 
+ * + * + * .google.pubsub.v1.RetryPolicy retry_policy = 14 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.RetryPolicyOrBuilder getRetryPolicyOrBuilder(); + + /** + * + * + *
+   * Optional. Indicates whether the subscription is detached from its topic.
+   * Detached subscriptions don't receive messages from their topic and don't
+   * retain any backlog. `Pull` and `StreamingPull` requests will return
+   * FAILED_PRECONDITION. If the subscription is a push subscription, pushes to
+   * the endpoint will not be made.
+   * 
+ * + * bool detached = 15 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The detached. + */ + boolean getDetached(); + + /** + * + * + *
+   * Optional. If true, Pub/Sub provides the following guarantees for the
+   * delivery of a message with a given value of `message_id` on this
+   * subscription:
+   *
+   * * The message sent to a subscriber is guaranteed not to be resent
+   * before the message's acknowledgment deadline expires.
+   * * An acknowledged message will not be resent to a subscriber.
+   *
+   * Note that subscribers may still receive multiple copies of a message
+   * when `enable_exactly_once_delivery` is true if the message was published
+   * multiple times by a publisher client. These copies are  considered distinct
+   * by Pub/Sub and have distinct `message_id` values.
+   * 
+ * + * bool enable_exactly_once_delivery = 16 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The enableExactlyOnceDelivery. + */ + boolean getEnableExactlyOnceDelivery(); + + /** + * + * + *
+   * Output only. Indicates the minimum duration for which a message is retained
+   * after it is published to the subscription's topic. If this field is set,
+   * messages published to the subscription's topic in the last
+   * `topic_message_retention_duration` are always available to subscribers. See
+   * the `message_retention_duration` field in `Topic`. This field is set only
+   * in responses from the server; it is ignored if it is set in any requests.
+   * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the topicMessageRetentionDuration field is set. + */ + boolean hasTopicMessageRetentionDuration(); + + /** + * + * + *
+   * Output only. Indicates the minimum duration for which a message is retained
+   * after it is published to the subscription's topic. If this field is set,
+   * messages published to the subscription's topic in the last
+   * `topic_message_retention_duration` are always available to subscribers. See
+   * the `message_retention_duration` field in `Topic`. This field is set only
+   * in responses from the server; it is ignored if it is set in any requests.
+   * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The topicMessageRetentionDuration. + */ + com.google.protobuf.Duration getTopicMessageRetentionDuration(); + + /** + * + * + *
+   * Output only. Indicates the minimum duration for which a message is retained
+   * after it is published to the subscription's topic. If this field is set,
+   * messages published to the subscription's topic in the last
+   * `topic_message_retention_duration` are always available to subscribers. See
+   * the `message_retention_duration` field in `Topic`. This field is set only
+   * in responses from the server; it is ignored if it is set in any requests.
+   * 
+ * + * + * .google.protobuf.Duration topic_message_retention_duration = 17 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + com.google.protobuf.DurationOrBuilder getTopicMessageRetentionDurationOrBuilder(); + + /** + * + * + *
+   * Output only. An output-only field indicating whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.Subscription.State state = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + int getStateValue(); + + /** + * + * + *
+   * Output only. An output-only field indicating whether or not the
+   * subscription can receive messages.
+   * 
+ * + * + * .google.pubsub.v1.Subscription.State state = 19 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + com.google.pubsub.v1.Subscription.State getState(); + + /** + * + * + *
+   * Output only. Information about the associated Analytics Hub subscription.
+   * Only set if the subscription is created by Analytics Hub.
+   * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return Whether the analyticsHubSubscriptionInfo field is set. + */ + boolean hasAnalyticsHubSubscriptionInfo(); + + /** + * + * + *
+   * Output only. Information about the associated Analytics Hub subscription.
+   * Only set if the subscription is created by Analytics Hub.
+   * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The analyticsHubSubscriptionInfo. + */ + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo getAnalyticsHubSubscriptionInfo(); + + /** + * + * + *
+   * Output only. Information about the associated Analytics Hub subscription.
+   * Only set if the subscription is created by Analytics Hub.
+   * 
+ * + * + * .google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + */ + com.google.pubsub.v1.Subscription.AnalyticsHubSubscriptionInfoOrBuilder + getAnalyticsHubSubscriptionInfoOrBuilder(); + + /** + * + * + *
+   * Optional. Transforms to be applied to messages before they are delivered to
+   * subscribers. Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List getMessageTransformsList(); + + /** + * + * + *
+   * Optional. Transforms to be applied to messages before they are delivered to
+   * subscribers. Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.MessageTransform getMessageTransforms(int index); + + /** + * + * + *
+   * Optional. Transforms to be applied to messages before they are delivered to
+   * subscribers. Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getMessageTransformsCount(); + + /** + * + * + *
+   * Optional. Transforms to be applied to messages before they are delivered to
+   * subscribers. Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List + getMessageTransformsOrBuilderList(); + + /** + * + * + *
+   * Optional. Transforms to be applied to messages before they are delivered to
+   * subscribers. Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 25 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.MessageTransformOrBuilder getMessageTransformsOrBuilder(int index); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + int getTagsCount(); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + boolean containsTags(java.lang.String key); + + /** Use {@link #getTagsMap()} instead. */ + @java.lang.Deprecated + java.util.Map getTags(); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.Map getTagsMap(); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + /* nullable */ + java.lang.String getTagsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 26 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + java.lang.String getTagsOrThrow(java.lang.String key); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Topic.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Topic.java new file mode 100644 index 000000000000..52f12129f3bb --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/Topic.java @@ -0,0 +1,4018 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * A topic resource.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.Topic} + */ +@com.google.protobuf.Generated +public final class Topic extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.Topic) + TopicOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "Topic"); + } + + // Use Topic.newBuilder() to construct. + private Topic(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Topic() { + name_ = ""; + kmsKeyName_ = ""; + state_ = 0; + messageTransforms_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto.internal_static_google_pubsub_v1_Topic_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 2: + return internalGetLabels(); + case 14: + return internalGetTags(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Topic_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.Topic.class, com.google.pubsub.v1.Topic.Builder.class); + } + + /** + * + * + *
+   * The state of the topic.
+   * 
+ * + * Protobuf enum {@code google.pubsub.v1.Topic.State} + */ + public enum State implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+     * Default value. This value is unused.
+     * 
+ * + * STATE_UNSPECIFIED = 0; + */ + STATE_UNSPECIFIED(0), + /** + * + * + *
+     * The topic does not have any persistent errors.
+     * 
+ * + * ACTIVE = 1; + */ + ACTIVE(1), + /** + * + * + *
+     * Ingestion from the data source has encountered a permanent error.
+     * See the more detailed error state in the corresponding ingestion
+     * source configuration.
+     * 
+ * + * INGESTION_RESOURCE_ERROR = 2; + */ + INGESTION_RESOURCE_ERROR(2), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "State"); + } + + /** + * + * + *
+     * Default value. This value is unused.
+     * 
+ * + * STATE_UNSPECIFIED = 0; + */ + public static final int STATE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+     * The topic does not have any persistent errors.
+     * 
+ * + * ACTIVE = 1; + */ + public static final int ACTIVE_VALUE = 1; + + /** + * + * + *
+     * Ingestion from the data source has encountered a permanent error.
+     * See the more detailed error state in the corresponding ingestion
+     * source configuration.
+     * 
+ * + * INGESTION_RESOURCE_ERROR = 2; + */ + public static final int INGESTION_RESOURCE_ERROR_VALUE = 2; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static State valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static State forNumber(int value) { + switch (value) { + case 0: + return STATE_UNSPECIFIED; + case 1: + return ACTIVE; + case 2: + return INGESTION_RESOURCE_ERROR; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public State findValueByNumber(int number) { + return State.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.pubsub.v1.Topic.getDescriptor().getEnumTypes().get(0); + } + + private static final State[] VALUES = values(); + + public static State valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private State(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.pubsub.v1.Topic.State) + } + + private int bitField0_; + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
+   * Required. Identifier. The name of the topic. It must have the format
+   * `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
+   * and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
+   * underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
+   * signs (`%`). It must be between 3 and 255 characters in length, and it
+   * must not start with `"goog"`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. Identifier. The name of the topic. It must have the format
+   * `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
+   * and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
+   * underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
+   * signs (`%`). It must be between 3 and 255 characters in length, and it
+   * must not start with `"goog"`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int LABELS_FIELD_NUMBER = 2; + + private static final class LabelsDefaultEntryHolder { + static final com.google.protobuf.MapEntry defaultEntry = + com.google.protobuf.MapEntry.newDefaultInstance( + com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Topic_LabelsEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + + @SuppressWarnings("serial") + private com.google.protobuf.MapField labels_; + + private com.google.protobuf.MapField internalGetLabels() { + if (labels_ == null) { + return com.google.protobuf.MapField.emptyMapField(LabelsDefaultEntryHolder.defaultEntry); + } + return labels_; + } + + public int getLabelsCount() { + return internalGetLabels().getMap().size(); + } + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public boolean containsLabels(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetLabels().getMap().containsKey(key); + } + + /** Use {@link #getLabelsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getLabels() { + return getLabelsMap(); + } + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.util.Map getLabelsMap() { + return internalGetLabels().getMap(); + } + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public /* nullable */ java.lang.String getLabelsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.lang.String getLabelsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public static final int MESSAGE_STORAGE_POLICY_FIELD_NUMBER = 3; + private com.google.pubsub.v1.MessageStoragePolicy messageStoragePolicy_; + + /** + * + * + *
+   * Optional. Policy constraining the set of Google Cloud Platform regions
+   * where messages published to the topic may be stored. If not present, then
+   * no constraints are in effect.
+   * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageStoragePolicy field is set. + */ + @java.lang.Override + public boolean hasMessageStoragePolicy() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Optional. Policy constraining the set of Google Cloud Platform regions
+   * where messages published to the topic may be stored. If not present, then
+   * no constraints are in effect.
+   * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageStoragePolicy. + */ + @java.lang.Override + public com.google.pubsub.v1.MessageStoragePolicy getMessageStoragePolicy() { + return messageStoragePolicy_ == null + ? com.google.pubsub.v1.MessageStoragePolicy.getDefaultInstance() + : messageStoragePolicy_; + } + + /** + * + * + *
+   * Optional. Policy constraining the set of Google Cloud Platform regions
+   * where messages published to the topic may be stored. If not present, then
+   * no constraints are in effect.
+   * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.MessageStoragePolicyOrBuilder getMessageStoragePolicyOrBuilder() { + return messageStoragePolicy_ == null + ? com.google.pubsub.v1.MessageStoragePolicy.getDefaultInstance() + : messageStoragePolicy_; + } + + public static final int KMS_KEY_NAME_FIELD_NUMBER = 5; + + @SuppressWarnings("serial") + private volatile java.lang.Object kmsKeyName_ = ""; + + /** + * + * + *
+   * Optional. The resource name of the Cloud KMS CryptoKey to be used to
+   * protect access to messages published on this topic.
+   *
+   * The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
+   * 
+ * + * + * string kms_key_name = 5 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The kmsKeyName. + */ + @java.lang.Override + public java.lang.String getKmsKeyName() { + java.lang.Object ref = kmsKeyName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + kmsKeyName_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The resource name of the Cloud KMS CryptoKey to be used to
+   * protect access to messages published on this topic.
+   *
+   * The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
+   * 
+ * + * + * string kms_key_name = 5 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for kmsKeyName. + */ + @java.lang.Override + public com.google.protobuf.ByteString getKmsKeyNameBytes() { + java.lang.Object ref = kmsKeyName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + kmsKeyName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SCHEMA_SETTINGS_FIELD_NUMBER = 6; + private com.google.pubsub.v1.SchemaSettings schemaSettings_; + + /** + * + * + *
+   * Optional. Settings for validating messages published against a schema.
+   * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaSettings field is set. + */ + @java.lang.Override + public boolean hasSchemaSettings() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+   * Optional. Settings for validating messages published against a schema.
+   * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaSettings. + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaSettings getSchemaSettings() { + return schemaSettings_ == null + ? com.google.pubsub.v1.SchemaSettings.getDefaultInstance() + : schemaSettings_; + } + + /** + * + * + *
+   * Optional. Settings for validating messages published against a schema.
+   * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaSettingsOrBuilder getSchemaSettingsOrBuilder() { + return schemaSettings_ == null + ? com.google.pubsub.v1.SchemaSettings.getDefaultInstance() + : schemaSettings_; + } + + public static final int SATISFIES_PZS_FIELD_NUMBER = 7; + private boolean satisfiesPzs_ = false; + + /** + * + * + *
+   * Optional. Reserved for future use. This field is set only in responses from
+   * the server; it is ignored if it is set in any requests.
+   * 
+ * + * bool satisfies_pzs = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The satisfiesPzs. + */ + @java.lang.Override + public boolean getSatisfiesPzs() { + return satisfiesPzs_; + } + + public static final int MESSAGE_RETENTION_DURATION_FIELD_NUMBER = 8; + private com.google.protobuf.Duration messageRetentionDuration_; + + /** + * + * + *
+   * Optional. Indicates the minimum duration to retain a message after it is
+   * published to the topic. If this field is set, messages published to the
+   * topic in the last `message_retention_duration` are always available to
+   * subscribers. For instance, it allows any attached subscription to [seek to
+   * a
+   * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+   * that is up to `message_retention_duration` in the past. If this field is
+   * not set, message retention is controlled by settings on individual
+   * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+   * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageRetentionDuration field is set. + */ + @java.lang.Override + public boolean hasMessageRetentionDuration() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
+   * Optional. Indicates the minimum duration to retain a message after it is
+   * published to the topic. If this field is set, messages published to the
+   * topic in the last `message_retention_duration` are always available to
+   * subscribers. For instance, it allows any attached subscription to [seek to
+   * a
+   * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+   * that is up to `message_retention_duration` in the past. If this field is
+   * not set, message retention is controlled by settings on individual
+   * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+   * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageRetentionDuration. + */ + @java.lang.Override + public com.google.protobuf.Duration getMessageRetentionDuration() { + return messageRetentionDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : messageRetentionDuration_; + } + + /** + * + * + *
+   * Optional. Indicates the minimum duration to retain a message after it is
+   * published to the topic. If this field is set, messages published to the
+   * topic in the last `message_retention_duration` are always available to
+   * subscribers. For instance, it allows any attached subscription to [seek to
+   * a
+   * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+   * that is up to `message_retention_duration` in the past. If this field is
+   * not set, message retention is controlled by settings on individual
+   * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+   * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.protobuf.DurationOrBuilder getMessageRetentionDurationOrBuilder() { + return messageRetentionDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : messageRetentionDuration_; + } + + public static final int STATE_FIELD_NUMBER = 9; + private int state_ = 0; + + /** + * + * + *
+   * Output only. An output-only field indicating the state of the topic.
+   * 
+ * + * .google.pubsub.v1.Topic.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+   * Output only. An output-only field indicating the state of the topic.
+   * 
+ * + * .google.pubsub.v1.Topic.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.Topic.State getState() { + com.google.pubsub.v1.Topic.State result = com.google.pubsub.v1.Topic.State.forNumber(state_); + return result == null ? com.google.pubsub.v1.Topic.State.UNRECOGNIZED : result; + } + + public static final int INGESTION_DATA_SOURCE_SETTINGS_FIELD_NUMBER = 10; + private com.google.pubsub.v1.IngestionDataSourceSettings ingestionDataSourceSettings_; + + /** + * + * + *
+   * Optional. Settings for ingestion from a data source into this topic.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the ingestionDataSourceSettings field is set. + */ + @java.lang.Override + public boolean hasIngestionDataSourceSettings() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
+   * Optional. Settings for ingestion from a data source into this topic.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The ingestionDataSourceSettings. + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettings getIngestionDataSourceSettings() { + return ingestionDataSourceSettings_ == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.getDefaultInstance() + : ingestionDataSourceSettings_; + } + + /** + * + * + *
+   * Optional. Settings for ingestion from a data source into this topic.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.IngestionDataSourceSettingsOrBuilder + getIngestionDataSourceSettingsOrBuilder() { + return ingestionDataSourceSettings_ == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.getDefaultInstance() + : ingestionDataSourceSettings_; + } + + public static final int MESSAGE_TRANSFORMS_FIELD_NUMBER = 13; + + @SuppressWarnings("serial") + private java.util.List messageTransforms_; + + /** + * + * + *
+   * Optional. Transforms to be applied to messages published to the topic.
+   * Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List getMessageTransformsList() { + return messageTransforms_; + } + + /** + * + * + *
+   * Optional. Transforms to be applied to messages published to the topic.
+   * Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List + getMessageTransformsOrBuilderList() { + return messageTransforms_; + } + + /** + * + * + *
+   * Optional. Transforms to be applied to messages published to the topic.
+   * Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public int getMessageTransformsCount() { + return messageTransforms_.size(); + } + + /** + * + * + *
+   * Optional. Transforms to be applied to messages published to the topic.
+   * Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.MessageTransform getMessageTransforms(int index) { + return messageTransforms_.get(index); + } + + /** + * + * + *
+   * Optional. Transforms to be applied to messages published to the topic.
+   * Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.MessageTransformOrBuilder getMessageTransformsOrBuilder(int index) { + return messageTransforms_.get(index); + } + + public static final int TAGS_FIELD_NUMBER = 14; + + private static final class TagsDefaultEntryHolder { + static final com.google.protobuf.MapEntry defaultEntry = + com.google.protobuf.MapEntry.newDefaultInstance( + com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Topic_TagsEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + + @SuppressWarnings("serial") + private com.google.protobuf.MapField tags_; + + private com.google.protobuf.MapField internalGetTags() { + if (tags_ == null) { + return com.google.protobuf.MapField.emptyMapField(TagsDefaultEntryHolder.defaultEntry); + } + return tags_; + } + + public int getTagsCount() { + return internalGetTags().getMap().size(); + } + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsTags(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetTags().getMap().containsKey(key); + } + + /** Use {@link #getTagsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getTags() { + return getTagsMap(); + } + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getTagsMap() { + return internalGetTags().getMap(); + } + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getTagsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetTags().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getTagsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetTags().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, name_); + } + com.google.protobuf.GeneratedMessage.serializeStringMapTo( + output, internalGetLabels(), LabelsDefaultEntryHolder.defaultEntry, 2); + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(3, getMessageStoragePolicy()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kmsKeyName_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, kmsKeyName_); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(6, getSchemaSettings()); + } + if (satisfiesPzs_ != false) { + output.writeBool(7, satisfiesPzs_); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(8, getMessageRetentionDuration()); + } + if (state_ != com.google.pubsub.v1.Topic.State.STATE_UNSPECIFIED.getNumber()) { + output.writeEnum(9, state_); + } + if (((bitField0_ & 0x00000008) != 0)) { + output.writeMessage(10, getIngestionDataSourceSettings()); + } + for (int i = 0; i < messageTransforms_.size(); i++) { + output.writeMessage(13, messageTransforms_.get(i)); + } + com.google.protobuf.GeneratedMessage.serializeStringMapTo( + output, internalGetTags(), TagsDefaultEntryHolder.defaultEntry, 14); + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_); + } + for (java.util.Map.Entry entry : + internalGetLabels().getMap().entrySet()) { + com.google.protobuf.MapEntry labels__ = + LabelsDefaultEntryHolder.defaultEntry + .newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, labels__); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize(3, getMessageStoragePolicy()); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(kmsKeyName_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, kmsKeyName_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, getSchemaSettings()); + } + if (satisfiesPzs_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(7, satisfiesPzs_); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 8, getMessageRetentionDuration()); + } + if (state_ != com.google.pubsub.v1.Topic.State.STATE_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(9, state_); + } + if (((bitField0_ & 0x00000008) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 10, getIngestionDataSourceSettings()); + } + for (int i = 0; i < messageTransforms_.size(); i++) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize(13, messageTransforms_.get(i)); + } + for (java.util.Map.Entry entry : + internalGetTags().getMap().entrySet()) { + com.google.protobuf.MapEntry tags__ = + TagsDefaultEntryHolder.defaultEntry + .newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream.computeMessageSize(14, tags__); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.Topic)) { + return super.equals(obj); + } + com.google.pubsub.v1.Topic other = (com.google.pubsub.v1.Topic) obj; + + if (!getName().equals(other.getName())) return false; + if (!internalGetLabels().equals(other.internalGetLabels())) return false; + if (hasMessageStoragePolicy() != other.hasMessageStoragePolicy()) return false; + if (hasMessageStoragePolicy()) { + if (!getMessageStoragePolicy().equals(other.getMessageStoragePolicy())) return false; + } + if (!getKmsKeyName().equals(other.getKmsKeyName())) return false; + if (hasSchemaSettings() != other.hasSchemaSettings()) return false; + if (hasSchemaSettings()) { + if (!getSchemaSettings().equals(other.getSchemaSettings())) return false; + } + if (getSatisfiesPzs() != other.getSatisfiesPzs()) return false; + if (hasMessageRetentionDuration() != other.hasMessageRetentionDuration()) return false; + if (hasMessageRetentionDuration()) { + if (!getMessageRetentionDuration().equals(other.getMessageRetentionDuration())) return false; + } + if (state_ != other.state_) return false; + if (hasIngestionDataSourceSettings() != other.hasIngestionDataSourceSettings()) return false; + if (hasIngestionDataSourceSettings()) { + if (!getIngestionDataSourceSettings().equals(other.getIngestionDataSourceSettings())) + return false; + } + if (!getMessageTransformsList().equals(other.getMessageTransformsList())) return false; + if (!internalGetTags().equals(other.internalGetTags())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + if (!internalGetLabels().getMap().isEmpty()) { + hash = (37 * hash) + LABELS_FIELD_NUMBER; + hash = (53 * hash) + internalGetLabels().hashCode(); + } + if (hasMessageStoragePolicy()) { + hash = (37 * hash) + MESSAGE_STORAGE_POLICY_FIELD_NUMBER; + hash = (53 * hash) + getMessageStoragePolicy().hashCode(); + } + hash = (37 * hash) + KMS_KEY_NAME_FIELD_NUMBER; + hash = (53 * hash) + getKmsKeyName().hashCode(); + if (hasSchemaSettings()) { + hash = (37 * hash) + SCHEMA_SETTINGS_FIELD_NUMBER; + hash = (53 * hash) + getSchemaSettings().hashCode(); + } + hash = (37 * hash) + SATISFIES_PZS_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getSatisfiesPzs()); + if (hasMessageRetentionDuration()) { + hash = (37 * hash) + MESSAGE_RETENTION_DURATION_FIELD_NUMBER; + hash = (53 * hash) + getMessageRetentionDuration().hashCode(); + } + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + state_; + if (hasIngestionDataSourceSettings()) { + hash = (37 * hash) + INGESTION_DATA_SOURCE_SETTINGS_FIELD_NUMBER; + hash = (53 * hash) + getIngestionDataSourceSettings().hashCode(); + } + if (getMessageTransformsCount() > 0) { + hash = (37 * hash) + MESSAGE_TRANSFORMS_FIELD_NUMBER; + hash = (53 * hash) + getMessageTransformsList().hashCode(); + } + if (!internalGetTags().getMap().isEmpty()) { + hash = (37 * hash) + TAGS_FIELD_NUMBER; + hash = (53 * hash) + internalGetTags().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.Topic parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Topic parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Topic parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Topic parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Topic parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.Topic parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.Topic parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Topic parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.Topic parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Topic parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.Topic parseFrom(com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.Topic parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.Topic prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * A topic resource.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.Topic} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.Topic) + com.google.pubsub.v1.TopicOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto.internal_static_google_pubsub_v1_Topic_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 2: + return internalGetLabels(); + case 14: + return internalGetTags(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 2: + return internalGetMutableLabels(); + case 14: + return internalGetMutableTags(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_Topic_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.Topic.class, com.google.pubsub.v1.Topic.Builder.class); + } + + // Construct using com.google.pubsub.v1.Topic.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetMessageStoragePolicyFieldBuilder(); + internalGetSchemaSettingsFieldBuilder(); + internalGetMessageRetentionDurationFieldBuilder(); + internalGetIngestionDataSourceSettingsFieldBuilder(); + internalGetMessageTransformsFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + internalGetMutableLabels().clear(); + messageStoragePolicy_ = null; + if (messageStoragePolicyBuilder_ != null) { + messageStoragePolicyBuilder_.dispose(); + messageStoragePolicyBuilder_ = null; + } + kmsKeyName_ = ""; + schemaSettings_ = null; + if (schemaSettingsBuilder_ != null) { + schemaSettingsBuilder_.dispose(); + schemaSettingsBuilder_ = null; + } + satisfiesPzs_ = false; + messageRetentionDuration_ = null; + if (messageRetentionDurationBuilder_ != null) { + messageRetentionDurationBuilder_.dispose(); + messageRetentionDurationBuilder_ = null; + } + state_ = 0; + ingestionDataSourceSettings_ = null; + if (ingestionDataSourceSettingsBuilder_ != null) { + ingestionDataSourceSettingsBuilder_.dispose(); + ingestionDataSourceSettingsBuilder_ = null; + } + if (messageTransformsBuilder_ == null) { + messageTransforms_ = java.util.Collections.emptyList(); + } else { + messageTransforms_ = null; + messageTransformsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + internalGetMutableTags().clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto.internal_static_google_pubsub_v1_Topic_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.Topic getDefaultInstanceForType() { + return com.google.pubsub.v1.Topic.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.Topic build() { + com.google.pubsub.v1.Topic result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.Topic buildPartial() { + com.google.pubsub.v1.Topic result = new com.google.pubsub.v1.Topic(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.pubsub.v1.Topic result) { + if (messageTransformsBuilder_ == null) { + if (((bitField0_ & 0x00000200) != 0)) { + messageTransforms_ = java.util.Collections.unmodifiableList(messageTransforms_); + bitField0_ = (bitField0_ & ~0x00000200); + } + result.messageTransforms_ = messageTransforms_; + } else { + result.messageTransforms_ = messageTransformsBuilder_.build(); + } + } + + private void buildPartial0(com.google.pubsub.v1.Topic result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.labels_ = internalGetLabels(); + result.labels_.makeImmutable(); + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000004) != 0)) { + result.messageStoragePolicy_ = + messageStoragePolicyBuilder_ == null + ? messageStoragePolicy_ + : messageStoragePolicyBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.kmsKeyName_ = kmsKeyName_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.schemaSettings_ = + schemaSettingsBuilder_ == null ? schemaSettings_ : schemaSettingsBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.satisfiesPzs_ = satisfiesPzs_; + } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.messageRetentionDuration_ = + messageRetentionDurationBuilder_ == null + ? messageRetentionDuration_ + : messageRetentionDurationBuilder_.build(); + to_bitField0_ |= 0x00000004; + } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.state_ = state_; + } + if (((from_bitField0_ & 0x00000100) != 0)) { + result.ingestionDataSourceSettings_ = + ingestionDataSourceSettingsBuilder_ == null + ? ingestionDataSourceSettings_ + : ingestionDataSourceSettingsBuilder_.build(); + to_bitField0_ |= 0x00000008; + } + if (((from_bitField0_ & 0x00000400) != 0)) { + result.tags_ = internalGetTags(); + result.tags_.makeImmutable(); + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.Topic) { + return mergeFrom((com.google.pubsub.v1.Topic) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.Topic other) { + if (other == com.google.pubsub.v1.Topic.getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + internalGetMutableLabels().mergeFrom(other.internalGetLabels()); + bitField0_ |= 0x00000002; + if (other.hasMessageStoragePolicy()) { + mergeMessageStoragePolicy(other.getMessageStoragePolicy()); + } + if (!other.getKmsKeyName().isEmpty()) { + kmsKeyName_ = other.kmsKeyName_; + bitField0_ |= 0x00000008; + onChanged(); + } + if (other.hasSchemaSettings()) { + mergeSchemaSettings(other.getSchemaSettings()); + } + if (other.getSatisfiesPzs() != false) { + setSatisfiesPzs(other.getSatisfiesPzs()); + } + if (other.hasMessageRetentionDuration()) { + mergeMessageRetentionDuration(other.getMessageRetentionDuration()); + } + if (other.state_ != 0) { + setStateValue(other.getStateValue()); + } + if (other.hasIngestionDataSourceSettings()) { + mergeIngestionDataSourceSettings(other.getIngestionDataSourceSettings()); + } + if (messageTransformsBuilder_ == null) { + if (!other.messageTransforms_.isEmpty()) { + if (messageTransforms_.isEmpty()) { + messageTransforms_ = other.messageTransforms_; + bitField0_ = (bitField0_ & ~0x00000200); + } else { + ensureMessageTransformsIsMutable(); + messageTransforms_.addAll(other.messageTransforms_); + } + onChanged(); + } + } else { + if (!other.messageTransforms_.isEmpty()) { + if (messageTransformsBuilder_.isEmpty()) { + messageTransformsBuilder_.dispose(); + messageTransformsBuilder_ = null; + messageTransforms_ = other.messageTransforms_; + bitField0_ = (bitField0_ & ~0x00000200); + messageTransformsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetMessageTransformsFieldBuilder() + : null; + } else { + messageTransformsBuilder_.addAllMessages(other.messageTransforms_); + } + } + } + internalGetMutableTags().mergeFrom(other.internalGetTags()); + bitField0_ |= 0x00000400; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + com.google.protobuf.MapEntry labels__ = + input.readMessage( + LabelsDefaultEntryHolder.defaultEntry.getParserForType(), + extensionRegistry); + internalGetMutableLabels() + .getMutableMap() + .put(labels__.getKey(), labels__.getValue()); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + input.readMessage( + internalGetMessageStoragePolicyFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 42: + { + kmsKeyName_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 42 + case 50: + { + input.readMessage( + internalGetSchemaSettingsFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000010; + break; + } // case 50 + case 56: + { + satisfiesPzs_ = input.readBool(); + bitField0_ |= 0x00000020; + break; + } // case 56 + case 66: + { + input.readMessage( + internalGetMessageRetentionDurationFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000040; + break; + } // case 66 + case 72: + { + state_ = input.readEnum(); + bitField0_ |= 0x00000080; + break; + } // case 72 + case 82: + { + input.readMessage( + internalGetIngestionDataSourceSettingsFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000100; + break; + } // case 82 + case 106: + { + com.google.pubsub.v1.MessageTransform m = + input.readMessage( + com.google.pubsub.v1.MessageTransform.parser(), extensionRegistry); + if (messageTransformsBuilder_ == null) { + ensureMessageTransformsIsMutable(); + messageTransforms_.add(m); + } else { + messageTransformsBuilder_.addMessage(m); + } + break; + } // case 106 + case 114: + { + com.google.protobuf.MapEntry tags__ = + input.readMessage( + TagsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry); + internalGetMutableTags().getMutableMap().put(tags__.getKey(), tags__.getValue()); + bitField0_ |= 0x00000400; + break; + } // case 114 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object name_ = ""; + + /** + * + * + *
+     * Required. Identifier. The name of the topic. It must have the format
+     * `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
+     * and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
+     * underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
+     * signs (`%`). It must be between 3 and 255 characters in length, and it
+     * must not start with `"goog"`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. Identifier. The name of the topic. It must have the format
+     * `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
+     * and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
+     * underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
+     * signs (`%`). It must be between 3 and 255 characters in length, and it
+     * must not start with `"goog"`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. Identifier. The name of the topic. It must have the format
+     * `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
+     * and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
+     * underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
+     * signs (`%`). It must be between 3 and 255 characters in length, and it
+     * must not start with `"goog"`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Identifier. The name of the topic. It must have the format
+     * `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
+     * and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
+     * underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
+     * signs (`%`). It must be between 3 and 255 characters in length, and it
+     * must not start with `"goog"`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Identifier. The name of the topic. It must have the format
+     * `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
+     * and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
+     * underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
+     * signs (`%`). It must be between 3 and 255 characters in length, and it
+     * must not start with `"goog"`.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.protobuf.MapField labels_; + + private com.google.protobuf.MapField internalGetLabels() { + if (labels_ == null) { + return com.google.protobuf.MapField.emptyMapField(LabelsDefaultEntryHolder.defaultEntry); + } + return labels_; + } + + private com.google.protobuf.MapField + internalGetMutableLabels() { + if (labels_ == null) { + labels_ = com.google.protobuf.MapField.newMapField(LabelsDefaultEntryHolder.defaultEntry); + } + if (!labels_.isMutable()) { + labels_ = labels_.copy(); + } + bitField0_ |= 0x00000002; + onChanged(); + return labels_; + } + + public int getLabelsCount() { + return internalGetLabels().getMap().size(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public boolean containsLabels(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetLabels().getMap().containsKey(key); + } + + /** Use {@link #getLabelsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getLabels() { + return getLabelsMap(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.util.Map getLabelsMap() { + return internalGetLabels().getMap(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public /* nullable */ java.lang.String getLabelsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + @java.lang.Override + public java.lang.String getLabelsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetLabels().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearLabels() { + bitField0_ = (bitField0_ & ~0x00000002); + internalGetMutableLabels().getMutableMap().clear(); + return this; + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder removeLabels(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + internalGetMutableLabels().getMutableMap().remove(key); + return this; + } + + /** Use alternate mutation accessors instead. */ + @java.lang.Deprecated + public java.util.Map getMutableLabels() { + bitField0_ |= 0x00000002; + return internalGetMutableLabels().getMutableMap(); + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder putLabels(java.lang.String key, java.lang.String value) { + if (key == null) { + throw new NullPointerException("map key"); + } + if (value == null) { + throw new NullPointerException("map value"); + } + internalGetMutableLabels().getMutableMap().put(key, value); + bitField0_ |= 0x00000002; + return this; + } + + /** + * + * + *
+     * Optional. See [Creating and managing labels]
+     * (https://cloud.google.com/pubsub/docs/labels).
+     * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + public Builder putAllLabels(java.util.Map values) { + internalGetMutableLabels().getMutableMap().putAll(values); + bitField0_ |= 0x00000002; + return this; + } + + private com.google.pubsub.v1.MessageStoragePolicy messageStoragePolicy_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.MessageStoragePolicy, + com.google.pubsub.v1.MessageStoragePolicy.Builder, + com.google.pubsub.v1.MessageStoragePolicyOrBuilder> + messageStoragePolicyBuilder_; + + /** + * + * + *
+     * Optional. Policy constraining the set of Google Cloud Platform regions
+     * where messages published to the topic may be stored. If not present, then
+     * no constraints are in effect.
+     * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageStoragePolicy field is set. + */ + public boolean hasMessageStoragePolicy() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
+     * Optional. Policy constraining the set of Google Cloud Platform regions
+     * where messages published to the topic may be stored. If not present, then
+     * no constraints are in effect.
+     * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageStoragePolicy. + */ + public com.google.pubsub.v1.MessageStoragePolicy getMessageStoragePolicy() { + if (messageStoragePolicyBuilder_ == null) { + return messageStoragePolicy_ == null + ? com.google.pubsub.v1.MessageStoragePolicy.getDefaultInstance() + : messageStoragePolicy_; + } else { + return messageStoragePolicyBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. Policy constraining the set of Google Cloud Platform regions
+     * where messages published to the topic may be stored. If not present, then
+     * no constraints are in effect.
+     * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageStoragePolicy(com.google.pubsub.v1.MessageStoragePolicy value) { + if (messageStoragePolicyBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + messageStoragePolicy_ = value; + } else { + messageStoragePolicyBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Policy constraining the set of Google Cloud Platform regions
+     * where messages published to the topic may be stored. If not present, then
+     * no constraints are in effect.
+     * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageStoragePolicy( + com.google.pubsub.v1.MessageStoragePolicy.Builder builderForValue) { + if (messageStoragePolicyBuilder_ == null) { + messageStoragePolicy_ = builderForValue.build(); + } else { + messageStoragePolicyBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Policy constraining the set of Google Cloud Platform regions
+     * where messages published to the topic may be stored. If not present, then
+     * no constraints are in effect.
+     * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeMessageStoragePolicy(com.google.pubsub.v1.MessageStoragePolicy value) { + if (messageStoragePolicyBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0) + && messageStoragePolicy_ != null + && messageStoragePolicy_ + != com.google.pubsub.v1.MessageStoragePolicy.getDefaultInstance()) { + getMessageStoragePolicyBuilder().mergeFrom(value); + } else { + messageStoragePolicy_ = value; + } + } else { + messageStoragePolicyBuilder_.mergeFrom(value); + } + if (messageStoragePolicy_ != null) { + bitField0_ |= 0x00000004; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. Policy constraining the set of Google Cloud Platform regions
+     * where messages published to the topic may be stored. If not present, then
+     * no constraints are in effect.
+     * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMessageStoragePolicy() { + bitField0_ = (bitField0_ & ~0x00000004); + messageStoragePolicy_ = null; + if (messageStoragePolicyBuilder_ != null) { + messageStoragePolicyBuilder_.dispose(); + messageStoragePolicyBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Policy constraining the set of Google Cloud Platform regions
+     * where messages published to the topic may be stored. If not present, then
+     * no constraints are in effect.
+     * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.MessageStoragePolicy.Builder getMessageStoragePolicyBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return internalGetMessageStoragePolicyFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Policy constraining the set of Google Cloud Platform regions
+     * where messages published to the topic may be stored. If not present, then
+     * no constraints are in effect.
+     * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.MessageStoragePolicyOrBuilder getMessageStoragePolicyOrBuilder() { + if (messageStoragePolicyBuilder_ != null) { + return messageStoragePolicyBuilder_.getMessageOrBuilder(); + } else { + return messageStoragePolicy_ == null + ? com.google.pubsub.v1.MessageStoragePolicy.getDefaultInstance() + : messageStoragePolicy_; + } + } + + /** + * + * + *
+     * Optional. Policy constraining the set of Google Cloud Platform regions
+     * where messages published to the topic may be stored. If not present, then
+     * no constraints are in effect.
+     * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.MessageStoragePolicy, + com.google.pubsub.v1.MessageStoragePolicy.Builder, + com.google.pubsub.v1.MessageStoragePolicyOrBuilder> + internalGetMessageStoragePolicyFieldBuilder() { + if (messageStoragePolicyBuilder_ == null) { + messageStoragePolicyBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.MessageStoragePolicy, + com.google.pubsub.v1.MessageStoragePolicy.Builder, + com.google.pubsub.v1.MessageStoragePolicyOrBuilder>( + getMessageStoragePolicy(), getParentForChildren(), isClean()); + messageStoragePolicy_ = null; + } + return messageStoragePolicyBuilder_; + } + + private java.lang.Object kmsKeyName_ = ""; + + /** + * + * + *
+     * Optional. The resource name of the Cloud KMS CryptoKey to be used to
+     * protect access to messages published on this topic.
+     *
+     * The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
+     * 
+ * + * + * string kms_key_name = 5 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The kmsKeyName. + */ + public java.lang.String getKmsKeyName() { + java.lang.Object ref = kmsKeyName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + kmsKeyName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The resource name of the Cloud KMS CryptoKey to be used to
+     * protect access to messages published on this topic.
+     *
+     * The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
+     * 
+ * + * + * string kms_key_name = 5 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for kmsKeyName. + */ + public com.google.protobuf.ByteString getKmsKeyNameBytes() { + java.lang.Object ref = kmsKeyName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + kmsKeyName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The resource name of the Cloud KMS CryptoKey to be used to
+     * protect access to messages published on this topic.
+     *
+     * The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
+     * 
+ * + * + * string kms_key_name = 5 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The kmsKeyName to set. + * @return This builder for chaining. + */ + public Builder setKmsKeyName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + kmsKeyName_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The resource name of the Cloud KMS CryptoKey to be used to
+     * protect access to messages published on this topic.
+     *
+     * The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
+     * 
+ * + * + * string kms_key_name = 5 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearKmsKeyName() { + kmsKeyName_ = getDefaultInstance().getKmsKeyName(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The resource name of the Cloud KMS CryptoKey to be used to
+     * protect access to messages published on this topic.
+     *
+     * The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
+     * 
+ * + * + * string kms_key_name = 5 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for kmsKeyName to set. + * @return This builder for chaining. + */ + public Builder setKmsKeyNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + kmsKeyName_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + private com.google.pubsub.v1.SchemaSettings schemaSettings_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.SchemaSettings, + com.google.pubsub.v1.SchemaSettings.Builder, + com.google.pubsub.v1.SchemaSettingsOrBuilder> + schemaSettingsBuilder_; + + /** + * + * + *
+     * Optional. Settings for validating messages published against a schema.
+     * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaSettings field is set. + */ + public boolean hasSchemaSettings() { + return ((bitField0_ & 0x00000010) != 0); + } + + /** + * + * + *
+     * Optional. Settings for validating messages published against a schema.
+     * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaSettings. + */ + public com.google.pubsub.v1.SchemaSettings getSchemaSettings() { + if (schemaSettingsBuilder_ == null) { + return schemaSettings_ == null + ? com.google.pubsub.v1.SchemaSettings.getDefaultInstance() + : schemaSettings_; + } else { + return schemaSettingsBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. Settings for validating messages published against a schema.
+     * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSchemaSettings(com.google.pubsub.v1.SchemaSettings value) { + if (schemaSettingsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + schemaSettings_ = value; + } else { + schemaSettingsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Settings for validating messages published against a schema.
+     * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setSchemaSettings(com.google.pubsub.v1.SchemaSettings.Builder builderForValue) { + if (schemaSettingsBuilder_ == null) { + schemaSettings_ = builderForValue.build(); + } else { + schemaSettingsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Settings for validating messages published against a schema.
+     * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeSchemaSettings(com.google.pubsub.v1.SchemaSettings value) { + if (schemaSettingsBuilder_ == null) { + if (((bitField0_ & 0x00000010) != 0) + && schemaSettings_ != null + && schemaSettings_ != com.google.pubsub.v1.SchemaSettings.getDefaultInstance()) { + getSchemaSettingsBuilder().mergeFrom(value); + } else { + schemaSettings_ = value; + } + } else { + schemaSettingsBuilder_.mergeFrom(value); + } + if (schemaSettings_ != null) { + bitField0_ |= 0x00000010; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. Settings for validating messages published against a schema.
+     * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearSchemaSettings() { + bitField0_ = (bitField0_ & ~0x00000010); + schemaSettings_ = null; + if (schemaSettingsBuilder_ != null) { + schemaSettingsBuilder_.dispose(); + schemaSettingsBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Settings for validating messages published against a schema.
+     * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.SchemaSettings.Builder getSchemaSettingsBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return internalGetSchemaSettingsFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Settings for validating messages published against a schema.
+     * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.SchemaSettingsOrBuilder getSchemaSettingsOrBuilder() { + if (schemaSettingsBuilder_ != null) { + return schemaSettingsBuilder_.getMessageOrBuilder(); + } else { + return schemaSettings_ == null + ? com.google.pubsub.v1.SchemaSettings.getDefaultInstance() + : schemaSettings_; + } + } + + /** + * + * + *
+     * Optional. Settings for validating messages published against a schema.
+     * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.SchemaSettings, + com.google.pubsub.v1.SchemaSettings.Builder, + com.google.pubsub.v1.SchemaSettingsOrBuilder> + internalGetSchemaSettingsFieldBuilder() { + if (schemaSettingsBuilder_ == null) { + schemaSettingsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.SchemaSettings, + com.google.pubsub.v1.SchemaSettings.Builder, + com.google.pubsub.v1.SchemaSettingsOrBuilder>( + getSchemaSettings(), getParentForChildren(), isClean()); + schemaSettings_ = null; + } + return schemaSettingsBuilder_; + } + + private boolean satisfiesPzs_; + + /** + * + * + *
+     * Optional. Reserved for future use. This field is set only in responses from
+     * the server; it is ignored if it is set in any requests.
+     * 
+ * + * bool satisfies_pzs = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The satisfiesPzs. + */ + @java.lang.Override + public boolean getSatisfiesPzs() { + return satisfiesPzs_; + } + + /** + * + * + *
+     * Optional. Reserved for future use. This field is set only in responses from
+     * the server; it is ignored if it is set in any requests.
+     * 
+ * + * bool satisfies_pzs = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The satisfiesPzs to set. + * @return This builder for chaining. + */ + public Builder setSatisfiesPzs(boolean value) { + + satisfiesPzs_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Reserved for future use. This field is set only in responses from
+     * the server; it is ignored if it is set in any requests.
+     * 
+ * + * bool satisfies_pzs = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearSatisfiesPzs() { + bitField0_ = (bitField0_ & ~0x00000020); + satisfiesPzs_ = false; + onChanged(); + return this; + } + + private com.google.protobuf.Duration messageRetentionDuration_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + messageRetentionDurationBuilder_; + + /** + * + * + *
+     * Optional. Indicates the minimum duration to retain a message after it is
+     * published to the topic. If this field is set, messages published to the
+     * topic in the last `message_retention_duration` are always available to
+     * subscribers. For instance, it allows any attached subscription to [seek to
+     * a
+     * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+     * that is up to `message_retention_duration` in the past. If this field is
+     * not set, message retention is controlled by settings on individual
+     * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageRetentionDuration field is set. + */ + public boolean hasMessageRetentionDuration() { + return ((bitField0_ & 0x00000040) != 0); + } + + /** + * + * + *
+     * Optional. Indicates the minimum duration to retain a message after it is
+     * published to the topic. If this field is set, messages published to the
+     * topic in the last `message_retention_duration` are always available to
+     * subscribers. For instance, it allows any attached subscription to [seek to
+     * a
+     * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+     * that is up to `message_retention_duration` in the past. If this field is
+     * not set, message retention is controlled by settings on individual
+     * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageRetentionDuration. + */ + public com.google.protobuf.Duration getMessageRetentionDuration() { + if (messageRetentionDurationBuilder_ == null) { + return messageRetentionDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : messageRetentionDuration_; + } else { + return messageRetentionDurationBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. Indicates the minimum duration to retain a message after it is
+     * published to the topic. If this field is set, messages published to the
+     * topic in the last `message_retention_duration` are always available to
+     * subscribers. For instance, it allows any attached subscription to [seek to
+     * a
+     * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+     * that is up to `message_retention_duration` in the past. If this field is
+     * not set, message retention is controlled by settings on individual
+     * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageRetentionDuration(com.google.protobuf.Duration value) { + if (messageRetentionDurationBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + messageRetentionDuration_ = value; + } else { + messageRetentionDurationBuilder_.setMessage(value); + } + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Indicates the minimum duration to retain a message after it is
+     * published to the topic. If this field is set, messages published to the
+     * topic in the last `message_retention_duration` are always available to
+     * subscribers. For instance, it allows any attached subscription to [seek to
+     * a
+     * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+     * that is up to `message_retention_duration` in the past. If this field is
+     * not set, message retention is controlled by settings on individual
+     * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageRetentionDuration( + com.google.protobuf.Duration.Builder builderForValue) { + if (messageRetentionDurationBuilder_ == null) { + messageRetentionDuration_ = builderForValue.build(); + } else { + messageRetentionDurationBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Indicates the minimum duration to retain a message after it is
+     * published to the topic. If this field is set, messages published to the
+     * topic in the last `message_retention_duration` are always available to
+     * subscribers. For instance, it allows any attached subscription to [seek to
+     * a
+     * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+     * that is up to `message_retention_duration` in the past. If this field is
+     * not set, message retention is controlled by settings on individual
+     * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeMessageRetentionDuration(com.google.protobuf.Duration value) { + if (messageRetentionDurationBuilder_ == null) { + if (((bitField0_ & 0x00000040) != 0) + && messageRetentionDuration_ != null + && messageRetentionDuration_ != com.google.protobuf.Duration.getDefaultInstance()) { + getMessageRetentionDurationBuilder().mergeFrom(value); + } else { + messageRetentionDuration_ = value; + } + } else { + messageRetentionDurationBuilder_.mergeFrom(value); + } + if (messageRetentionDuration_ != null) { + bitField0_ |= 0x00000040; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. Indicates the minimum duration to retain a message after it is
+     * published to the topic. If this field is set, messages published to the
+     * topic in the last `message_retention_duration` are always available to
+     * subscribers. For instance, it allows any attached subscription to [seek to
+     * a
+     * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+     * that is up to `message_retention_duration` in the past. If this field is
+     * not set, message retention is controlled by settings on individual
+     * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMessageRetentionDuration() { + bitField0_ = (bitField0_ & ~0x00000040); + messageRetentionDuration_ = null; + if (messageRetentionDurationBuilder_ != null) { + messageRetentionDurationBuilder_.dispose(); + messageRetentionDurationBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Indicates the minimum duration to retain a message after it is
+     * published to the topic. If this field is set, messages published to the
+     * topic in the last `message_retention_duration` are always available to
+     * subscribers. For instance, it allows any attached subscription to [seek to
+     * a
+     * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+     * that is up to `message_retention_duration` in the past. If this field is
+     * not set, message retention is controlled by settings on individual
+     * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.Duration.Builder getMessageRetentionDurationBuilder() { + bitField0_ |= 0x00000040; + onChanged(); + return internalGetMessageRetentionDurationFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Indicates the minimum duration to retain a message after it is
+     * published to the topic. If this field is set, messages published to the
+     * topic in the last `message_retention_duration` are always available to
+     * subscribers. For instance, it allows any attached subscription to [seek to
+     * a
+     * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+     * that is up to `message_retention_duration` in the past. If this field is
+     * not set, message retention is controlled by settings on individual
+     * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.DurationOrBuilder getMessageRetentionDurationOrBuilder() { + if (messageRetentionDurationBuilder_ != null) { + return messageRetentionDurationBuilder_.getMessageOrBuilder(); + } else { + return messageRetentionDuration_ == null + ? com.google.protobuf.Duration.getDefaultInstance() + : messageRetentionDuration_; + } + } + + /** + * + * + *
+     * Optional. Indicates the minimum duration to retain a message after it is
+     * published to the topic. If this field is set, messages published to the
+     * topic in the last `message_retention_duration` are always available to
+     * subscribers. For instance, it allows any attached subscription to [seek to
+     * a
+     * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+     * that is up to `message_retention_duration` in the past. If this field is
+     * not set, message retention is controlled by settings on individual
+     * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+     * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder> + internalGetMessageRetentionDurationFieldBuilder() { + if (messageRetentionDurationBuilder_ == null) { + messageRetentionDurationBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.Duration, + com.google.protobuf.Duration.Builder, + com.google.protobuf.DurationOrBuilder>( + getMessageRetentionDuration(), getParentForChildren(), isClean()); + messageRetentionDuration_ = null; + } + return messageRetentionDurationBuilder_; + } + + private int state_ = 0; + + /** + * + * + *
+     * Output only. An output-only field indicating the state of the topic.
+     * 
+ * + * .google.pubsub.v1.Topic.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + @java.lang.Override + public int getStateValue() { + return state_; + } + + /** + * + * + *
+     * Output only. An output-only field indicating the state of the topic.
+     * 
+ * + * .google.pubsub.v1.Topic.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The enum numeric value on the wire for state to set. + * @return This builder for chaining. + */ + public Builder setStateValue(int value) { + state_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. An output-only field indicating the state of the topic.
+     * 
+ * + * .google.pubsub.v1.Topic.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + @java.lang.Override + public com.google.pubsub.v1.Topic.State getState() { + com.google.pubsub.v1.Topic.State result = com.google.pubsub.v1.Topic.State.forNumber(state_); + return result == null ? com.google.pubsub.v1.Topic.State.UNRECOGNIZED : result; + } + + /** + * + * + *
+     * Output only. An output-only field indicating the state of the topic.
+     * 
+ * + * .google.pubsub.v1.Topic.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @param value The state to set. + * @return This builder for chaining. + */ + public Builder setState(com.google.pubsub.v1.Topic.State value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000080; + state_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * Output only. An output-only field indicating the state of the topic.
+     * 
+ * + * .google.pubsub.v1.Topic.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return This builder for chaining. + */ + public Builder clearState() { + bitField0_ = (bitField0_ & ~0x00000080); + state_ = 0; + onChanged(); + return this; + } + + private com.google.pubsub.v1.IngestionDataSourceSettings ingestionDataSourceSettings_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings, + com.google.pubsub.v1.IngestionDataSourceSettings.Builder, + com.google.pubsub.v1.IngestionDataSourceSettingsOrBuilder> + ingestionDataSourceSettingsBuilder_; + + /** + * + * + *
+     * Optional. Settings for ingestion from a data source into this topic.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the ingestionDataSourceSettings field is set. + */ + public boolean hasIngestionDataSourceSettings() { + return ((bitField0_ & 0x00000100) != 0); + } + + /** + * + * + *
+     * Optional. Settings for ingestion from a data source into this topic.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The ingestionDataSourceSettings. + */ + public com.google.pubsub.v1.IngestionDataSourceSettings getIngestionDataSourceSettings() { + if (ingestionDataSourceSettingsBuilder_ == null) { + return ingestionDataSourceSettings_ == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.getDefaultInstance() + : ingestionDataSourceSettings_; + } else { + return ingestionDataSourceSettingsBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. Settings for ingestion from a data source into this topic.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setIngestionDataSourceSettings( + com.google.pubsub.v1.IngestionDataSourceSettings value) { + if (ingestionDataSourceSettingsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ingestionDataSourceSettings_ = value; + } else { + ingestionDataSourceSettingsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Settings for ingestion from a data source into this topic.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setIngestionDataSourceSettings( + com.google.pubsub.v1.IngestionDataSourceSettings.Builder builderForValue) { + if (ingestionDataSourceSettingsBuilder_ == null) { + ingestionDataSourceSettings_ = builderForValue.build(); + } else { + ingestionDataSourceSettingsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Settings for ingestion from a data source into this topic.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeIngestionDataSourceSettings( + com.google.pubsub.v1.IngestionDataSourceSettings value) { + if (ingestionDataSourceSettingsBuilder_ == null) { + if (((bitField0_ & 0x00000100) != 0) + && ingestionDataSourceSettings_ != null + && ingestionDataSourceSettings_ + != com.google.pubsub.v1.IngestionDataSourceSettings.getDefaultInstance()) { + getIngestionDataSourceSettingsBuilder().mergeFrom(value); + } else { + ingestionDataSourceSettings_ = value; + } + } else { + ingestionDataSourceSettingsBuilder_.mergeFrom(value); + } + if (ingestionDataSourceSettings_ != null) { + bitField0_ |= 0x00000100; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. Settings for ingestion from a data source into this topic.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearIngestionDataSourceSettings() { + bitField0_ = (bitField0_ & ~0x00000100); + ingestionDataSourceSettings_ = null; + if (ingestionDataSourceSettingsBuilder_ != null) { + ingestionDataSourceSettingsBuilder_.dispose(); + ingestionDataSourceSettingsBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Settings for ingestion from a data source into this topic.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionDataSourceSettings.Builder + getIngestionDataSourceSettingsBuilder() { + bitField0_ |= 0x00000100; + onChanged(); + return internalGetIngestionDataSourceSettingsFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Settings for ingestion from a data source into this topic.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.IngestionDataSourceSettingsOrBuilder + getIngestionDataSourceSettingsOrBuilder() { + if (ingestionDataSourceSettingsBuilder_ != null) { + return ingestionDataSourceSettingsBuilder_.getMessageOrBuilder(); + } else { + return ingestionDataSourceSettings_ == null + ? com.google.pubsub.v1.IngestionDataSourceSettings.getDefaultInstance() + : ingestionDataSourceSettings_; + } + } + + /** + * + * + *
+     * Optional. Settings for ingestion from a data source into this topic.
+     * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings, + com.google.pubsub.v1.IngestionDataSourceSettings.Builder, + com.google.pubsub.v1.IngestionDataSourceSettingsOrBuilder> + internalGetIngestionDataSourceSettingsFieldBuilder() { + if (ingestionDataSourceSettingsBuilder_ == null) { + ingestionDataSourceSettingsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.IngestionDataSourceSettings, + com.google.pubsub.v1.IngestionDataSourceSettings.Builder, + com.google.pubsub.v1.IngestionDataSourceSettingsOrBuilder>( + getIngestionDataSourceSettings(), getParentForChildren(), isClean()); + ingestionDataSourceSettings_ = null; + } + return ingestionDataSourceSettingsBuilder_; + } + + private java.util.List messageTransforms_ = + java.util.Collections.emptyList(); + + private void ensureMessageTransformsIsMutable() { + if (!((bitField0_ & 0x00000200) != 0)) { + messageTransforms_ = + new java.util.ArrayList(messageTransforms_); + bitField0_ |= 0x00000200; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.MessageTransform, + com.google.pubsub.v1.MessageTransform.Builder, + com.google.pubsub.v1.MessageTransformOrBuilder> + messageTransformsBuilder_; + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List getMessageTransformsList() { + if (messageTransformsBuilder_ == null) { + return java.util.Collections.unmodifiableList(messageTransforms_); + } else { + return messageTransformsBuilder_.getMessageList(); + } + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public int getMessageTransformsCount() { + if (messageTransformsBuilder_ == null) { + return messageTransforms_.size(); + } else { + return messageTransformsBuilder_.getCount(); + } + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.MessageTransform getMessageTransforms(int index) { + if (messageTransformsBuilder_ == null) { + return messageTransforms_.get(index); + } else { + return messageTransformsBuilder_.getMessage(index); + } + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransforms(int index, com.google.pubsub.v1.MessageTransform value) { + if (messageTransformsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessageTransformsIsMutable(); + messageTransforms_.set(index, value); + onChanged(); + } else { + messageTransformsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setMessageTransforms( + int index, com.google.pubsub.v1.MessageTransform.Builder builderForValue) { + if (messageTransformsBuilder_ == null) { + ensureMessageTransformsIsMutable(); + messageTransforms_.set(index, builderForValue.build()); + onChanged(); + } else { + messageTransformsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addMessageTransforms(com.google.pubsub.v1.MessageTransform value) { + if (messageTransformsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessageTransformsIsMutable(); + messageTransforms_.add(value); + onChanged(); + } else { + messageTransformsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addMessageTransforms(int index, com.google.pubsub.v1.MessageTransform value) { + if (messageTransformsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessageTransformsIsMutable(); + messageTransforms_.add(index, value); + onChanged(); + } else { + messageTransformsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addMessageTransforms( + com.google.pubsub.v1.MessageTransform.Builder builderForValue) { + if (messageTransformsBuilder_ == null) { + ensureMessageTransformsIsMutable(); + messageTransforms_.add(builderForValue.build()); + onChanged(); + } else { + messageTransformsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addMessageTransforms( + int index, com.google.pubsub.v1.MessageTransform.Builder builderForValue) { + if (messageTransformsBuilder_ == null) { + ensureMessageTransformsIsMutable(); + messageTransforms_.add(index, builderForValue.build()); + onChanged(); + } else { + messageTransformsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addAllMessageTransforms( + java.lang.Iterable values) { + if (messageTransformsBuilder_ == null) { + ensureMessageTransformsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, messageTransforms_); + onChanged(); + } else { + messageTransformsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearMessageTransforms() { + if (messageTransformsBuilder_ == null) { + messageTransforms_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000200); + onChanged(); + } else { + messageTransformsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeMessageTransforms(int index) { + if (messageTransformsBuilder_ == null) { + ensureMessageTransformsIsMutable(); + messageTransforms_.remove(index); + onChanged(); + } else { + messageTransformsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.MessageTransform.Builder getMessageTransformsBuilder(int index) { + return internalGetMessageTransformsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.MessageTransformOrBuilder getMessageTransformsOrBuilder(int index) { + if (messageTransformsBuilder_ == null) { + return messageTransforms_.get(index); + } else { + return messageTransformsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getMessageTransformsOrBuilderList() { + if (messageTransformsBuilder_ != null) { + return messageTransformsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(messageTransforms_); + } + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.MessageTransform.Builder addMessageTransformsBuilder() { + return internalGetMessageTransformsFieldBuilder() + .addBuilder(com.google.pubsub.v1.MessageTransform.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.pubsub.v1.MessageTransform.Builder addMessageTransformsBuilder(int index) { + return internalGetMessageTransformsFieldBuilder() + .addBuilder(index, com.google.pubsub.v1.MessageTransform.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. Transforms to be applied to messages published to the topic.
+     * Transforms are applied in the order specified.
+     * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getMessageTransformsBuilderList() { + return internalGetMessageTransformsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.MessageTransform, + com.google.pubsub.v1.MessageTransform.Builder, + com.google.pubsub.v1.MessageTransformOrBuilder> + internalGetMessageTransformsFieldBuilder() { + if (messageTransformsBuilder_ == null) { + messageTransformsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.pubsub.v1.MessageTransform, + com.google.pubsub.v1.MessageTransform.Builder, + com.google.pubsub.v1.MessageTransformOrBuilder>( + messageTransforms_, + ((bitField0_ & 0x00000200) != 0), + getParentForChildren(), + isClean()); + messageTransforms_ = null; + } + return messageTransformsBuilder_; + } + + private com.google.protobuf.MapField tags_; + + private com.google.protobuf.MapField internalGetTags() { + if (tags_ == null) { + return com.google.protobuf.MapField.emptyMapField(TagsDefaultEntryHolder.defaultEntry); + } + return tags_; + } + + private com.google.protobuf.MapField + internalGetMutableTags() { + if (tags_ == null) { + tags_ = com.google.protobuf.MapField.newMapField(TagsDefaultEntryHolder.defaultEntry); + } + if (!tags_.isMutable()) { + tags_ = tags_.copy(); + } + bitField0_ |= 0x00000400; + onChanged(); + return tags_; + } + + public int getTagsCount() { + return internalGetTags().getMap().size(); + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsTags(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetTags().getMap().containsKey(key); + } + + /** Use {@link #getTagsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getTags() { + return getTagsMap(); + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getTagsMap() { + return internalGetTags().getMap(); + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getTagsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetTags().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getTagsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetTags().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearTags() { + bitField0_ = (bitField0_ & ~0x00000400); + internalGetMutableTags().getMutableMap().clear(); + return this; + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeTags(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + internalGetMutableTags().getMutableMap().remove(key); + return this; + } + + /** Use alternate mutation accessors instead. */ + @java.lang.Deprecated + public java.util.Map getMutableTags() { + bitField0_ |= 0x00000400; + return internalGetMutableTags().getMutableMap(); + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putTags(java.lang.String key, java.lang.String value) { + if (key == null) { + throw new NullPointerException("map key"); + } + if (value == null) { + throw new NullPointerException("map value"); + } + internalGetMutableTags().getMutableMap().put(key, value); + bitField0_ |= 0x00000400; + return this; + } + + /** + * + * + *
+     * Optional. Input only. Immutable. Tag keys/values directly bound to this
+     * resource. For example:
+     * "123/environment": "production",
+     * "123/costCenter": "marketing"
+     * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+     * using tags with Pub/Sub resources.
+     * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putAllTags(java.util.Map values) { + internalGetMutableTags().getMutableMap().putAll(values); + bitField0_ |= 0x00000400; + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.Topic) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.Topic) + private static final com.google.pubsub.v1.Topic DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.Topic(); + } + + public static com.google.pubsub.v1.Topic getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Topic parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.Topic getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/TopicName.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/TopicName.java new file mode 100644 index 000000000000..0a21c87d864e --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/TopicName.java @@ -0,0 +1,230 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ + +package com.google.pubsub.v1; + +import com.google.api.pathtemplate.PathTemplate; +import com.google.api.pathtemplate.ValidationException; +import com.google.api.resourcenames.ResourceName; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +@Generated("by gapic-generator-java") +public class TopicName implements ResourceName { + private static final PathTemplate PROJECT_TOPIC = + PathTemplate.createWithoutUrlEncoding("projects/{project}/topics/{topic}"); + private static final String DELETED_TOPIC = "_deleted-topic_"; + private volatile Map fieldValuesMap; + private PathTemplate pathTemplate; + private String fixedValue; + private final String project; + private final String topic; + + @Deprecated + protected TopicName() { + project = null; + topic = null; + } + + private TopicName(Builder builder) { + project = Preconditions.checkNotNull(builder.getProject()); + topic = Preconditions.checkNotNull(builder.getTopic()); + pathTemplate = PROJECT_TOPIC; + } + + private TopicName(String fixedValue) { + this.fixedValue = fixedValue; + fieldValuesMap = ImmutableMap.of("", fixedValue); + project = null; + topic = null; + } + + public String getProject() { + return project; + } + + public String getTopic() { + return topic; + } + + public static Builder newBuilder() { + return new Builder(); + } + + public static Builder newProjectTopicBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + public static TopicName of(String project, String topic) { + return newBuilder().setProject(project).setTopic(topic).build(); + } + + public static TopicName ofProjectTopicName(String project, String topic) { + return newBuilder().setProject(project).setTopic(topic).build(); + } + + public static TopicName ofDeletedTopicName() { + return new TopicName("_deleted-topic_"); + } + + public static String format(String project, String topic) { + return newBuilder().setProject(project).setTopic(topic).build().toString(); + } + + public static String formatProjectTopicName(String project, String topic) { + return newBuilder().setProject(project).setTopic(topic).build().toString(); + } + + public static String formatDeletedTopicName() { + return "_deleted-topic_"; + } + + public static TopicName parse(String formattedString) { + if (formattedString.isEmpty()) { + return null; + } + if (PROJECT_TOPIC.matches(formattedString)) { + Map matchMap = PROJECT_TOPIC.match(formattedString); + return ofProjectTopicName(matchMap.get("project"), matchMap.get("topic")); + } else if (DELETED_TOPIC.equals(formattedString)) { + return new TopicName("_deleted-topic_"); + } + throw new ValidationException("TopicName.parse: formattedString not in valid format"); + } + + public static List parseList(List formattedStrings) { + List list = new ArrayList<>(formattedStrings.size()); + for (String formattedString : formattedStrings) { + list.add(parse(formattedString)); + } + return list; + } + + public static List toStringList(List values) { + List list = new ArrayList<>(values.size()); + for (TopicName value : values) { + if (value == null) { + list.add(""); + } else { + list.add(value.toString()); + } + } + return list; + } + + public static boolean isParsableFrom(String formattedString) { + return PROJECT_TOPIC.matches(formattedString) || DELETED_TOPIC.equals(formattedString); + } + + @Override + public Map getFieldValuesMap() { + if (fieldValuesMap == null) { + synchronized (this) { + if (fieldValuesMap == null) { + ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder(); + if (project != null) { + fieldMapBuilder.put("project", project); + } + if (topic != null) { + fieldMapBuilder.put("topic", topic); + } + fieldValuesMap = fieldMapBuilder.build(); + } + } + } + return fieldValuesMap; + } + + public String getFieldValue(String fieldName) { + return getFieldValuesMap().get(fieldName); + } + + @Override + public String toString() { + return fixedValue != null ? fixedValue : pathTemplate.instantiate(getFieldValuesMap()); + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o != null && getClass() == o.getClass()) { + TopicName that = ((TopicName) o); + return Objects.equals(this.project, that.project) && Objects.equals(this.topic, that.topic); + } + return false; + } + + @Override + public int hashCode() { + int h = 1; + h *= 1000003; + h ^= Objects.hashCode(project); + h *= 1000003; + h ^= Objects.hashCode(topic); + return h; + } + + /** Builder for projects/{project}/topics/{topic}. */ + public static class Builder { + private String project; + private String topic; + + protected Builder() {} + + public String getProject() { + return project; + } + + public String getTopic() { + return topic; + } + + public Builder setProject(String project) { + this.project = project; + return this; + } + + public Builder setTopic(String topic) { + this.topic = topic; + return this; + } + + private Builder(TopicName topicName) { + Preconditions.checkArgument( + Objects.equals(topicName.pathTemplate, PROJECT_TOPIC), + "toBuilder is only supported when TopicName has the pattern of" + + " projects/{project}/topics/{topic}"); + this.project = topicName.project; + this.topic = topicName.topic; + } + + public TopicName build() { + return new TopicName(this); + } + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/TopicNames.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/TopicNames.java new file mode 100644 index 000000000000..8d56e3e87427 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/TopicNames.java @@ -0,0 +1,38 @@ +/* + * Copyright 2020 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 + * + * https://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. + */ + +package com.google.pubsub.v1; + +/** + * AUTO-GENERATED DOCUMENTATION AND CLASS + * + * @deprecated This resource name class will be removed in the next major version. + */ +@javax.annotation.Generated("by GAPIC protoc plugin") +@Deprecated +public class TopicNames { + private TopicNames() {} + + public static TopicName parse(String resourceNameString) { + if (ProjectTopicName.isParsableFrom(resourceNameString)) { + return ProjectTopicName.parse(resourceNameString); + } + if (DeletedTopic.matches(resourceNameString)) { + return DeletedTopic.instance(); + } + return UntypedTopicName.parse(resourceNameString); + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/TopicOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/TopicOrBuilder.java new file mode 100644 index 000000000000..4d3334471535 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/TopicOrBuilder.java @@ -0,0 +1,586 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface TopicOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.Topic) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. Identifier. The name of the topic. It must have the format
+   * `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
+   * and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
+   * underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
+   * signs (`%`). It must be between 3 and 255 characters in length, and it
+   * must not start with `"goog"`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Required. Identifier. The name of the topic. It must have the format
+   * `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
+   * and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
+   * underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
+   * signs (`%`). It must be between 3 and 255 characters in length, and it
+   * must not start with `"goog"`.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.field_behavior) = IDENTIFIER]; + * + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + int getLabelsCount(); + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + boolean containsLabels(java.lang.String key); + + /** Use {@link #getLabelsMap()} instead. */ + @java.lang.Deprecated + java.util.Map getLabels(); + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + java.util.Map getLabelsMap(); + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + /* nullable */ + java.lang.String getLabelsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue); + + /** + * + * + *
+   * Optional. See [Creating and managing labels]
+   * (https://cloud.google.com/pubsub/docs/labels).
+   * 
+ * + * map<string, string> labels = 2 [(.google.api.field_behavior) = OPTIONAL]; + */ + java.lang.String getLabelsOrThrow(java.lang.String key); + + /** + * + * + *
+   * Optional. Policy constraining the set of Google Cloud Platform regions
+   * where messages published to the topic may be stored. If not present, then
+   * no constraints are in effect.
+   * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageStoragePolicy field is set. + */ + boolean hasMessageStoragePolicy(); + + /** + * + * + *
+   * Optional. Policy constraining the set of Google Cloud Platform regions
+   * where messages published to the topic may be stored. If not present, then
+   * no constraints are in effect.
+   * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageStoragePolicy. + */ + com.google.pubsub.v1.MessageStoragePolicy getMessageStoragePolicy(); + + /** + * + * + *
+   * Optional. Policy constraining the set of Google Cloud Platform regions
+   * where messages published to the topic may be stored. If not present, then
+   * no constraints are in effect.
+   * 
+ * + * + * .google.pubsub.v1.MessageStoragePolicy message_storage_policy = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.MessageStoragePolicyOrBuilder getMessageStoragePolicyOrBuilder(); + + /** + * + * + *
+   * Optional. The resource name of the Cloud KMS CryptoKey to be used to
+   * protect access to messages published on this topic.
+   *
+   * The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
+   * 
+ * + * + * string kms_key_name = 5 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The kmsKeyName. + */ + java.lang.String getKmsKeyName(); + + /** + * + * + *
+   * Optional. The resource name of the Cloud KMS CryptoKey to be used to
+   * protect access to messages published on this topic.
+   *
+   * The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
+   * 
+ * + * + * string kms_key_name = 5 [(.google.api.field_behavior) = OPTIONAL, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for kmsKeyName. + */ + com.google.protobuf.ByteString getKmsKeyNameBytes(); + + /** + * + * + *
+   * Optional. Settings for validating messages published against a schema.
+   * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the schemaSettings field is set. + */ + boolean hasSchemaSettings(); + + /** + * + * + *
+   * Optional. Settings for validating messages published against a schema.
+   * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The schemaSettings. + */ + com.google.pubsub.v1.SchemaSettings getSchemaSettings(); + + /** + * + * + *
+   * Optional. Settings for validating messages published against a schema.
+   * 
+ * + * + * .google.pubsub.v1.SchemaSettings schema_settings = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.SchemaSettingsOrBuilder getSchemaSettingsOrBuilder(); + + /** + * + * + *
+   * Optional. Reserved for future use. This field is set only in responses from
+   * the server; it is ignored if it is set in any requests.
+   * 
+ * + * bool satisfies_pzs = 7 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The satisfiesPzs. + */ + boolean getSatisfiesPzs(); + + /** + * + * + *
+   * Optional. Indicates the minimum duration to retain a message after it is
+   * published to the topic. If this field is set, messages published to the
+   * topic in the last `message_retention_duration` are always available to
+   * subscribers. For instance, it allows any attached subscription to [seek to
+   * a
+   * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+   * that is up to `message_retention_duration` in the past. If this field is
+   * not set, message retention is controlled by settings on individual
+   * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+   * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the messageRetentionDuration field is set. + */ + boolean hasMessageRetentionDuration(); + + /** + * + * + *
+   * Optional. Indicates the minimum duration to retain a message after it is
+   * published to the topic. If this field is set, messages published to the
+   * topic in the last `message_retention_duration` are always available to
+   * subscribers. For instance, it allows any attached subscription to [seek to
+   * a
+   * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+   * that is up to `message_retention_duration` in the past. If this field is
+   * not set, message retention is controlled by settings on individual
+   * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+   * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The messageRetentionDuration. + */ + com.google.protobuf.Duration getMessageRetentionDuration(); + + /** + * + * + *
+   * Optional. Indicates the minimum duration to retain a message after it is
+   * published to the topic. If this field is set, messages published to the
+   * topic in the last `message_retention_duration` are always available to
+   * subscribers. For instance, it allows any attached subscription to [seek to
+   * a
+   * timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
+   * that is up to `message_retention_duration` in the past. If this field is
+   * not set, message retention is controlled by settings on individual
+   * subscriptions. Cannot be more than 31 days or less than 10 minutes.
+   * 
+ * + * + * .google.protobuf.Duration message_retention_duration = 8 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.protobuf.DurationOrBuilder getMessageRetentionDurationOrBuilder(); + + /** + * + * + *
+   * Output only. An output-only field indicating the state of the topic.
+   * 
+ * + * .google.pubsub.v1.Topic.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The enum numeric value on the wire for state. + */ + int getStateValue(); + + /** + * + * + *
+   * Output only. An output-only field indicating the state of the topic.
+   * 
+ * + * .google.pubsub.v1.Topic.State state = 9 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * + * @return The state. + */ + com.google.pubsub.v1.Topic.State getState(); + + /** + * + * + *
+   * Optional. Settings for ingestion from a data source into this topic.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the ingestionDataSourceSettings field is set. + */ + boolean hasIngestionDataSourceSettings(); + + /** + * + * + *
+   * Optional. Settings for ingestion from a data source into this topic.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The ingestionDataSourceSettings. + */ + com.google.pubsub.v1.IngestionDataSourceSettings getIngestionDataSourceSettings(); + + /** + * + * + *
+   * Optional. Settings for ingestion from a data source into this topic.
+   * 
+ * + * + * .google.pubsub.v1.IngestionDataSourceSettings ingestion_data_source_settings = 10 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.IngestionDataSourceSettingsOrBuilder + getIngestionDataSourceSettingsOrBuilder(); + + /** + * + * + *
+   * Optional. Transforms to be applied to messages published to the topic.
+   * Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List getMessageTransformsList(); + + /** + * + * + *
+   * Optional. Transforms to be applied to messages published to the topic.
+   * Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.MessageTransform getMessageTransforms(int index); + + /** + * + * + *
+   * Optional. Transforms to be applied to messages published to the topic.
+   * Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getMessageTransformsCount(); + + /** + * + * + *
+   * Optional. Transforms to be applied to messages published to the topic.
+   * Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List + getMessageTransformsOrBuilderList(); + + /** + * + * + *
+   * Optional. Transforms to be applied to messages published to the topic.
+   * Transforms are applied in the order specified.
+   * 
+ * + * + * repeated .google.pubsub.v1.MessageTransform message_transforms = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.pubsub.v1.MessageTransformOrBuilder getMessageTransformsOrBuilder(int index); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + int getTagsCount(); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + boolean containsTags(java.lang.String key); + + /** Use {@link #getTagsMap()} instead. */ + @java.lang.Deprecated + java.util.Map getTags(); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.Map getTagsMap(); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + /* nullable */ + java.lang.String getTagsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue); + + /** + * + * + *
+   * Optional. Input only. Immutable. Tag keys/values directly bound to this
+   * resource. For example:
+   * "123/environment": "production",
+   * "123/costCenter": "marketing"
+   * See https://docs.cloud.google.com/pubsub/docs/tags for more information on
+   * using tags with Pub/Sub resources.
+   * 
+ * + * + * map<string, string> tags = 14 [(.google.api.field_behavior) = INPUT_ONLY, (.google.api.field_behavior) = IMMUTABLE, (.google.api.field_behavior) = OPTIONAL]; + * + */ + java.lang.String getTagsOrThrow(java.lang.String key); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UntypedTopicName.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UntypedTopicName.java new file mode 100644 index 000000000000..cb571b0b80f7 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UntypedTopicName.java @@ -0,0 +1,84 @@ +/* + * Copyright 2020 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 + * + * https://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. + */ + +package com.google.pubsub.v1; + +import com.google.api.resourcenames.ResourceName; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.Map; + +/** + * AUTO-GENERATED DOCUMENTATION AND CLASS + * + * @deprecated This resource name class will be removed in the next major version. + */ +@javax.annotation.Generated("by GAPIC protoc plugin") +@Deprecated +public class UntypedTopicName extends TopicName { + + private final String rawValue; + private Map valueMap; + + private UntypedTopicName(String rawValue) { + this.rawValue = Preconditions.checkNotNull(rawValue); + this.valueMap = ImmutableMap.of("", rawValue); + } + + public static UntypedTopicName from(ResourceName resourceName) { + return new UntypedTopicName(resourceName.toString()); + } + + public static UntypedTopicName parse(String formattedString) { + return new UntypedTopicName(formattedString); + } + + public static boolean isParsableFrom(String formattedString) { + return true; + } + + /** Return a map with a single value rawValue keyed on an empty String "". */ + public Map getFieldValuesMap() { + return valueMap; + } + + /** Return the initial rawValue if @param fieldName is an empty String, else return null. */ + public String getFieldValue(String fieldName) { + return valueMap.get(fieldName); + } + + @Override + public String toString() { + return rawValue; + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o instanceof UntypedTopicName) { + UntypedTopicName that = (UntypedTopicName) o; + return this.rawValue.equals(that.rawValue); + } + return false; + } + + @Override + public int hashCode() { + return rawValue.hashCode(); + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateSnapshotRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateSnapshotRequest.java new file mode 100644 index 000000000000..954a9f822602 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateSnapshotRequest.java @@ -0,0 +1,999 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the UpdateSnapshot method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.UpdateSnapshotRequest} + */ +@com.google.protobuf.Generated +public final class UpdateSnapshotRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.UpdateSnapshotRequest) + UpdateSnapshotRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateSnapshotRequest"); + } + + // Use UpdateSnapshotRequest.newBuilder() to construct. + private UpdateSnapshotRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private UpdateSnapshotRequest() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateSnapshotRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateSnapshotRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.UpdateSnapshotRequest.class, + com.google.pubsub.v1.UpdateSnapshotRequest.Builder.class); + } + + private int bitField0_; + public static final int SNAPSHOT_FIELD_NUMBER = 1; + private com.google.pubsub.v1.Snapshot snapshot_; + + /** + * + * + *
+   * Required. The updated snapshot object.
+   * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the snapshot field is set. + */ + @java.lang.Override + public boolean hasSnapshot() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Required. The updated snapshot object.
+   * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The snapshot. + */ + @java.lang.Override + public com.google.pubsub.v1.Snapshot getSnapshot() { + return snapshot_ == null ? com.google.pubsub.v1.Snapshot.getDefaultInstance() : snapshot_; + } + + /** + * + * + *
+   * Required. The updated snapshot object.
+   * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + @java.lang.Override + public com.google.pubsub.v1.SnapshotOrBuilder getSnapshotOrBuilder() { + return snapshot_ == null ? com.google.pubsub.v1.Snapshot.getDefaultInstance() : snapshot_; + } + + public static final int UPDATE_MASK_FIELD_NUMBER = 2; + private com.google.protobuf.FieldMask updateMask_; + + /** + * + * + *
+   * Required. Indicates which fields in the provided snapshot to update.
+   * Must be specified and non-empty.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the updateMask field is set. + */ + @java.lang.Override + public boolean hasUpdateMask() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+   * Required. Indicates which fields in the provided snapshot to update.
+   * Must be specified and non-empty.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The updateMask. + */ + @java.lang.Override + public com.google.protobuf.FieldMask getUpdateMask() { + return updateMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : updateMask_; + } + + /** + * + * + *
+   * Required. Indicates which fields in the provided snapshot to update.
+   * Must be specified and non-empty.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { + return updateMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : updateMask_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getSnapshot()); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(2, getUpdateMask()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getSnapshot()); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getUpdateMask()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.UpdateSnapshotRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.UpdateSnapshotRequest other = + (com.google.pubsub.v1.UpdateSnapshotRequest) obj; + + if (hasSnapshot() != other.hasSnapshot()) return false; + if (hasSnapshot()) { + if (!getSnapshot().equals(other.getSnapshot())) return false; + } + if (hasUpdateMask() != other.hasUpdateMask()) return false; + if (hasUpdateMask()) { + if (!getUpdateMask().equals(other.getUpdateMask())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasSnapshot()) { + hash = (37 * hash) + SNAPSHOT_FIELD_NUMBER; + hash = (53 * hash) + getSnapshot().hashCode(); + } + if (hasUpdateMask()) { + hash = (37 * hash) + UPDATE_MASK_FIELD_NUMBER; + hash = (53 * hash) + getUpdateMask().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.UpdateSnapshotRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.UpdateSnapshotRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateSnapshotRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.UpdateSnapshotRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateSnapshotRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.UpdateSnapshotRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateSnapshotRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.UpdateSnapshotRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateSnapshotRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.UpdateSnapshotRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateSnapshotRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.UpdateSnapshotRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.UpdateSnapshotRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the UpdateSnapshot method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.UpdateSnapshotRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.UpdateSnapshotRequest) + com.google.pubsub.v1.UpdateSnapshotRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateSnapshotRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateSnapshotRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.UpdateSnapshotRequest.class, + com.google.pubsub.v1.UpdateSnapshotRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.UpdateSnapshotRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetSnapshotFieldBuilder(); + internalGetUpdateMaskFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + snapshot_ = null; + if (snapshotBuilder_ != null) { + snapshotBuilder_.dispose(); + snapshotBuilder_ = null; + } + updateMask_ = null; + if (updateMaskBuilder_ != null) { + updateMaskBuilder_.dispose(); + updateMaskBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateSnapshotRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.UpdateSnapshotRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.UpdateSnapshotRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.UpdateSnapshotRequest build() { + com.google.pubsub.v1.UpdateSnapshotRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.UpdateSnapshotRequest buildPartial() { + com.google.pubsub.v1.UpdateSnapshotRequest result = + new com.google.pubsub.v1.UpdateSnapshotRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.UpdateSnapshotRequest result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.snapshot_ = snapshotBuilder_ == null ? snapshot_ : snapshotBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.updateMask_ = updateMaskBuilder_ == null ? updateMask_ : updateMaskBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.UpdateSnapshotRequest) { + return mergeFrom((com.google.pubsub.v1.UpdateSnapshotRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.UpdateSnapshotRequest other) { + if (other == com.google.pubsub.v1.UpdateSnapshotRequest.getDefaultInstance()) return this; + if (other.hasSnapshot()) { + mergeSnapshot(other.getSnapshot()); + } + if (other.hasUpdateMask()) { + mergeUpdateMask(other.getUpdateMask()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage( + internalGetSnapshotFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetUpdateMaskFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.pubsub.v1.Snapshot snapshot_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Snapshot, + com.google.pubsub.v1.Snapshot.Builder, + com.google.pubsub.v1.SnapshotOrBuilder> + snapshotBuilder_; + + /** + * + * + *
+     * Required. The updated snapshot object.
+     * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the snapshot field is set. + */ + public boolean hasSnapshot() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+     * Required. The updated snapshot object.
+     * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The snapshot. + */ + public com.google.pubsub.v1.Snapshot getSnapshot() { + if (snapshotBuilder_ == null) { + return snapshot_ == null ? com.google.pubsub.v1.Snapshot.getDefaultInstance() : snapshot_; + } else { + return snapshotBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. The updated snapshot object.
+     * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setSnapshot(com.google.pubsub.v1.Snapshot value) { + if (snapshotBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + snapshot_ = value; + } else { + snapshotBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The updated snapshot object.
+     * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setSnapshot(com.google.pubsub.v1.Snapshot.Builder builderForValue) { + if (snapshotBuilder_ == null) { + snapshot_ = builderForValue.build(); + } else { + snapshotBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The updated snapshot object.
+     * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeSnapshot(com.google.pubsub.v1.Snapshot value) { + if (snapshotBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && snapshot_ != null + && snapshot_ != com.google.pubsub.v1.Snapshot.getDefaultInstance()) { + getSnapshotBuilder().mergeFrom(value); + } else { + snapshot_ = value; + } + } else { + snapshotBuilder_.mergeFrom(value); + } + if (snapshot_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. The updated snapshot object.
+     * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearSnapshot() { + bitField0_ = (bitField0_ & ~0x00000001); + snapshot_ = null; + if (snapshotBuilder_ != null) { + snapshotBuilder_.dispose(); + snapshotBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The updated snapshot object.
+     * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.pubsub.v1.Snapshot.Builder getSnapshotBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetSnapshotFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. The updated snapshot object.
+     * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.pubsub.v1.SnapshotOrBuilder getSnapshotOrBuilder() { + if (snapshotBuilder_ != null) { + return snapshotBuilder_.getMessageOrBuilder(); + } else { + return snapshot_ == null ? com.google.pubsub.v1.Snapshot.getDefaultInstance() : snapshot_; + } + } + + /** + * + * + *
+     * Required. The updated snapshot object.
+     * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Snapshot, + com.google.pubsub.v1.Snapshot.Builder, + com.google.pubsub.v1.SnapshotOrBuilder> + internalGetSnapshotFieldBuilder() { + if (snapshotBuilder_ == null) { + snapshotBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Snapshot, + com.google.pubsub.v1.Snapshot.Builder, + com.google.pubsub.v1.SnapshotOrBuilder>( + getSnapshot(), getParentForChildren(), isClean()); + snapshot_ = null; + } + return snapshotBuilder_; + } + + private com.google.protobuf.FieldMask updateMask_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.FieldMask, + com.google.protobuf.FieldMask.Builder, + com.google.protobuf.FieldMaskOrBuilder> + updateMaskBuilder_; + + /** + * + * + *
+     * Required. Indicates which fields in the provided snapshot to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the updateMask field is set. + */ + public boolean hasUpdateMask() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided snapshot to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The updateMask. + */ + public com.google.protobuf.FieldMask getUpdateMask() { + if (updateMaskBuilder_ == null) { + return updateMask_ == null + ? com.google.protobuf.FieldMask.getDefaultInstance() + : updateMask_; + } else { + return updateMaskBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided snapshot to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setUpdateMask(com.google.protobuf.FieldMask value) { + if (updateMaskBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + updateMask_ = value; + } else { + updateMaskBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided snapshot to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setUpdateMask(com.google.protobuf.FieldMask.Builder builderForValue) { + if (updateMaskBuilder_ == null) { + updateMask_ = builderForValue.build(); + } else { + updateMaskBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided snapshot to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeUpdateMask(com.google.protobuf.FieldMask value) { + if (updateMaskBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && updateMask_ != null + && updateMask_ != com.google.protobuf.FieldMask.getDefaultInstance()) { + getUpdateMaskBuilder().mergeFrom(value); + } else { + updateMask_ = value; + } + } else { + updateMaskBuilder_.mergeFrom(value); + } + if (updateMask_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided snapshot to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearUpdateMask() { + bitField0_ = (bitField0_ & ~0x00000002); + updateMask_ = null; + if (updateMaskBuilder_ != null) { + updateMaskBuilder_.dispose(); + updateMaskBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided snapshot to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.FieldMask.Builder getUpdateMaskBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetUpdateMaskFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided snapshot to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { + if (updateMaskBuilder_ != null) { + return updateMaskBuilder_.getMessageOrBuilder(); + } else { + return updateMask_ == null + ? com.google.protobuf.FieldMask.getDefaultInstance() + : updateMask_; + } + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided snapshot to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.FieldMask, + com.google.protobuf.FieldMask.Builder, + com.google.protobuf.FieldMaskOrBuilder> + internalGetUpdateMaskFieldBuilder() { + if (updateMaskBuilder_ == null) { + updateMaskBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.FieldMask, + com.google.protobuf.FieldMask.Builder, + com.google.protobuf.FieldMaskOrBuilder>( + getUpdateMask(), getParentForChildren(), isClean()); + updateMask_ = null; + } + return updateMaskBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.UpdateSnapshotRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.UpdateSnapshotRequest) + private static final com.google.pubsub.v1.UpdateSnapshotRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.UpdateSnapshotRequest(); + } + + public static com.google.pubsub.v1.UpdateSnapshotRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public UpdateSnapshotRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.UpdateSnapshotRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateSnapshotRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateSnapshotRequestOrBuilder.java new file mode 100644 index 000000000000..76a1b76dcba7 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateSnapshotRequestOrBuilder.java @@ -0,0 +1,108 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface UpdateSnapshotRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.UpdateSnapshotRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The updated snapshot object.
+   * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the snapshot field is set. + */ + boolean hasSnapshot(); + + /** + * + * + *
+   * Required. The updated snapshot object.
+   * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The snapshot. + */ + com.google.pubsub.v1.Snapshot getSnapshot(); + + /** + * + * + *
+   * Required. The updated snapshot object.
+   * 
+ * + * .google.pubsub.v1.Snapshot snapshot = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + com.google.pubsub.v1.SnapshotOrBuilder getSnapshotOrBuilder(); + + /** + * + * + *
+   * Required. Indicates which fields in the provided snapshot to update.
+   * Must be specified and non-empty.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the updateMask field is set. + */ + boolean hasUpdateMask(); + + /** + * + * + *
+   * Required. Indicates which fields in the provided snapshot to update.
+   * Must be specified and non-empty.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The updateMask. + */ + com.google.protobuf.FieldMask getUpdateMask(); + + /** + * + * + *
+   * Required. Indicates which fields in the provided snapshot to update.
+   * Must be specified and non-empty.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateSubscriptionRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateSubscriptionRequest.java new file mode 100644 index 000000000000..59183a696533 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateSubscriptionRequest.java @@ -0,0 +1,1023 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the UpdateSubscription method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.UpdateSubscriptionRequest} + */ +@com.google.protobuf.Generated +public final class UpdateSubscriptionRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.UpdateSubscriptionRequest) + UpdateSubscriptionRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateSubscriptionRequest"); + } + + // Use UpdateSubscriptionRequest.newBuilder() to construct. + private UpdateSubscriptionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private UpdateSubscriptionRequest() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateSubscriptionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateSubscriptionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.UpdateSubscriptionRequest.class, + com.google.pubsub.v1.UpdateSubscriptionRequest.Builder.class); + } + + private int bitField0_; + public static final int SUBSCRIPTION_FIELD_NUMBER = 1; + private com.google.pubsub.v1.Subscription subscription_; + + /** + * + * + *
+   * Required. The updated subscription object.
+   * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the subscription field is set. + */ + @java.lang.Override + public boolean hasSubscription() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Required. The updated subscription object.
+   * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The subscription. + */ + @java.lang.Override + public com.google.pubsub.v1.Subscription getSubscription() { + return subscription_ == null + ? com.google.pubsub.v1.Subscription.getDefaultInstance() + : subscription_; + } + + /** + * + * + *
+   * Required. The updated subscription object.
+   * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.pubsub.v1.SubscriptionOrBuilder getSubscriptionOrBuilder() { + return subscription_ == null + ? com.google.pubsub.v1.Subscription.getDefaultInstance() + : subscription_; + } + + public static final int UPDATE_MASK_FIELD_NUMBER = 2; + private com.google.protobuf.FieldMask updateMask_; + + /** + * + * + *
+   * Required. Indicates which fields in the provided subscription to update.
+   * Must be specified and non-empty.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the updateMask field is set. + */ + @java.lang.Override + public boolean hasUpdateMask() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+   * Required. Indicates which fields in the provided subscription to update.
+   * Must be specified and non-empty.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The updateMask. + */ + @java.lang.Override + public com.google.protobuf.FieldMask getUpdateMask() { + return updateMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : updateMask_; + } + + /** + * + * + *
+   * Required. Indicates which fields in the provided subscription to update.
+   * Must be specified and non-empty.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { + return updateMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : updateMask_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getSubscription()); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(2, getUpdateMask()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getSubscription()); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getUpdateMask()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.UpdateSubscriptionRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.UpdateSubscriptionRequest other = + (com.google.pubsub.v1.UpdateSubscriptionRequest) obj; + + if (hasSubscription() != other.hasSubscription()) return false; + if (hasSubscription()) { + if (!getSubscription().equals(other.getSubscription())) return false; + } + if (hasUpdateMask() != other.hasUpdateMask()) return false; + if (hasUpdateMask()) { + if (!getUpdateMask().equals(other.getUpdateMask())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasSubscription()) { + hash = (37 * hash) + SUBSCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getSubscription().hashCode(); + } + if (hasUpdateMask()) { + hash = (37 * hash) + UPDATE_MASK_FIELD_NUMBER; + hash = (53 * hash) + getUpdateMask().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.UpdateSubscriptionRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.UpdateSubscriptionRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateSubscriptionRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.UpdateSubscriptionRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateSubscriptionRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.UpdateSubscriptionRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateSubscriptionRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.UpdateSubscriptionRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateSubscriptionRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.UpdateSubscriptionRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateSubscriptionRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.UpdateSubscriptionRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.UpdateSubscriptionRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the UpdateSubscription method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.UpdateSubscriptionRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.UpdateSubscriptionRequest) + com.google.pubsub.v1.UpdateSubscriptionRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateSubscriptionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateSubscriptionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.UpdateSubscriptionRequest.class, + com.google.pubsub.v1.UpdateSubscriptionRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.UpdateSubscriptionRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetSubscriptionFieldBuilder(); + internalGetUpdateMaskFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + subscription_ = null; + if (subscriptionBuilder_ != null) { + subscriptionBuilder_.dispose(); + subscriptionBuilder_ = null; + } + updateMask_ = null; + if (updateMaskBuilder_ != null) { + updateMaskBuilder_.dispose(); + updateMaskBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateSubscriptionRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.UpdateSubscriptionRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.UpdateSubscriptionRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.UpdateSubscriptionRequest build() { + com.google.pubsub.v1.UpdateSubscriptionRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.UpdateSubscriptionRequest buildPartial() { + com.google.pubsub.v1.UpdateSubscriptionRequest result = + new com.google.pubsub.v1.UpdateSubscriptionRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.UpdateSubscriptionRequest result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.subscription_ = + subscriptionBuilder_ == null ? subscription_ : subscriptionBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.updateMask_ = updateMaskBuilder_ == null ? updateMask_ : updateMaskBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.UpdateSubscriptionRequest) { + return mergeFrom((com.google.pubsub.v1.UpdateSubscriptionRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.UpdateSubscriptionRequest other) { + if (other == com.google.pubsub.v1.UpdateSubscriptionRequest.getDefaultInstance()) return this; + if (other.hasSubscription()) { + mergeSubscription(other.getSubscription()); + } + if (other.hasUpdateMask()) { + mergeUpdateMask(other.getUpdateMask()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage( + internalGetSubscriptionFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetUpdateMaskFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.pubsub.v1.Subscription subscription_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Subscription, + com.google.pubsub.v1.Subscription.Builder, + com.google.pubsub.v1.SubscriptionOrBuilder> + subscriptionBuilder_; + + /** + * + * + *
+     * Required. The updated subscription object.
+     * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the subscription field is set. + */ + public boolean hasSubscription() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+     * Required. The updated subscription object.
+     * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The subscription. + */ + public com.google.pubsub.v1.Subscription getSubscription() { + if (subscriptionBuilder_ == null) { + return subscription_ == null + ? com.google.pubsub.v1.Subscription.getDefaultInstance() + : subscription_; + } else { + return subscriptionBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. The updated subscription object.
+     * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setSubscription(com.google.pubsub.v1.Subscription value) { + if (subscriptionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + subscription_ = value; + } else { + subscriptionBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The updated subscription object.
+     * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setSubscription(com.google.pubsub.v1.Subscription.Builder builderForValue) { + if (subscriptionBuilder_ == null) { + subscription_ = builderForValue.build(); + } else { + subscriptionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The updated subscription object.
+     * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeSubscription(com.google.pubsub.v1.Subscription value) { + if (subscriptionBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && subscription_ != null + && subscription_ != com.google.pubsub.v1.Subscription.getDefaultInstance()) { + getSubscriptionBuilder().mergeFrom(value); + } else { + subscription_ = value; + } + } else { + subscriptionBuilder_.mergeFrom(value); + } + if (subscription_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. The updated subscription object.
+     * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearSubscription() { + bitField0_ = (bitField0_ & ~0x00000001); + subscription_ = null; + if (subscriptionBuilder_ != null) { + subscriptionBuilder_.dispose(); + subscriptionBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The updated subscription object.
+     * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.pubsub.v1.Subscription.Builder getSubscriptionBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetSubscriptionFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. The updated subscription object.
+     * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.pubsub.v1.SubscriptionOrBuilder getSubscriptionOrBuilder() { + if (subscriptionBuilder_ != null) { + return subscriptionBuilder_.getMessageOrBuilder(); + } else { + return subscription_ == null + ? com.google.pubsub.v1.Subscription.getDefaultInstance() + : subscription_; + } + } + + /** + * + * + *
+     * Required. The updated subscription object.
+     * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Subscription, + com.google.pubsub.v1.Subscription.Builder, + com.google.pubsub.v1.SubscriptionOrBuilder> + internalGetSubscriptionFieldBuilder() { + if (subscriptionBuilder_ == null) { + subscriptionBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Subscription, + com.google.pubsub.v1.Subscription.Builder, + com.google.pubsub.v1.SubscriptionOrBuilder>( + getSubscription(), getParentForChildren(), isClean()); + subscription_ = null; + } + return subscriptionBuilder_; + } + + private com.google.protobuf.FieldMask updateMask_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.FieldMask, + com.google.protobuf.FieldMask.Builder, + com.google.protobuf.FieldMaskOrBuilder> + updateMaskBuilder_; + + /** + * + * + *
+     * Required. Indicates which fields in the provided subscription to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the updateMask field is set. + */ + public boolean hasUpdateMask() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided subscription to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The updateMask. + */ + public com.google.protobuf.FieldMask getUpdateMask() { + if (updateMaskBuilder_ == null) { + return updateMask_ == null + ? com.google.protobuf.FieldMask.getDefaultInstance() + : updateMask_; + } else { + return updateMaskBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided subscription to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setUpdateMask(com.google.protobuf.FieldMask value) { + if (updateMaskBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + updateMask_ = value; + } else { + updateMaskBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided subscription to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setUpdateMask(com.google.protobuf.FieldMask.Builder builderForValue) { + if (updateMaskBuilder_ == null) { + updateMask_ = builderForValue.build(); + } else { + updateMaskBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided subscription to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeUpdateMask(com.google.protobuf.FieldMask value) { + if (updateMaskBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && updateMask_ != null + && updateMask_ != com.google.protobuf.FieldMask.getDefaultInstance()) { + getUpdateMaskBuilder().mergeFrom(value); + } else { + updateMask_ = value; + } + } else { + updateMaskBuilder_.mergeFrom(value); + } + if (updateMask_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided subscription to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearUpdateMask() { + bitField0_ = (bitField0_ & ~0x00000002); + updateMask_ = null; + if (updateMaskBuilder_ != null) { + updateMaskBuilder_.dispose(); + updateMaskBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided subscription to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.FieldMask.Builder getUpdateMaskBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetUpdateMaskFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided subscription to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { + if (updateMaskBuilder_ != null) { + return updateMaskBuilder_.getMessageOrBuilder(); + } else { + return updateMask_ == null + ? com.google.protobuf.FieldMask.getDefaultInstance() + : updateMask_; + } + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided subscription to update.
+     * Must be specified and non-empty.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.FieldMask, + com.google.protobuf.FieldMask.Builder, + com.google.protobuf.FieldMaskOrBuilder> + internalGetUpdateMaskFieldBuilder() { + if (updateMaskBuilder_ == null) { + updateMaskBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.FieldMask, + com.google.protobuf.FieldMask.Builder, + com.google.protobuf.FieldMaskOrBuilder>( + getUpdateMask(), getParentForChildren(), isClean()); + updateMask_ = null; + } + return updateMaskBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.UpdateSubscriptionRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.UpdateSubscriptionRequest) + private static final com.google.pubsub.v1.UpdateSubscriptionRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.UpdateSubscriptionRequest(); + } + + public static com.google.pubsub.v1.UpdateSubscriptionRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public UpdateSubscriptionRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.UpdateSubscriptionRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateSubscriptionRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateSubscriptionRequestOrBuilder.java new file mode 100644 index 000000000000..e54b29c99721 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateSubscriptionRequestOrBuilder.java @@ -0,0 +1,114 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface UpdateSubscriptionRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.UpdateSubscriptionRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The updated subscription object.
+   * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the subscription field is set. + */ + boolean hasSubscription(); + + /** + * + * + *
+   * Required. The updated subscription object.
+   * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The subscription. + */ + com.google.pubsub.v1.Subscription getSubscription(); + + /** + * + * + *
+   * Required. The updated subscription object.
+   * 
+ * + * + * .google.pubsub.v1.Subscription subscription = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.pubsub.v1.SubscriptionOrBuilder getSubscriptionOrBuilder(); + + /** + * + * + *
+   * Required. Indicates which fields in the provided subscription to update.
+   * Must be specified and non-empty.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the updateMask field is set. + */ + boolean hasUpdateMask(); + + /** + * + * + *
+   * Required. Indicates which fields in the provided subscription to update.
+   * Must be specified and non-empty.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The updateMask. + */ + com.google.protobuf.FieldMask getUpdateMask(); + + /** + * + * + *
+   * Required. Indicates which fields in the provided subscription to update.
+   * Must be specified and non-empty.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateTopicRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateTopicRequest.java new file mode 100644 index 000000000000..a504c1e61379 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateTopicRequest.java @@ -0,0 +1,1023 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the UpdateTopic method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.UpdateTopicRequest} + */ +@com.google.protobuf.Generated +public final class UpdateTopicRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.UpdateTopicRequest) + UpdateTopicRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "UpdateTopicRequest"); + } + + // Use UpdateTopicRequest.newBuilder() to construct. + private UpdateTopicRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private UpdateTopicRequest() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateTopicRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateTopicRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.UpdateTopicRequest.class, + com.google.pubsub.v1.UpdateTopicRequest.Builder.class); + } + + private int bitField0_; + public static final int TOPIC_FIELD_NUMBER = 1; + private com.google.pubsub.v1.Topic topic_; + + /** + * + * + *
+   * Required. The updated topic object.
+   * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the topic field is set. + */ + @java.lang.Override + public boolean hasTopic() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Required. The updated topic object.
+   * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The topic. + */ + @java.lang.Override + public com.google.pubsub.v1.Topic getTopic() { + return topic_ == null ? com.google.pubsub.v1.Topic.getDefaultInstance() : topic_; + } + + /** + * + * + *
+   * Required. The updated topic object.
+   * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + @java.lang.Override + public com.google.pubsub.v1.TopicOrBuilder getTopicOrBuilder() { + return topic_ == null ? com.google.pubsub.v1.Topic.getDefaultInstance() : topic_; + } + + public static final int UPDATE_MASK_FIELD_NUMBER = 2; + private com.google.protobuf.FieldMask updateMask_; + + /** + * + * + *
+   * Required. Indicates which fields in the provided topic to update. Must be
+   * specified and non-empty. Note that if `update_mask` contains
+   * "message_storage_policy" but the `message_storage_policy` is not set in
+   * the `topic` provided above, then the updated value is determined by the
+   * policy configured at the project or organization level.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the updateMask field is set. + */ + @java.lang.Override + public boolean hasUpdateMask() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+   * Required. Indicates which fields in the provided topic to update. Must be
+   * specified and non-empty. Note that if `update_mask` contains
+   * "message_storage_policy" but the `message_storage_policy` is not set in
+   * the `topic` provided above, then the updated value is determined by the
+   * policy configured at the project or organization level.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The updateMask. + */ + @java.lang.Override + public com.google.protobuf.FieldMask getUpdateMask() { + return updateMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : updateMask_; + } + + /** + * + * + *
+   * Required. Indicates which fields in the provided topic to update. Must be
+   * specified and non-empty. Note that if `update_mask` contains
+   * "message_storage_policy" but the `message_storage_policy` is not set in
+   * the `topic` provided above, then the updated value is determined by the
+   * policy configured at the project or organization level.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { + return updateMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : updateMask_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getTopic()); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(2, getUpdateMask()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getTopic()); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getUpdateMask()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.UpdateTopicRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.UpdateTopicRequest other = (com.google.pubsub.v1.UpdateTopicRequest) obj; + + if (hasTopic() != other.hasTopic()) return false; + if (hasTopic()) { + if (!getTopic().equals(other.getTopic())) return false; + } + if (hasUpdateMask() != other.hasUpdateMask()) return false; + if (hasUpdateMask()) { + if (!getUpdateMask().equals(other.getUpdateMask())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasTopic()) { + hash = (37 * hash) + TOPIC_FIELD_NUMBER; + hash = (53 * hash) + getTopic().hashCode(); + } + if (hasUpdateMask()) { + hash = (37 * hash) + UPDATE_MASK_FIELD_NUMBER; + hash = (53 * hash) + getUpdateMask().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.UpdateTopicRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.UpdateTopicRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateTopicRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.UpdateTopicRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateTopicRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.UpdateTopicRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateTopicRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.UpdateTopicRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateTopicRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.UpdateTopicRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.UpdateTopicRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.UpdateTopicRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.UpdateTopicRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the UpdateTopic method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.UpdateTopicRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.UpdateTopicRequest) + com.google.pubsub.v1.UpdateTopicRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateTopicRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateTopicRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.UpdateTopicRequest.class, + com.google.pubsub.v1.UpdateTopicRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.UpdateTopicRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetTopicFieldBuilder(); + internalGetUpdateMaskFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + topic_ = null; + if (topicBuilder_ != null) { + topicBuilder_.dispose(); + topicBuilder_ = null; + } + updateMask_ = null; + if (updateMaskBuilder_ != null) { + updateMaskBuilder_.dispose(); + updateMaskBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.PubsubProto + .internal_static_google_pubsub_v1_UpdateTopicRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.UpdateTopicRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.UpdateTopicRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.UpdateTopicRequest build() { + com.google.pubsub.v1.UpdateTopicRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.UpdateTopicRequest buildPartial() { + com.google.pubsub.v1.UpdateTopicRequest result = + new com.google.pubsub.v1.UpdateTopicRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.UpdateTopicRequest result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.topic_ = topicBuilder_ == null ? topic_ : topicBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.updateMask_ = updateMaskBuilder_ == null ? updateMask_ : updateMaskBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.UpdateTopicRequest) { + return mergeFrom((com.google.pubsub.v1.UpdateTopicRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.UpdateTopicRequest other) { + if (other == com.google.pubsub.v1.UpdateTopicRequest.getDefaultInstance()) return this; + if (other.hasTopic()) { + mergeTopic(other.getTopic()); + } + if (other.hasUpdateMask()) { + mergeUpdateMask(other.getUpdateMask()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage(internalGetTopicFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetUpdateMaskFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.pubsub.v1.Topic topic_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Topic, + com.google.pubsub.v1.Topic.Builder, + com.google.pubsub.v1.TopicOrBuilder> + topicBuilder_; + + /** + * + * + *
+     * Required. The updated topic object.
+     * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the topic field is set. + */ + public boolean hasTopic() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+     * Required. The updated topic object.
+     * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The topic. + */ + public com.google.pubsub.v1.Topic getTopic() { + if (topicBuilder_ == null) { + return topic_ == null ? com.google.pubsub.v1.Topic.getDefaultInstance() : topic_; + } else { + return topicBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. The updated topic object.
+     * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setTopic(com.google.pubsub.v1.Topic value) { + if (topicBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + topic_ = value; + } else { + topicBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The updated topic object.
+     * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setTopic(com.google.pubsub.v1.Topic.Builder builderForValue) { + if (topicBuilder_ == null) { + topic_ = builderForValue.build(); + } else { + topicBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The updated topic object.
+     * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder mergeTopic(com.google.pubsub.v1.Topic value) { + if (topicBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && topic_ != null + && topic_ != com.google.pubsub.v1.Topic.getDefaultInstance()) { + getTopicBuilder().mergeFrom(value); + } else { + topic_ = value; + } + } else { + topicBuilder_.mergeFrom(value); + } + if (topic_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. The updated topic object.
+     * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder clearTopic() { + bitField0_ = (bitField0_ & ~0x00000001); + topic_ = null; + if (topicBuilder_ != null) { + topicBuilder_.dispose(); + topicBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The updated topic object.
+     * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.pubsub.v1.Topic.Builder getTopicBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetTopicFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. The updated topic object.
+     * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.pubsub.v1.TopicOrBuilder getTopicOrBuilder() { + if (topicBuilder_ != null) { + return topicBuilder_.getMessageOrBuilder(); + } else { + return topic_ == null ? com.google.pubsub.v1.Topic.getDefaultInstance() : topic_; + } + } + + /** + * + * + *
+     * Required. The updated topic object.
+     * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Topic, + com.google.pubsub.v1.Topic.Builder, + com.google.pubsub.v1.TopicOrBuilder> + internalGetTopicFieldBuilder() { + if (topicBuilder_ == null) { + topicBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Topic, + com.google.pubsub.v1.Topic.Builder, + com.google.pubsub.v1.TopicOrBuilder>(getTopic(), getParentForChildren(), isClean()); + topic_ = null; + } + return topicBuilder_; + } + + private com.google.protobuf.FieldMask updateMask_; + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.FieldMask, + com.google.protobuf.FieldMask.Builder, + com.google.protobuf.FieldMaskOrBuilder> + updateMaskBuilder_; + + /** + * + * + *
+     * Required. Indicates which fields in the provided topic to update. Must be
+     * specified and non-empty. Note that if `update_mask` contains
+     * "message_storage_policy" but the `message_storage_policy` is not set in
+     * the `topic` provided above, then the updated value is determined by the
+     * policy configured at the project or organization level.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the updateMask field is set. + */ + public boolean hasUpdateMask() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided topic to update. Must be
+     * specified and non-empty. Note that if `update_mask` contains
+     * "message_storage_policy" but the `message_storage_policy` is not set in
+     * the `topic` provided above, then the updated value is determined by the
+     * policy configured at the project or organization level.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The updateMask. + */ + public com.google.protobuf.FieldMask getUpdateMask() { + if (updateMaskBuilder_ == null) { + return updateMask_ == null + ? com.google.protobuf.FieldMask.getDefaultInstance() + : updateMask_; + } else { + return updateMaskBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided topic to update. Must be
+     * specified and non-empty. Note that if `update_mask` contains
+     * "message_storage_policy" but the `message_storage_policy` is not set in
+     * the `topic` provided above, then the updated value is determined by the
+     * policy configured at the project or organization level.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setUpdateMask(com.google.protobuf.FieldMask value) { + if (updateMaskBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + updateMask_ = value; + } else { + updateMaskBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided topic to update. Must be
+     * specified and non-empty. Note that if `update_mask` contains
+     * "message_storage_policy" but the `message_storage_policy` is not set in
+     * the `topic` provided above, then the updated value is determined by the
+     * policy configured at the project or organization level.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setUpdateMask(com.google.protobuf.FieldMask.Builder builderForValue) { + if (updateMaskBuilder_ == null) { + updateMask_ = builderForValue.build(); + } else { + updateMaskBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided topic to update. Must be
+     * specified and non-empty. Note that if `update_mask` contains
+     * "message_storage_policy" but the `message_storage_policy` is not set in
+     * the `topic` provided above, then the updated value is determined by the
+     * policy configured at the project or organization level.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeUpdateMask(com.google.protobuf.FieldMask value) { + if (updateMaskBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && updateMask_ != null + && updateMask_ != com.google.protobuf.FieldMask.getDefaultInstance()) { + getUpdateMaskBuilder().mergeFrom(value); + } else { + updateMask_ = value; + } + } else { + updateMaskBuilder_.mergeFrom(value); + } + if (updateMask_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided topic to update. Must be
+     * specified and non-empty. Note that if `update_mask` contains
+     * "message_storage_policy" but the `message_storage_policy` is not set in
+     * the `topic` provided above, then the updated value is determined by the
+     * policy configured at the project or organization level.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearUpdateMask() { + bitField0_ = (bitField0_ & ~0x00000002); + updateMask_ = null; + if (updateMaskBuilder_ != null) { + updateMaskBuilder_.dispose(); + updateMaskBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided topic to update. Must be
+     * specified and non-empty. Note that if `update_mask` contains
+     * "message_storage_policy" but the `message_storage_policy` is not set in
+     * the `topic` provided above, then the updated value is determined by the
+     * policy configured at the project or organization level.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.FieldMask.Builder getUpdateMaskBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetUpdateMaskFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided topic to update. Must be
+     * specified and non-empty. Note that if `update_mask` contains
+     * "message_storage_policy" but the `message_storage_policy` is not set in
+     * the `topic` provided above, then the updated value is determined by the
+     * policy configured at the project or organization level.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { + if (updateMaskBuilder_ != null) { + return updateMaskBuilder_.getMessageOrBuilder(); + } else { + return updateMask_ == null + ? com.google.protobuf.FieldMask.getDefaultInstance() + : updateMask_; + } + } + + /** + * + * + *
+     * Required. Indicates which fields in the provided topic to update. Must be
+     * specified and non-empty. Note that if `update_mask` contains
+     * "message_storage_policy" but the `message_storage_policy` is not set in
+     * the `topic` provided above, then the updated value is determined by the
+     * policy configured at the project or organization level.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.FieldMask, + com.google.protobuf.FieldMask.Builder, + com.google.protobuf.FieldMaskOrBuilder> + internalGetUpdateMaskFieldBuilder() { + if (updateMaskBuilder_ == null) { + updateMaskBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.protobuf.FieldMask, + com.google.protobuf.FieldMask.Builder, + com.google.protobuf.FieldMaskOrBuilder>( + getUpdateMask(), getParentForChildren(), isClean()); + updateMask_ = null; + } + return updateMaskBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.UpdateTopicRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.UpdateTopicRequest) + private static final com.google.pubsub.v1.UpdateTopicRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.UpdateTopicRequest(); + } + + public static com.google.pubsub.v1.UpdateTopicRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public UpdateTopicRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.UpdateTopicRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateTopicRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateTopicRequestOrBuilder.java new file mode 100644 index 000000000000..180f0b5b0213 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/UpdateTopicRequestOrBuilder.java @@ -0,0 +1,117 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/pubsub.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface UpdateTopicRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.UpdateTopicRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The updated topic object.
+   * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the topic field is set. + */ + boolean hasTopic(); + + /** + * + * + *
+   * Required. The updated topic object.
+   * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The topic. + */ + com.google.pubsub.v1.Topic getTopic(); + + /** + * + * + *
+   * Required. The updated topic object.
+   * 
+ * + * .google.pubsub.v1.Topic topic = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + com.google.pubsub.v1.TopicOrBuilder getTopicOrBuilder(); + + /** + * + * + *
+   * Required. Indicates which fields in the provided topic to update. Must be
+   * specified and non-empty. Note that if `update_mask` contains
+   * "message_storage_policy" but the `message_storage_policy` is not set in
+   * the `topic` provided above, then the updated value is determined by the
+   * policy configured at the project or organization level.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the updateMask field is set. + */ + boolean hasUpdateMask(); + + /** + * + * + *
+   * Required. Indicates which fields in the provided topic to update. Must be
+   * specified and non-empty. Note that if `update_mask` contains
+   * "message_storage_policy" but the `message_storage_policy` is not set in
+   * the `topic` provided above, then the updated value is determined by the
+   * policy configured at the project or organization level.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The updateMask. + */ + com.google.protobuf.FieldMask getUpdateMask(); + + /** + * + * + *
+   * Required. Indicates which fields in the provided topic to update. Must be
+   * specified and non-empty. Note that if `update_mask` contains
+   * "message_storage_policy" but the `message_storage_policy` is not set in
+   * the `topic` provided above, then the updated value is determined by the
+   * policy configured at the project or organization level.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateMessageRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateMessageRequest.java new file mode 100644 index 000000000000..2acb3165e7c8 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateMessageRequest.java @@ -0,0 +1,1513 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `ValidateMessage` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ValidateMessageRequest} + */ +@com.google.protobuf.Generated +public final class ValidateMessageRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ValidateMessageRequest) + ValidateMessageRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ValidateMessageRequest"); + } + + // Use ValidateMessageRequest.newBuilder() to construct. + private ValidateMessageRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ValidateMessageRequest() { + parent_ = ""; + message_ = com.google.protobuf.ByteString.EMPTY; + encoding_ = 0; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateMessageRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateMessageRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ValidateMessageRequest.class, + com.google.pubsub.v1.ValidateMessageRequest.Builder.class); + } + + private int schemaSpecCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object schemaSpec_; + + public enum SchemaSpecCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + NAME(2), + SCHEMA(3), + SCHEMASPEC_NOT_SET(0); + private final int value; + + private SchemaSpecCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static SchemaSpecCase valueOf(int value) { + return forNumber(value); + } + + public static SchemaSpecCase forNumber(int value) { + switch (value) { + case 2: + return NAME; + case 3: + return SCHEMA; + case 0: + return SCHEMASPEC_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public SchemaSpecCase getSchemaSpecCase() { + return SchemaSpecCase.forNumber(schemaSpecCase_); + } + + public static final int PARENT_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object parent_ = ""; + + /** + * + * + *
+   * Required. The name of the project in which to validate schemas.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + @java.lang.Override + public java.lang.String getParent() { + java.lang.Object ref = parent_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parent_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the project in which to validate schemas.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + @java.lang.Override + public com.google.protobuf.ByteString getParentBytes() { + java.lang.Object ref = parent_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + parent_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int NAME_FIELD_NUMBER = 2; + + /** + * + * + *
+   * Name of the schema against which to validate.
+   *
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * string name = 2 [(.google.api.resource_reference) = { ... } + * + * @return Whether the name field is set. + */ + public boolean hasName() { + return schemaSpecCase_ == 2; + } + + /** + * + * + *
+   * Name of the schema against which to validate.
+   *
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * string name = 2 [(.google.api.resource_reference) = { ... } + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = ""; + if (schemaSpecCase_ == 2) { + ref = schemaSpec_; + } + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (schemaSpecCase_ == 2) { + schemaSpec_ = s; + } + return s; + } + } + + /** + * + * + *
+   * Name of the schema against which to validate.
+   *
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * string name = 2 [(.google.api.resource_reference) = { ... } + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = ""; + if (schemaSpecCase_ == 2) { + ref = schemaSpec_; + } + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + if (schemaSpecCase_ == 2) { + schemaSpec_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SCHEMA_FIELD_NUMBER = 3; + + /** + * + * + *
+   * Ad-hoc schema against which to validate
+   * 
+ * + * .google.pubsub.v1.Schema schema = 3; + * + * @return Whether the schema field is set. + */ + @java.lang.Override + public boolean hasSchema() { + return schemaSpecCase_ == 3; + } + + /** + * + * + *
+   * Ad-hoc schema against which to validate
+   * 
+ * + * .google.pubsub.v1.Schema schema = 3; + * + * @return The schema. + */ + @java.lang.Override + public com.google.pubsub.v1.Schema getSchema() { + if (schemaSpecCase_ == 3) { + return (com.google.pubsub.v1.Schema) schemaSpec_; + } + return com.google.pubsub.v1.Schema.getDefaultInstance(); + } + + /** + * + * + *
+   * Ad-hoc schema against which to validate
+   * 
+ * + * .google.pubsub.v1.Schema schema = 3; + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaOrBuilder getSchemaOrBuilder() { + if (schemaSpecCase_ == 3) { + return (com.google.pubsub.v1.Schema) schemaSpec_; + } + return com.google.pubsub.v1.Schema.getDefaultInstance(); + } + + public static final int MESSAGE_FIELD_NUMBER = 4; + private com.google.protobuf.ByteString message_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
+   * Message to validate against the provided `schema_spec`.
+   * 
+ * + * bytes message = 4; + * + * @return The message. + */ + @java.lang.Override + public com.google.protobuf.ByteString getMessage() { + return message_; + } + + public static final int ENCODING_FIELD_NUMBER = 5; + private int encoding_ = 0; + + /** + * + * + *
+   * The encoding expected for messages
+   * 
+ * + * .google.pubsub.v1.Encoding encoding = 5; + * + * @return The enum numeric value on the wire for encoding. + */ + @java.lang.Override + public int getEncodingValue() { + return encoding_; + } + + /** + * + * + *
+   * The encoding expected for messages
+   * 
+ * + * .google.pubsub.v1.Encoding encoding = 5; + * + * @return The encoding. + */ + @java.lang.Override + public com.google.pubsub.v1.Encoding getEncoding() { + com.google.pubsub.v1.Encoding result = com.google.pubsub.v1.Encoding.forNumber(encoding_); + return result == null ? com.google.pubsub.v1.Encoding.UNRECOGNIZED : result; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); + } + if (schemaSpecCase_ == 2) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, schemaSpec_); + } + if (schemaSpecCase_ == 3) { + output.writeMessage(3, (com.google.pubsub.v1.Schema) schemaSpec_); + } + if (!message_.isEmpty()) { + output.writeBytes(4, message_); + } + if (encoding_ != com.google.pubsub.v1.Encoding.ENCODING_UNSPECIFIED.getNumber()) { + output.writeEnum(5, encoding_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); + } + if (schemaSpecCase_ == 2) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, schemaSpec_); + } + if (schemaSpecCase_ == 3) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 3, (com.google.pubsub.v1.Schema) schemaSpec_); + } + if (!message_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(4, message_); + } + if (encoding_ != com.google.pubsub.v1.Encoding.ENCODING_UNSPECIFIED.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(5, encoding_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ValidateMessageRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.ValidateMessageRequest other = + (com.google.pubsub.v1.ValidateMessageRequest) obj; + + if (!getParent().equals(other.getParent())) return false; + if (!getMessage().equals(other.getMessage())) return false; + if (encoding_ != other.encoding_) return false; + if (!getSchemaSpecCase().equals(other.getSchemaSpecCase())) return false; + switch (schemaSpecCase_) { + case 2: + if (!getName().equals(other.getName())) return false; + break; + case 3: + if (!getSchema().equals(other.getSchema())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PARENT_FIELD_NUMBER; + hash = (53 * hash) + getParent().hashCode(); + hash = (37 * hash) + MESSAGE_FIELD_NUMBER; + hash = (53 * hash) + getMessage().hashCode(); + hash = (37 * hash) + ENCODING_FIELD_NUMBER; + hash = (53 * hash) + encoding_; + switch (schemaSpecCase_) { + case 2: + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + break; + case 3: + hash = (37 * hash) + SCHEMA_FIELD_NUMBER; + hash = (53 * hash) + getSchema().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ValidateMessageRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ValidateMessageRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateMessageRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ValidateMessageRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateMessageRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ValidateMessageRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateMessageRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ValidateMessageRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateMessageRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ValidateMessageRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateMessageRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ValidateMessageRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ValidateMessageRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `ValidateMessage` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ValidateMessageRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ValidateMessageRequest) + com.google.pubsub.v1.ValidateMessageRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateMessageRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateMessageRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ValidateMessageRequest.class, + com.google.pubsub.v1.ValidateMessageRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.ValidateMessageRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + parent_ = ""; + if (schemaBuilder_ != null) { + schemaBuilder_.clear(); + } + message_ = com.google.protobuf.ByteString.EMPTY; + encoding_ = 0; + schemaSpecCase_ = 0; + schemaSpec_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateMessageRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateMessageRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.ValidateMessageRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateMessageRequest build() { + com.google.pubsub.v1.ValidateMessageRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateMessageRequest buildPartial() { + com.google.pubsub.v1.ValidateMessageRequest result = + new com.google.pubsub.v1.ValidateMessageRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ValidateMessageRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.parent_ = parent_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.message_ = message_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.encoding_ = encoding_; + } + } + + private void buildPartialOneofs(com.google.pubsub.v1.ValidateMessageRequest result) { + result.schemaSpecCase_ = schemaSpecCase_; + result.schemaSpec_ = this.schemaSpec_; + if (schemaSpecCase_ == 3 && schemaBuilder_ != null) { + result.schemaSpec_ = schemaBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ValidateMessageRequest) { + return mergeFrom((com.google.pubsub.v1.ValidateMessageRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ValidateMessageRequest other) { + if (other == com.google.pubsub.v1.ValidateMessageRequest.getDefaultInstance()) return this; + if (!other.getParent().isEmpty()) { + parent_ = other.parent_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getMessage().isEmpty()) { + setMessage(other.getMessage()); + } + if (other.encoding_ != 0) { + setEncodingValue(other.getEncodingValue()); + } + switch (other.getSchemaSpecCase()) { + case NAME: + { + schemaSpecCase_ = 2; + schemaSpec_ = other.schemaSpec_; + onChanged(); + break; + } + case SCHEMA: + { + mergeSchema(other.getSchema()); + break; + } + case SCHEMASPEC_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + parent_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + java.lang.String s = input.readStringRequireUtf8(); + schemaSpecCase_ = 2; + schemaSpec_ = s; + break; + } // case 18 + case 26: + { + input.readMessage(internalGetSchemaFieldBuilder().getBuilder(), extensionRegistry); + schemaSpecCase_ = 3; + break; + } // case 26 + case 34: + { + message_ = input.readBytes(); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 40: + { + encoding_ = input.readEnum(); + bitField0_ |= 0x00000010; + break; + } // case 40 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int schemaSpecCase_ = 0; + private java.lang.Object schemaSpec_; + + public SchemaSpecCase getSchemaSpecCase() { + return SchemaSpecCase.forNumber(schemaSpecCase_); + } + + public Builder clearSchemaSpec() { + schemaSpecCase_ = 0; + schemaSpec_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private java.lang.Object parent_ = ""; + + /** + * + * + *
+     * Required. The name of the project in which to validate schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + public java.lang.String getParent() { + java.lang.Object ref = parent_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parent_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to validate schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + public com.google.protobuf.ByteString getParentBytes() { + java.lang.Object ref = parent_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + parent_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to validate schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The parent to set. + * @return This builder for chaining. + */ + public Builder setParent(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + parent_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to validate schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearParent() { + parent_ = getDefaultInstance().getParent(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to validate schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for parent to set. + * @return This builder for chaining. + */ + public Builder setParentBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + parent_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Name of the schema against which to validate.
+     *
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * string name = 2 [(.google.api.resource_reference) = { ... } + * + * @return Whether the name field is set. + */ + @java.lang.Override + public boolean hasName() { + return schemaSpecCase_ == 2; + } + + /** + * + * + *
+     * Name of the schema against which to validate.
+     *
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * string name = 2 [(.google.api.resource_reference) = { ... } + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = ""; + if (schemaSpecCase_ == 2) { + ref = schemaSpec_; + } + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (schemaSpecCase_ == 2) { + schemaSpec_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Name of the schema against which to validate.
+     *
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * string name = 2 [(.google.api.resource_reference) = { ... } + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = ""; + if (schemaSpecCase_ == 2) { + ref = schemaSpec_; + } + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + if (schemaSpecCase_ == 2) { + schemaSpec_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Name of the schema against which to validate.
+     *
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * string name = 2 [(.google.api.resource_reference) = { ... } + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + schemaSpecCase_ = 2; + schemaSpec_ = value; + onChanged(); + return this; + } + + /** + * + * + *
+     * Name of the schema against which to validate.
+     *
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * string name = 2 [(.google.api.resource_reference) = { ... } + * + * @return This builder for chaining. + */ + public Builder clearName() { + if (schemaSpecCase_ == 2) { + schemaSpecCase_ = 0; + schemaSpec_ = null; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Name of the schema against which to validate.
+     *
+     * Format is `projects/{project}/schemas/{schema}`.
+     * 
+ * + * string name = 2 [(.google.api.resource_reference) = { ... } + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + schemaSpecCase_ = 2; + schemaSpec_ = value; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder> + schemaBuilder_; + + /** + * + * + *
+     * Ad-hoc schema against which to validate
+     * 
+ * + * .google.pubsub.v1.Schema schema = 3; + * + * @return Whether the schema field is set. + */ + @java.lang.Override + public boolean hasSchema() { + return schemaSpecCase_ == 3; + } + + /** + * + * + *
+     * Ad-hoc schema against which to validate
+     * 
+ * + * .google.pubsub.v1.Schema schema = 3; + * + * @return The schema. + */ + @java.lang.Override + public com.google.pubsub.v1.Schema getSchema() { + if (schemaBuilder_ == null) { + if (schemaSpecCase_ == 3) { + return (com.google.pubsub.v1.Schema) schemaSpec_; + } + return com.google.pubsub.v1.Schema.getDefaultInstance(); + } else { + if (schemaSpecCase_ == 3) { + return schemaBuilder_.getMessage(); + } + return com.google.pubsub.v1.Schema.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Ad-hoc schema against which to validate
+     * 
+ * + * .google.pubsub.v1.Schema schema = 3; + */ + public Builder setSchema(com.google.pubsub.v1.Schema value) { + if (schemaBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + schemaSpec_ = value; + onChanged(); + } else { + schemaBuilder_.setMessage(value); + } + schemaSpecCase_ = 3; + return this; + } + + /** + * + * + *
+     * Ad-hoc schema against which to validate
+     * 
+ * + * .google.pubsub.v1.Schema schema = 3; + */ + public Builder setSchema(com.google.pubsub.v1.Schema.Builder builderForValue) { + if (schemaBuilder_ == null) { + schemaSpec_ = builderForValue.build(); + onChanged(); + } else { + schemaBuilder_.setMessage(builderForValue.build()); + } + schemaSpecCase_ = 3; + return this; + } + + /** + * + * + *
+     * Ad-hoc schema against which to validate
+     * 
+ * + * .google.pubsub.v1.Schema schema = 3; + */ + public Builder mergeSchema(com.google.pubsub.v1.Schema value) { + if (schemaBuilder_ == null) { + if (schemaSpecCase_ == 3 + && schemaSpec_ != com.google.pubsub.v1.Schema.getDefaultInstance()) { + schemaSpec_ = + com.google.pubsub.v1.Schema.newBuilder((com.google.pubsub.v1.Schema) schemaSpec_) + .mergeFrom(value) + .buildPartial(); + } else { + schemaSpec_ = value; + } + onChanged(); + } else { + if (schemaSpecCase_ == 3) { + schemaBuilder_.mergeFrom(value); + } else { + schemaBuilder_.setMessage(value); + } + } + schemaSpecCase_ = 3; + return this; + } + + /** + * + * + *
+     * Ad-hoc schema against which to validate
+     * 
+ * + * .google.pubsub.v1.Schema schema = 3; + */ + public Builder clearSchema() { + if (schemaBuilder_ == null) { + if (schemaSpecCase_ == 3) { + schemaSpecCase_ = 0; + schemaSpec_ = null; + onChanged(); + } + } else { + if (schemaSpecCase_ == 3) { + schemaSpecCase_ = 0; + schemaSpec_ = null; + } + schemaBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Ad-hoc schema against which to validate
+     * 
+ * + * .google.pubsub.v1.Schema schema = 3; + */ + public com.google.pubsub.v1.Schema.Builder getSchemaBuilder() { + return internalGetSchemaFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Ad-hoc schema against which to validate
+     * 
+ * + * .google.pubsub.v1.Schema schema = 3; + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaOrBuilder getSchemaOrBuilder() { + if ((schemaSpecCase_ == 3) && (schemaBuilder_ != null)) { + return schemaBuilder_.getMessageOrBuilder(); + } else { + if (schemaSpecCase_ == 3) { + return (com.google.pubsub.v1.Schema) schemaSpec_; + } + return com.google.pubsub.v1.Schema.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Ad-hoc schema against which to validate
+     * 
+ * + * .google.pubsub.v1.Schema schema = 3; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder> + internalGetSchemaFieldBuilder() { + if (schemaBuilder_ == null) { + if (!(schemaSpecCase_ == 3)) { + schemaSpec_ = com.google.pubsub.v1.Schema.getDefaultInstance(); + } + schemaBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder>( + (com.google.pubsub.v1.Schema) schemaSpec_, getParentForChildren(), isClean()); + schemaSpec_ = null; + } + schemaSpecCase_ = 3; + onChanged(); + return schemaBuilder_; + } + + private com.google.protobuf.ByteString message_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
+     * Message to validate against the provided `schema_spec`.
+     * 
+ * + * bytes message = 4; + * + * @return The message. + */ + @java.lang.Override + public com.google.protobuf.ByteString getMessage() { + return message_; + } + + /** + * + * + *
+     * Message to validate against the provided `schema_spec`.
+     * 
+ * + * bytes message = 4; + * + * @param value The message to set. + * @return This builder for chaining. + */ + public Builder setMessage(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + message_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Message to validate against the provided `schema_spec`.
+     * 
+ * + * bytes message = 4; + * + * @return This builder for chaining. + */ + public Builder clearMessage() { + bitField0_ = (bitField0_ & ~0x00000008); + message_ = getDefaultInstance().getMessage(); + onChanged(); + return this; + } + + private int encoding_ = 0; + + /** + * + * + *
+     * The encoding expected for messages
+     * 
+ * + * .google.pubsub.v1.Encoding encoding = 5; + * + * @return The enum numeric value on the wire for encoding. + */ + @java.lang.Override + public int getEncodingValue() { + return encoding_; + } + + /** + * + * + *
+     * The encoding expected for messages
+     * 
+ * + * .google.pubsub.v1.Encoding encoding = 5; + * + * @param value The enum numeric value on the wire for encoding to set. + * @return This builder for chaining. + */ + public Builder setEncodingValue(int value) { + encoding_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * The encoding expected for messages
+     * 
+ * + * .google.pubsub.v1.Encoding encoding = 5; + * + * @return The encoding. + */ + @java.lang.Override + public com.google.pubsub.v1.Encoding getEncoding() { + com.google.pubsub.v1.Encoding result = com.google.pubsub.v1.Encoding.forNumber(encoding_); + return result == null ? com.google.pubsub.v1.Encoding.UNRECOGNIZED : result; + } + + /** + * + * + *
+     * The encoding expected for messages
+     * 
+ * + * .google.pubsub.v1.Encoding encoding = 5; + * + * @param value The encoding to set. + * @return This builder for chaining. + */ + public Builder setEncoding(com.google.pubsub.v1.Encoding value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + encoding_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * The encoding expected for messages
+     * 
+ * + * .google.pubsub.v1.Encoding encoding = 5; + * + * @return This builder for chaining. + */ + public Builder clearEncoding() { + bitField0_ = (bitField0_ & ~0x00000010); + encoding_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ValidateMessageRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ValidateMessageRequest) + private static final com.google.pubsub.v1.ValidateMessageRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ValidateMessageRequest(); + } + + public static com.google.pubsub.v1.ValidateMessageRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ValidateMessageRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateMessageRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateMessageRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateMessageRequestOrBuilder.java new file mode 100644 index 000000000000..5f00d2f91a2c --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateMessageRequestOrBuilder.java @@ -0,0 +1,183 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ValidateMessageRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ValidateMessageRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the project in which to validate schemas.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + java.lang.String getParent(); + + /** + * + * + *
+   * Required. The name of the project in which to validate schemas.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + com.google.protobuf.ByteString getParentBytes(); + + /** + * + * + *
+   * Name of the schema against which to validate.
+   *
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * string name = 2 [(.google.api.resource_reference) = { ... } + * + * @return Whether the name field is set. + */ + boolean hasName(); + + /** + * + * + *
+   * Name of the schema against which to validate.
+   *
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * string name = 2 [(.google.api.resource_reference) = { ... } + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Name of the schema against which to validate.
+   *
+   * Format is `projects/{project}/schemas/{schema}`.
+   * 
+ * + * string name = 2 [(.google.api.resource_reference) = { ... } + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * + * + *
+   * Ad-hoc schema against which to validate
+   * 
+ * + * .google.pubsub.v1.Schema schema = 3; + * + * @return Whether the schema field is set. + */ + boolean hasSchema(); + + /** + * + * + *
+   * Ad-hoc schema against which to validate
+   * 
+ * + * .google.pubsub.v1.Schema schema = 3; + * + * @return The schema. + */ + com.google.pubsub.v1.Schema getSchema(); + + /** + * + * + *
+   * Ad-hoc schema against which to validate
+   * 
+ * + * .google.pubsub.v1.Schema schema = 3; + */ + com.google.pubsub.v1.SchemaOrBuilder getSchemaOrBuilder(); + + /** + * + * + *
+   * Message to validate against the provided `schema_spec`.
+   * 
+ * + * bytes message = 4; + * + * @return The message. + */ + com.google.protobuf.ByteString getMessage(); + + /** + * + * + *
+   * The encoding expected for messages
+   * 
+ * + * .google.pubsub.v1.Encoding encoding = 5; + * + * @return The enum numeric value on the wire for encoding. + */ + int getEncodingValue(); + + /** + * + * + *
+   * The encoding expected for messages
+   * 
+ * + * .google.pubsub.v1.Encoding encoding = 5; + * + * @return The encoding. + */ + com.google.pubsub.v1.Encoding getEncoding(); + + com.google.pubsub.v1.ValidateMessageRequest.SchemaSpecCase getSchemaSpecCase(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateMessageResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateMessageResponse.java new file mode 100644 index 000000000000..559ef7b70bb1 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateMessageResponse.java @@ -0,0 +1,397 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the `ValidateMessage` method.
+ * Empty for now.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ValidateMessageResponse} + */ +@com.google.protobuf.Generated +public final class ValidateMessageResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ValidateMessageResponse) + ValidateMessageResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ValidateMessageResponse"); + } + + // Use ValidateMessageResponse.newBuilder() to construct. + private ValidateMessageResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ValidateMessageResponse() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateMessageResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateMessageResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ValidateMessageResponse.class, + com.google.pubsub.v1.ValidateMessageResponse.Builder.class); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ValidateMessageResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.ValidateMessageResponse other = + (com.google.pubsub.v1.ValidateMessageResponse) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ValidateMessageResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ValidateMessageResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateMessageResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ValidateMessageResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateMessageResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ValidateMessageResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateMessageResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ValidateMessageResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateMessageResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ValidateMessageResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateMessageResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ValidateMessageResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ValidateMessageResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the `ValidateMessage` method.
+   * Empty for now.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ValidateMessageResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ValidateMessageResponse) + com.google.pubsub.v1.ValidateMessageResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateMessageResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateMessageResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ValidateMessageResponse.class, + com.google.pubsub.v1.ValidateMessageResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.ValidateMessageResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateMessageResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateMessageResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.ValidateMessageResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateMessageResponse build() { + com.google.pubsub.v1.ValidateMessageResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateMessageResponse buildPartial() { + com.google.pubsub.v1.ValidateMessageResponse result = + new com.google.pubsub.v1.ValidateMessageResponse(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ValidateMessageResponse) { + return mergeFrom((com.google.pubsub.v1.ValidateMessageResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ValidateMessageResponse other) { + if (other == com.google.pubsub.v1.ValidateMessageResponse.getDefaultInstance()) return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ValidateMessageResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ValidateMessageResponse) + private static final com.google.pubsub.v1.ValidateMessageResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ValidateMessageResponse(); + } + + public static com.google.pubsub.v1.ValidateMessageResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ValidateMessageResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateMessageResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateMessageResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateMessageResponseOrBuilder.java new file mode 100644 index 000000000000..387ce625e061 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateMessageResponseOrBuilder.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ValidateMessageResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ValidateMessageResponse) + com.google.protobuf.MessageOrBuilder {} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateSchemaRequest.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateSchemaRequest.java new file mode 100644 index 000000000000..27199f5c1201 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateSchemaRequest.java @@ -0,0 +1,899 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Request for the `ValidateSchema` method.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ValidateSchemaRequest} + */ +@com.google.protobuf.Generated +public final class ValidateSchemaRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ValidateSchemaRequest) + ValidateSchemaRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ValidateSchemaRequest"); + } + + // Use ValidateSchemaRequest.newBuilder() to construct. + private ValidateSchemaRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ValidateSchemaRequest() { + parent_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateSchemaRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateSchemaRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ValidateSchemaRequest.class, + com.google.pubsub.v1.ValidateSchemaRequest.Builder.class); + } + + private int bitField0_; + public static final int PARENT_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object parent_ = ""; + + /** + * + * + *
+   * Required. The name of the project in which to validate schemas.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + @java.lang.Override + public java.lang.String getParent() { + java.lang.Object ref = parent_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parent_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The name of the project in which to validate schemas.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + @java.lang.Override + public com.google.protobuf.ByteString getParentBytes() { + java.lang.Object ref = parent_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + parent_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SCHEMA_FIELD_NUMBER = 2; + private com.google.pubsub.v1.Schema schema_; + + /** + * + * + *
+   * Required. The schema object to validate.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the schema field is set. + */ + @java.lang.Override + public boolean hasSchema() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Required. The schema object to validate.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The schema. + */ + @java.lang.Override + public com.google.pubsub.v1.Schema getSchema() { + return schema_ == null ? com.google.pubsub.v1.Schema.getDefaultInstance() : schema_; + } + + /** + * + * + *
+   * Required. The schema object to validate.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + @java.lang.Override + public com.google.pubsub.v1.SchemaOrBuilder getSchemaOrBuilder() { + return schema_ == null ? com.google.pubsub.v1.Schema.getDefaultInstance() : schema_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, parent_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(2, getSchema()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(parent_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, parent_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getSchema()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ValidateSchemaRequest)) { + return super.equals(obj); + } + com.google.pubsub.v1.ValidateSchemaRequest other = + (com.google.pubsub.v1.ValidateSchemaRequest) obj; + + if (!getParent().equals(other.getParent())) return false; + if (hasSchema() != other.hasSchema()) return false; + if (hasSchema()) { + if (!getSchema().equals(other.getSchema())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PARENT_FIELD_NUMBER; + hash = (53 * hash) + getParent().hashCode(); + if (hasSchema()) { + hash = (37 * hash) + SCHEMA_FIELD_NUMBER; + hash = (53 * hash) + getSchema().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ValidateSchemaRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ValidateSchemaRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateSchemaRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ValidateSchemaRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateSchemaRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ValidateSchemaRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateSchemaRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ValidateSchemaRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateSchemaRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ValidateSchemaRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateSchemaRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ValidateSchemaRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ValidateSchemaRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Request for the `ValidateSchema` method.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ValidateSchemaRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ValidateSchemaRequest) + com.google.pubsub.v1.ValidateSchemaRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateSchemaRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateSchemaRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ValidateSchemaRequest.class, + com.google.pubsub.v1.ValidateSchemaRequest.Builder.class); + } + + // Construct using com.google.pubsub.v1.ValidateSchemaRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetSchemaFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + parent_ = ""; + schema_ = null; + if (schemaBuilder_ != null) { + schemaBuilder_.dispose(); + schemaBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateSchemaRequest_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateSchemaRequest getDefaultInstanceForType() { + return com.google.pubsub.v1.ValidateSchemaRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateSchemaRequest build() { + com.google.pubsub.v1.ValidateSchemaRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateSchemaRequest buildPartial() { + com.google.pubsub.v1.ValidateSchemaRequest result = + new com.google.pubsub.v1.ValidateSchemaRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.pubsub.v1.ValidateSchemaRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.parent_ = parent_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.schema_ = schemaBuilder_ == null ? schema_ : schemaBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ValidateSchemaRequest) { + return mergeFrom((com.google.pubsub.v1.ValidateSchemaRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ValidateSchemaRequest other) { + if (other == com.google.pubsub.v1.ValidateSchemaRequest.getDefaultInstance()) return this; + if (!other.getParent().isEmpty()) { + parent_ = other.parent_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.hasSchema()) { + mergeSchema(other.getSchema()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + parent_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage(internalGetSchemaFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object parent_ = ""; + + /** + * + * + *
+     * Required. The name of the project in which to validate schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + public java.lang.String getParent() { + java.lang.Object ref = parent_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parent_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to validate schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + public com.google.protobuf.ByteString getParentBytes() { + java.lang.Object ref = parent_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + parent_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The name of the project in which to validate schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The parent to set. + * @return This builder for chaining. + */ + public Builder setParent(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + parent_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to validate schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearParent() { + parent_ = getDefaultInstance().getParent(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The name of the project in which to validate schemas.
+     * Format is `projects/{project-id}`.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for parent to set. + * @return This builder for chaining. + */ + public Builder setParentBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + parent_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.pubsub.v1.Schema schema_; + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder> + schemaBuilder_; + + /** + * + * + *
+     * Required. The schema object to validate.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the schema field is set. + */ + public boolean hasSchema() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+     * Required. The schema object to validate.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The schema. + */ + public com.google.pubsub.v1.Schema getSchema() { + if (schemaBuilder_ == null) { + return schema_ == null ? com.google.pubsub.v1.Schema.getDefaultInstance() : schema_; + } else { + return schemaBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. The schema object to validate.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setSchema(com.google.pubsub.v1.Schema value) { + if (schemaBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + schema_ = value; + } else { + schemaBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The schema object to validate.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setSchema(com.google.pubsub.v1.Schema.Builder builderForValue) { + if (schemaBuilder_ == null) { + schema_ = builderForValue.build(); + } else { + schemaBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The schema object to validate.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder mergeSchema(com.google.pubsub.v1.Schema value) { + if (schemaBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && schema_ != null + && schema_ != com.google.pubsub.v1.Schema.getDefaultInstance()) { + getSchemaBuilder().mergeFrom(value); + } else { + schema_ = value; + } + } else { + schemaBuilder_.mergeFrom(value); + } + if (schema_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. The schema object to validate.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder clearSchema() { + bitField0_ = (bitField0_ & ~0x00000002); + schema_ = null; + if (schemaBuilder_ != null) { + schemaBuilder_.dispose(); + schemaBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The schema object to validate.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.pubsub.v1.Schema.Builder getSchemaBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetSchemaFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. The schema object to validate.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.pubsub.v1.SchemaOrBuilder getSchemaOrBuilder() { + if (schemaBuilder_ != null) { + return schemaBuilder_.getMessageOrBuilder(); + } else { + return schema_ == null ? com.google.pubsub.v1.Schema.getDefaultInstance() : schema_; + } + } + + /** + * + * + *
+     * Required. The schema object to validate.
+     * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder> + internalGetSchemaFieldBuilder() { + if (schemaBuilder_ == null) { + schemaBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.pubsub.v1.Schema, + com.google.pubsub.v1.Schema.Builder, + com.google.pubsub.v1.SchemaOrBuilder>( + getSchema(), getParentForChildren(), isClean()); + schema_ = null; + } + return schemaBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ValidateSchemaRequest) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ValidateSchemaRequest) + private static final com.google.pubsub.v1.ValidateSchemaRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ValidateSchemaRequest(); + } + + public static com.google.pubsub.v1.ValidateSchemaRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ValidateSchemaRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateSchemaRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateSchemaRequestOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateSchemaRequestOrBuilder.java new file mode 100644 index 000000000000..3ec527a91777 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateSchemaRequestOrBuilder.java @@ -0,0 +1,97 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ValidateSchemaRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ValidateSchemaRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The name of the project in which to validate schemas.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + java.lang.String getParent(); + + /** + * + * + *
+   * Required. The name of the project in which to validate schemas.
+   * Format is `projects/{project-id}`.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + com.google.protobuf.ByteString getParentBytes(); + + /** + * + * + *
+   * Required. The schema object to validate.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the schema field is set. + */ + boolean hasSchema(); + + /** + * + * + *
+   * Required. The schema object to validate.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The schema. + */ + com.google.pubsub.v1.Schema getSchema(); + + /** + * + * + *
+   * Required. The schema object to validate.
+   * 
+ * + * .google.pubsub.v1.Schema schema = 2 [(.google.api.field_behavior) = REQUIRED]; + */ + com.google.pubsub.v1.SchemaOrBuilder getSchemaOrBuilder(); +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateSchemaResponse.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateSchemaResponse.java new file mode 100644 index 000000000000..dda69a4135c1 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateSchemaResponse.java @@ -0,0 +1,397 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +/** + * + * + *
+ * Response for the `ValidateSchema` method.
+ * Empty for now.
+ * 
+ * + * Protobuf type {@code google.pubsub.v1.ValidateSchemaResponse} + */ +@com.google.protobuf.Generated +public final class ValidateSchemaResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.pubsub.v1.ValidateSchemaResponse) + ValidateSchemaResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 2, + /* suffix= */ "", + "ValidateSchemaResponse"); + } + + // Use ValidateSchemaResponse.newBuilder() to construct. + private ValidateSchemaResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ValidateSchemaResponse() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateSchemaResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateSchemaResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ValidateSchemaResponse.class, + com.google.pubsub.v1.ValidateSchemaResponse.Builder.class); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.pubsub.v1.ValidateSchemaResponse)) { + return super.equals(obj); + } + com.google.pubsub.v1.ValidateSchemaResponse other = + (com.google.pubsub.v1.ValidateSchemaResponse) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.pubsub.v1.ValidateSchemaResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ValidateSchemaResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateSchemaResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ValidateSchemaResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateSchemaResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.pubsub.v1.ValidateSchemaResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateSchemaResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ValidateSchemaResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateSchemaResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ValidateSchemaResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.pubsub.v1.ValidateSchemaResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.pubsub.v1.ValidateSchemaResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.pubsub.v1.ValidateSchemaResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+   * Response for the `ValidateSchema` method.
+   * Empty for now.
+   * 
+ * + * Protobuf type {@code google.pubsub.v1.ValidateSchemaResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.pubsub.v1.ValidateSchemaResponse) + com.google.pubsub.v1.ValidateSchemaResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateSchemaResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateSchemaResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.pubsub.v1.ValidateSchemaResponse.class, + com.google.pubsub.v1.ValidateSchemaResponse.Builder.class); + } + + // Construct using com.google.pubsub.v1.ValidateSchemaResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.pubsub.v1.SchemaProto + .internal_static_google_pubsub_v1_ValidateSchemaResponse_descriptor; + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateSchemaResponse getDefaultInstanceForType() { + return com.google.pubsub.v1.ValidateSchemaResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateSchemaResponse build() { + com.google.pubsub.v1.ValidateSchemaResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateSchemaResponse buildPartial() { + com.google.pubsub.v1.ValidateSchemaResponse result = + new com.google.pubsub.v1.ValidateSchemaResponse(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.pubsub.v1.ValidateSchemaResponse) { + return mergeFrom((com.google.pubsub.v1.ValidateSchemaResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.pubsub.v1.ValidateSchemaResponse other) { + if (other == com.google.pubsub.v1.ValidateSchemaResponse.getDefaultInstance()) return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:google.pubsub.v1.ValidateSchemaResponse) + } + + // @@protoc_insertion_point(class_scope:google.pubsub.v1.ValidateSchemaResponse) + private static final com.google.pubsub.v1.ValidateSchemaResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.pubsub.v1.ValidateSchemaResponse(); + } + + public static com.google.pubsub.v1.ValidateSchemaResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ValidateSchemaResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.pubsub.v1.ValidateSchemaResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateSchemaResponseOrBuilder.java b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateSchemaResponseOrBuilder.java new file mode 100644 index 000000000000..cae8fc5fb51d --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/java/com/google/pubsub/v1/ValidateSchemaResponseOrBuilder.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 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 + * + * https://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. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/pubsub/v1/schema.proto +// Protobuf Java Version: 4.33.2 + +package com.google.pubsub.v1; + +@com.google.protobuf.Generated +public interface ValidateSchemaResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.pubsub.v1.ValidateSchemaResponse) + com.google.protobuf.MessageOrBuilder {} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/proto/google/pubsub/v1/pubsub.proto b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/proto/google/pubsub/v1/pubsub.proto new file mode 100644 index 000000000000..3f07ec45c9df --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/proto/google/pubsub/v1/pubsub.proto @@ -0,0 +1,2588 @@ +// Copyright 2026 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.pubsub.v1; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/field_mask.proto"; +import "google/protobuf/struct.proto"; +import "google/protobuf/timestamp.proto"; +import "google/pubsub/v1/schema.proto"; + +option csharp_namespace = "Google.Cloud.PubSub.V1"; +option go_package = "cloud.google.com/go/pubsub/v2/apiv1/pubsubpb;pubsubpb"; +option java_multiple_files = true; +option java_outer_classname = "PubsubProto"; +option java_package = "com.google.pubsub.v1"; +option php_namespace = "Google\\Cloud\\PubSub\\V1"; +option ruby_package = "Google::Cloud::PubSub::V1"; +option (google.api.resource_definition) = { + type: "cloudkms.googleapis.com/CryptoKey" + pattern: "projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}" +}; +option (google.api.resource_definition) = { + type: "analyticshub.googleapis.com/Listing" + pattern: "projects/{project}/locations/{location}/dataExchanges/{data_exchange}/listings/{listing}" +}; + +// The service that an application uses to manipulate topics, and to send +// messages to a topic. +service Publisher { + option (google.api.default_host) = "pubsub.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform," + "https://www.googleapis.com/auth/pubsub"; + + // Creates the given topic with the given name. See the [resource name rules] + // (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). + rpc CreateTopic(Topic) returns (Topic) { + option (google.api.http) = { + put: "/v1/{name=projects/*/topics/*}" + body: "*" + }; + option (google.api.method_signature) = "name"; + } + + // Updates an existing topic by updating the fields specified in the update + // mask. Note that certain properties of a topic are not modifiable. + rpc UpdateTopic(UpdateTopicRequest) returns (Topic) { + option (google.api.http) = { + patch: "/v1/{topic.name=projects/*/topics/*}" + body: "*" + }; + option (google.api.method_signature) = "topic,update_mask"; + } + + // Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic + // does not exist. + rpc Publish(PublishRequest) returns (PublishResponse) { + option (google.api.http) = { + post: "/v1/{topic=projects/*/topics/*}:publish" + body: "*" + }; + option (google.api.method_signature) = "topic,messages"; + } + + // Gets the configuration of a topic. + rpc GetTopic(GetTopicRequest) returns (Topic) { + option (google.api.http) = { + get: "/v1/{topic=projects/*/topics/*}" + }; + option (google.api.method_signature) = "topic"; + } + + // Lists matching topics. + rpc ListTopics(ListTopicsRequest) returns (ListTopicsResponse) { + option (google.api.http) = { + get: "/v1/{project=projects/*}/topics" + }; + option (google.api.method_signature) = "project"; + } + + // Lists the names of the attached subscriptions on this topic. + rpc ListTopicSubscriptions(ListTopicSubscriptionsRequest) + returns (ListTopicSubscriptionsResponse) { + option (google.api.http) = { + get: "/v1/{topic=projects/*/topics/*}/subscriptions" + }; + option (google.api.method_signature) = "topic"; + } + + // Lists the names of the snapshots on this topic. Snapshots are used in + // [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, + // which allow you to manage message acknowledgments in bulk. That is, you can + // set the acknowledgment state of messages in an existing subscription to the + // state captured by a snapshot. + rpc ListTopicSnapshots(ListTopicSnapshotsRequest) + returns (ListTopicSnapshotsResponse) { + option (google.api.http) = { + get: "/v1/{topic=projects/*/topics/*}/snapshots" + }; + option (google.api.method_signature) = "topic"; + } + + // Deletes the topic with the given name. Returns `NOT_FOUND` if the topic + // does not exist. After a topic is deleted, a new topic may be created with + // the same name; this is an entirely new topic with none of the old + // configuration or subscriptions. Existing subscriptions to this topic are + // not deleted, but their `topic` field is set to `_deleted-topic_`. + rpc DeleteTopic(DeleteTopicRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/v1/{topic=projects/*/topics/*}" + }; + option (google.api.method_signature) = "topic"; + } + + // Detaches a subscription from this topic. All messages retained in the + // subscription are dropped. Subsequent `Pull` and `StreamingPull` requests + // will return FAILED_PRECONDITION. If the subscription is a push + // subscription, pushes to the endpoint will stop. + rpc DetachSubscription(DetachSubscriptionRequest) + returns (DetachSubscriptionResponse) { + option (google.api.http) = { + post: "/v1/{subscription=projects/*/subscriptions/*}:detach" + }; + } +} + +// A policy constraining the storage of messages published to the topic. +message MessageStoragePolicy { + // Optional. A list of IDs of Google Cloud regions where messages that are + // published to the topic may be persisted in storage. Messages published by + // publishers running in non-allowed Google Cloud regions (or running outside + // of Google Cloud altogether) are routed for storage in one of the allowed + // regions. An empty list means that no regions are allowed, and is not a + // valid configuration. + repeated string allowed_persistence_regions = 1 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If true, `allowed_persistence_regions` is also used to enforce + // in-transit guarantees for messages. That is, Pub/Sub will fail + // Publish operations on this topic and subscribe operations + // on any subscription attached to this topic in any region that is + // not in `allowed_persistence_regions`. + bool enforce_in_transit = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Settings for validating messages published against a schema. +message SchemaSettings { + // Required. The name of the schema that messages published should be + // validated against. Format is `projects/{project}/schemas/{schema}`. The + // value of this field will be `_deleted-schema_` if the schema has been + // deleted. + string schema = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Schema" } + ]; + + // Optional. The encoding of messages validated against `schema`. + Encoding encoding = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The minimum (inclusive) revision allowed for validating messages. + // If empty or not present, allow any revision to be validated against + // last_revision or any revision created before. + string first_revision_id = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The maximum (inclusive) revision allowed for validating messages. + // If empty or not present, allow any revision to be validated against + // first_revision or any revision created after. + string last_revision_id = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Settings for an ingestion data source on a topic. +message IngestionDataSourceSettings { + // Ingestion settings for Amazon Kinesis Data Streams. + message AwsKinesis { + // Possible states for ingestion from Amazon Kinesis Data Streams. + enum State { + // Default value. This value is unused. + STATE_UNSPECIFIED = 0; + + // Ingestion is active. + ACTIVE = 1; + + // Permission denied encountered while consuming data from Kinesis. + // This can happen if: + // - The provided `aws_role_arn` does not exist or does not have the + // appropriate permissions attached. + // - The provided `aws_role_arn` is not set up properly for Identity + // Federation using `gcp_service_account`. + // - The Pub/Sub SA is not granted the + // `iam.serviceAccounts.getOpenIdToken` permission on + // `gcp_service_account`. + KINESIS_PERMISSION_DENIED = 2; + + // Permission denied encountered while publishing to the topic. This can + // happen if the Pub/Sub SA has not been granted the [appropriate publish + // permissions](https://cloud.google.com/pubsub/docs/access-control#pubsub.publisher) + PUBLISH_PERMISSION_DENIED = 3; + + // The Kinesis stream does not exist. + STREAM_NOT_FOUND = 4; + + // The Kinesis consumer does not exist. + CONSUMER_NOT_FOUND = 5; + } + + // Output only. An output-only field that indicates the state of the Kinesis + // ingestion source. + State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Required. The Kinesis stream ARN to ingest data from. + string stream_arn = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The Kinesis consumer ARN to used for ingestion in Enhanced + // Fan-Out mode. The consumer must be already created and ready to be used. + string consumer_arn = 3 [(google.api.field_behavior) = REQUIRED]; + + // Required. AWS role ARN to be used for Federated Identity authentication + // with Kinesis. Check the Pub/Sub docs for how to set up this role and the + // required permissions that need to be attached to it. + string aws_role_arn = 4 [(google.api.field_behavior) = REQUIRED]; + + // Required. The GCP service account to be used for Federated Identity + // authentication with Kinesis (via a `AssumeRoleWithWebIdentity` call for + // the provided role). The `aws_role_arn` must be set up with + // `accounts.google.com:sub` equals to this service account number. + string gcp_service_account = 5 [(google.api.field_behavior) = REQUIRED]; + } + + // Ingestion settings for Cloud Storage. + message CloudStorage { + // Possible states for ingestion from Cloud Storage. + enum State { + // Default value. This value is unused. + STATE_UNSPECIFIED = 0; + + // Ingestion is active. + ACTIVE = 1; + + // Permission denied encountered while calling the Cloud Storage API. This + // can happen if the Pub/Sub SA has not been granted the + // [appropriate + // permissions](https://cloud.google.com/storage/docs/access-control/iam-permissions): + // - storage.objects.list: to list the objects in a bucket. + // - storage.objects.get: to read the objects in a bucket. + // - storage.buckets.get: to verify the bucket exists. + CLOUD_STORAGE_PERMISSION_DENIED = 2; + + // Permission denied encountered while publishing to the topic. This can + // happen if the Pub/Sub SA has not been granted the [appropriate publish + // permissions](https://cloud.google.com/pubsub/docs/access-control#pubsub.publisher) + PUBLISH_PERMISSION_DENIED = 3; + + // The provided Cloud Storage bucket doesn't exist. + BUCKET_NOT_FOUND = 4; + + // The Cloud Storage bucket has too many objects, ingestion will be + // paused. + TOO_MANY_OBJECTS = 5; + } + + // Configuration for reading Cloud Storage data in text format. Each line of + // text as specified by the delimiter will be set to the `data` field of a + // Pub/Sub message. + message TextFormat { + // Optional. When unset, '\n' is used. + optional string delimiter = 1 [(google.api.field_behavior) = OPTIONAL]; + } + + // Configuration for reading Cloud Storage data in Avro binary format. The + // bytes of each object will be set to the `data` field of a Pub/Sub + // message. + message AvroFormat {} + + // Configuration for reading Cloud Storage data written via [Cloud Storage + // subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage). The + // data and attributes fields of the originally exported Pub/Sub message + // will be restored when publishing. + message PubSubAvroFormat {} + + // Output only. An output-only field that indicates the state of the Cloud + // Storage ingestion source. + State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Cloud Storage bucket. The bucket name must be without any + // prefix like "gs://". See the [bucket naming requirements] + // (https://cloud.google.com/storage/docs/buckets#naming). + string bucket = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Defaults to text format. + oneof input_format { + // Optional. Data from Cloud Storage will be interpreted as text. + TextFormat text_format = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Data from Cloud Storage will be interpreted in Avro format. + AvroFormat avro_format = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. It will be assumed data from Cloud Storage was written via + // [Cloud Storage + // subscriptions](https://cloud.google.com/pubsub/docs/cloudstorage). + PubSubAvroFormat pubsub_avro_format = 5 + [(google.api.field_behavior) = OPTIONAL]; + } + + // Optional. Only objects with a larger or equal creation timestamp will be + // ingested. + google.protobuf.Timestamp minimum_object_create_time = 6 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Glob pattern used to match objects that will be ingested. If + // unset, all objects will be ingested. See the [supported + // patterns](https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob). + string match_glob = 9 [(google.api.field_behavior) = OPTIONAL]; + } + + // Ingestion settings for Azure Event Hubs. + message AzureEventHubs { + // Possible states for managed ingestion from Event Hubs. + enum State { + // Default value. This value is unused. + STATE_UNSPECIFIED = 0; + + // Ingestion is active. + ACTIVE = 1; + + // Permission denied encountered while consuming data from Event Hubs. + // This can happen when `client_id`, or `tenant_id` are invalid. Or the + // right permissions haven't been granted. + EVENT_HUBS_PERMISSION_DENIED = 2; + + // Permission denied encountered while publishing to the topic. + PUBLISH_PERMISSION_DENIED = 3; + + // The provided Event Hubs namespace couldn't be found. + NAMESPACE_NOT_FOUND = 4; + + // The provided Event Hub couldn't be found. + EVENT_HUB_NOT_FOUND = 5; + + // The provided Event Hubs subscription couldn't be found. + SUBSCRIPTION_NOT_FOUND = 6; + + // The provided Event Hubs resource group couldn't be found. + RESOURCE_GROUP_NOT_FOUND = 7; + } + + // Output only. An output-only field that indicates the state of the Event + // Hubs ingestion source. + State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Name of the resource group within the azure subscription. + string resource_group = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The name of the Event Hubs namespace. + string namespace = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The name of the Event Hub. + string event_hub = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The client id of the Azure application that is being used to + // authenticate Pub/Sub. + string client_id = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The tenant id of the Azure application that is being used to + // authenticate Pub/Sub. + string tenant_id = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The Azure subscription id. + string subscription_id = 7 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The GCP service account to be used for Federated Identity + // authentication. + string gcp_service_account = 8 [(google.api.field_behavior) = OPTIONAL]; + } + + // Ingestion settings for Amazon MSK. + message AwsMsk { + // Possible states for managed ingestion from Amazon MSK. + enum State { + // Default value. This value is unused. + STATE_UNSPECIFIED = 0; + + // Ingestion is active. + ACTIVE = 1; + + // Permission denied encountered while consuming data from Amazon MSK. + MSK_PERMISSION_DENIED = 2; + + // Permission denied encountered while publishing to the topic. + PUBLISH_PERMISSION_DENIED = 3; + + // The provided MSK cluster wasn't found. + CLUSTER_NOT_FOUND = 4; + + // The provided topic wasn't found. + TOPIC_NOT_FOUND = 5; + } + + // Output only. An output-only field that indicates the state of the Amazon + // MSK ingestion source. + State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Required. The Amazon Resource Name (ARN) that uniquely identifies the + // cluster. + string cluster_arn = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The name of the topic in the Amazon MSK cluster that Pub/Sub + // will import from. + string topic = 3 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; + + // Required. AWS role ARN to be used for Federated Identity authentication + // with Amazon MSK. Check the Pub/Sub docs for how to set up this role and + // the required permissions that need to be attached to it. + string aws_role_arn = 4 [(google.api.field_behavior) = REQUIRED]; + + // Required. The GCP service account to be used for Federated Identity + // authentication with Amazon MSK (via a `AssumeRoleWithWebIdentity` call + // for the provided role). The `aws_role_arn` must be set up with + // `accounts.google.com:sub` equals to this service account number. + string gcp_service_account = 5 [(google.api.field_behavior) = REQUIRED]; + } + + // Ingestion settings for Confluent Cloud. + message ConfluentCloud { + // Possible states for managed ingestion from Confluent Cloud. + enum State { + // Default value. This value is unused. + STATE_UNSPECIFIED = 0; + + // Ingestion is active. + ACTIVE = 1; + + // Permission denied encountered while consuming data from Confluent + // Cloud. + CONFLUENT_CLOUD_PERMISSION_DENIED = 2; + + // Permission denied encountered while publishing to the topic. + PUBLISH_PERMISSION_DENIED = 3; + + // The provided bootstrap server address is unreachable. + UNREACHABLE_BOOTSTRAP_SERVER = 4; + + // The provided cluster wasn't found. + CLUSTER_NOT_FOUND = 5; + + // The provided topic wasn't found. + TOPIC_NOT_FOUND = 6; + } + + // Output only. An output-only field that indicates the state of the + // Confluent Cloud ingestion source. + State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Required. The address of the bootstrap server. The format is url:port. + string bootstrap_server = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The id of the cluster. + string cluster_id = 3 [(google.api.field_behavior) = REQUIRED]; + + // Required. The name of the topic in the Confluent Cloud cluster that + // Pub/Sub will import from. + string topic = 4 [(google.api.field_behavior) = REQUIRED]; + + // Required. The id of the identity pool to be used for Federated Identity + // authentication with Confluent Cloud. See + // https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/oauth/identity-pools.html#add-oauth-identity-pools. + string identity_pool_id = 5 [(google.api.field_behavior) = REQUIRED]; + + // Required. The GCP service account to be used for Federated Identity + // authentication with `identity_pool_id`. + string gcp_service_account = 6 [(google.api.field_behavior) = REQUIRED]; + } + + // Only one source type can have settings set. + oneof source { + // Optional. Amazon Kinesis Data Streams. + AwsKinesis aws_kinesis = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Cloud Storage. + CloudStorage cloud_storage = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Azure Event Hubs. + AzureEventHubs azure_event_hubs = 3 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Amazon MSK. + AwsMsk aws_msk = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Confluent Cloud. + ConfluentCloud confluent_cloud = 6 [(google.api.field_behavior) = OPTIONAL]; + } + + // Optional. Platform Logs settings. If unset, no Platform Logs will be + // generated. + PlatformLogsSettings platform_logs_settings = 4 + [(google.api.field_behavior) = OPTIONAL]; +} + +// Settings for Platform Logs produced by Pub/Sub. +message PlatformLogsSettings { + // Severity levels of Platform Logs. + enum Severity { + // Default value. Logs level is unspecified. Logs will be disabled. + SEVERITY_UNSPECIFIED = 0; + + // Logs will be disabled. + DISABLED = 1; + + // Debug logs and higher-severity logs will be written. + DEBUG = 2; + + // Info logs and higher-severity logs will be written. + INFO = 3; + + // Warning logs and higher-severity logs will be written. + WARNING = 4; + + // Only error logs will be written. + ERROR = 5; + } + + // Optional. The minimum severity level of Platform Logs that will be written. + Severity severity = 1 [(google.api.field_behavior) = OPTIONAL]; +} + +// Payload of the Platform Log entry sent when a failure is encountered while +// ingesting. +message IngestionFailureEvent { + // Specifies the reason why some data may have been left out of + // the desired Pub/Sub message due to the API message limits + // (https://cloud.google.com/pubsub/quotas#resource_limits). For example, + // when the number of attributes is larger than 100, the number of + // attributes is truncated to 100 to respect the limit on the attribute count. + // Other attribute limits are treated similarly. When the size of the desired + // message would've been larger than 10MB, the message won't be published at + // all, and ingestion of the subsequent messages will proceed as normal. + message ApiViolationReason {} + + // Set when an Avro file is unsupported or its format is not valid. When this + // occurs, one or more Avro objects won't be ingested. + message AvroFailureReason {} + + // Set when a Pub/Sub message fails to get published due to a schema + // validation violation. + message SchemaViolationReason {} + + // Set when a Pub/Sub message fails to get published due to a message + // transformation error. + message MessageTransformationFailureReason {} + + // Failure when ingesting from a Cloud Storage source. + message CloudStorageFailure { + // Optional. Name of the Cloud Storage bucket used for ingestion. + string bucket = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Name of the Cloud Storage object which contained the section + // that couldn't be ingested. + string object_name = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Generation of the Cloud Storage object which contained the + // section that couldn't be ingested. + int64 object_generation = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Reason why ingestion failed for the specified object. + oneof reason { + // Optional. Failure encountered when parsing an Avro file. + AvroFailureReason avro_failure_reason = 5 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The Pub/Sub API limits prevented the desired message from + // being published. + ApiViolationReason api_violation_reason = 6 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The Pub/Sub message failed schema validation. + SchemaViolationReason schema_violation_reason = 7 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Failure encountered when applying a message transformation to + // the Pub/Sub message. + MessageTransformationFailureReason message_transformation_failure_reason = + 8 [(google.api.field_behavior) = OPTIONAL]; + } + } + + // Failure when ingesting from an Amazon MSK source. + message AwsMskFailureReason { + // Optional. The ARN of the cluster of the topic being ingested from. + string cluster_arn = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The name of the Kafka topic being ingested from. + string kafka_topic = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The partition ID of the message that failed to be ingested. + int64 partition_id = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The offset within the partition of the message that failed to + // be ingested. + int64 offset = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Reason why ingestion failed for the specified message. + oneof reason { + // Optional. The Pub/Sub API limits prevented the desired message from + // being published. + ApiViolationReason api_violation_reason = 5 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The Pub/Sub message failed schema validation. + SchemaViolationReason schema_violation_reason = 6 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Failure encountered when applying a message transformation to + // the Pub/Sub message. + MessageTransformationFailureReason message_transformation_failure_reason = + 7 [(google.api.field_behavior) = OPTIONAL]; + } + } + + // Failure when ingesting from an Azure Event Hubs source. + message AzureEventHubsFailureReason { + // Optional. The namespace containing the event hub being ingested from. + string namespace = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The name of the event hub being ingested from. + string event_hub = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The partition ID of the message that failed to be ingested. + int64 partition_id = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The offset within the partition of the message that failed to + // be ingested. + int64 offset = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Reason why ingestion failed for the specified message. + oneof reason { + // Optional. The Pub/Sub API limits prevented the desired message from + // being published. + ApiViolationReason api_violation_reason = 5 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The Pub/Sub message failed schema validation. + SchemaViolationReason schema_violation_reason = 6 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Failure encountered when applying a message transformation to + // the Pub/Sub message. + MessageTransformationFailureReason message_transformation_failure_reason = + 7 [(google.api.field_behavior) = OPTIONAL]; + } + } + + // Failure when ingesting from a Confluent Cloud source. + message ConfluentCloudFailureReason { + // Optional. The cluster ID containing the topic being ingested from. + string cluster_id = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The name of the Kafka topic being ingested from. + string kafka_topic = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The partition ID of the message that failed to be ingested. + int64 partition_id = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The offset within the partition of the message that failed to + // be ingested. + int64 offset = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Reason why ingestion failed for the specified message. + oneof reason { + // Optional. The Pub/Sub API limits prevented the desired message from + // being published. + ApiViolationReason api_violation_reason = 5 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The Pub/Sub message failed schema validation. + SchemaViolationReason schema_violation_reason = 6 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Failure encountered when applying a message transformation to + // the Pub/Sub message. + MessageTransformationFailureReason message_transformation_failure_reason = + 7 [(google.api.field_behavior) = OPTIONAL]; + } + } + + // Failure when ingesting from an AWS Kinesis source. + message AwsKinesisFailureReason { + // Optional. The stream ARN of the Kinesis stream being ingested from. + string stream_arn = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The partition key of the message that failed to be ingested. + string partition_key = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The sequence number of the message that failed to be ingested. + string sequence_number = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Reason why ingestion failed for the specified message. + oneof reason { + // Optional. The Pub/Sub message failed schema validation. + SchemaViolationReason schema_violation_reason = 4 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Failure encountered when applying a message transformation to + // the Pub/Sub message. + MessageTransformationFailureReason message_transformation_failure_reason = + 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The message failed to be published due to an API violation. + // This is only set when the size of the data field of the Kinesis record + // is zero. + ApiViolationReason api_violation_reason = 6 + [(google.api.field_behavior) = OPTIONAL]; + } + } + + // Required. Name of the import topic. Format is: + // projects/{project_name}/topics/{topic_name}. + string topic = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; + + // Required. Error details explaining why ingestion to Pub/Sub has failed. + string error_message = 2 [(google.api.field_behavior) = REQUIRED]; + + oneof failure { + // Optional. Failure when ingesting from Cloud Storage. + CloudStorageFailure cloud_storage_failure = 3 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Failure when ingesting from Amazon MSK. + AwsMskFailureReason aws_msk_failure = 4 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Failure when ingesting from Azure Event Hubs. + AzureEventHubsFailureReason azure_event_hubs_failure = 5 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Failure when ingesting from Confluent Cloud. + ConfluentCloudFailureReason confluent_cloud_failure = 6 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Failure when ingesting from AWS Kinesis. + AwsKinesisFailureReason aws_kinesis_failure = 7 + [(google.api.field_behavior) = OPTIONAL]; + } +} + +// User-defined JavaScript function that can transform or filter a Pub/Sub +// message. +message JavaScriptUDF { + // Required. Name of the JavasScript function that should applied to Pub/Sub + // messages. + string function_name = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. JavaScript code that contains a function `function_name` with the + // below signature: + // + // ``` + // /** + // * Transforms a Pub/Sub message. + // + // * @return {(Object)>|null)} - To + // * filter a message, return `null`. To transform a message return a map + // * with the following keys: + // * - (required) 'data' : {string} + // * - (optional) 'attributes' : {Object} + // * Returning empty `attributes` will remove all attributes from the + // * message. + // * + // * @param {(Object)>} Pub/Sub + // * message. Keys: + // * - (required) 'data' : {string} + // * - (required) 'attributes' : {Object} + // * + // * @param {Object} metadata - Pub/Sub message metadata. + // * Keys: + // * - (optional) 'message_id' : {string} + // * - (optional) 'publish_time': {string} YYYY-MM-DDTHH:MM:SSZ format + // * - (optional) 'ordering_key': {string} + // */ + // + // function (message, metadata) { + // } + // ``` + string code = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Configuration for making inference requests against Vertex AI models. +message AIInference { + // Configuration for making inferences using arbitrary JSON payloads. + message UnstructuredInference { + // Optional. A parameters object to be included in each inference request. + // The parameters object is combined with the data field of the Pub/Sub + // message to form the inference request. + google.protobuf.Struct parameters = 1 + [(google.api.field_behavior) = OPTIONAL]; + } + + // Required. An endpoint to a Vertex AI model of the form + // `projects/{project}/locations/{location}/endpoints/{endpoint}` or + // `projects/{project}/locations/{location}/publishers/{publisher}/models/{model}`. + // Vertex AI API requests will be sent to this endpoint. + string endpoint = 1 [(google.api.field_behavior) = REQUIRED]; + + // The format of inference requests made to the endpoint. + oneof inference_mode { + // Optional. Requests and responses can be any arbitrary JSON object. + UnstructuredInference unstructured_inference = 2 + [(google.api.field_behavior) = OPTIONAL]; + } + + // Optional. The service account to use to make prediction requests against + // endpoints. The resource creator or updater that specifies this field must + // have `iam.serviceAccounts.actAs` permission on the service account. If not + // specified, the Pub/Sub [service + // agent]({$universe.dns_names.final_documentation_domain}/iam/docs/service-agents), + // service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used. + string service_account_email = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// All supported message transforms types. +message MessageTransform { + // The type of transform to apply to messages. + oneof transform { + // Optional. JavaScript User Defined Function. If multiple JavaScriptUDF's + // are specified on a resource, each must have a unique `function_name`. + JavaScriptUDF javascript_udf = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. AI Inference. Specifies the Vertex AI endpoint that inference + // requests built from the Pub/Sub message data and provided parameters will + // be sent to. + AIInference ai_inference = 6 [(google.api.field_behavior) = OPTIONAL]; + } + + // Optional. This field is deprecated, use the `disabled` field to disable + // transforms. + bool enabled = 3 [deprecated = true, (google.api.field_behavior) = OPTIONAL]; + + // Optional. If true, the transform is disabled and will not be applied to + // messages. Defaults to `false`. + bool disabled = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// A topic resource. +message Topic { + option (google.api.resource) = { + type: "pubsub.googleapis.com/Topic" + pattern: "projects/{project}/topics/{topic}" + pattern: "_deleted-topic_" + plural: "topics" + singular: "topic" + }; + + // The state of the topic. + enum State { + // Default value. This value is unused. + STATE_UNSPECIFIED = 0; + + // The topic does not have any persistent errors. + ACTIVE = 1; + + // Ingestion from the data source has encountered a permanent error. + // See the more detailed error state in the corresponding ingestion + // source configuration. + INGESTION_RESOURCE_ERROR = 2; + } + + // Required. Identifier. The name of the topic. It must have the format + // `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter, + // and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), + // underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent + // signs (`%`). It must be between 3 and 255 characters in length, and it + // must not start with `"goog"`. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.field_behavior) = IDENTIFIER + ]; + + // Optional. See [Creating and managing labels] + // (https://cloud.google.com/pubsub/docs/labels). + map labels = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Policy constraining the set of Google Cloud Platform regions + // where messages published to the topic may be stored. If not present, then + // no constraints are in effect. + MessageStoragePolicy message_storage_policy = 3 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The resource name of the Cloud KMS CryptoKey to be used to + // protect access to messages published on this topic. + // + // The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*`. + string kms_key_name = 5 [ + (google.api.field_behavior) = OPTIONAL, + (google.api.resource_reference) = { + type: "cloudkms.googleapis.com/CryptoKey" + } + ]; + + // Optional. Settings for validating messages published against a schema. + SchemaSettings schema_settings = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Reserved for future use. This field is set only in responses from + // the server; it is ignored if it is set in any requests. + bool satisfies_pzs = 7 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Indicates the minimum duration to retain a message after it is + // published to the topic. If this field is set, messages published to the + // topic in the last `message_retention_duration` are always available to + // subscribers. For instance, it allows any attached subscription to [seek to + // a + // timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time) + // that is up to `message_retention_duration` in the past. If this field is + // not set, message retention is controlled by settings on individual + // subscriptions. Cannot be more than 31 days or less than 10 minutes. + google.protobuf.Duration message_retention_duration = 8 + [(google.api.field_behavior) = OPTIONAL]; + + // Output only. An output-only field indicating the state of the topic. + State state = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Settings for ingestion from a data source into this topic. + IngestionDataSourceSettings ingestion_data_source_settings = 10 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Transforms to be applied to messages published to the topic. + // Transforms are applied in the order specified. + repeated MessageTransform message_transforms = 13 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Input only. Immutable. Tag keys/values directly bound to this + // resource. For example: + // "123/environment": "production", + // "123/costCenter": "marketing" + // See https://docs.cloud.google.com/pubsub/docs/tags for more information on + // using tags with Pub/Sub resources. + map tags = 14 [ + (google.api.field_behavior) = INPUT_ONLY, + (google.api.field_behavior) = IMMUTABLE, + (google.api.field_behavior) = OPTIONAL + ]; +} + +// A message that is published by publishers and consumed by subscribers. The +// message must contain either a non-empty data field or at least one attribute. +// Note that client libraries represent this object differently +// depending on the language. See the corresponding [client library +// documentation](https://cloud.google.com/pubsub/docs/reference/libraries) for +// more information. See [quotas and limits] +// (https://cloud.google.com/pubsub/quotas) for more information about message +// limits. +message PubsubMessage { + // Optional. The message data field. If this field is empty, the message must + // contain at least one attribute. + bytes data = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Attributes for this message. If this field is empty, the message + // must contain non-empty data. This can be used to filter messages on the + // subscription. + map attributes = 2 [(google.api.field_behavior) = OPTIONAL]; + + // ID of this message, assigned by the server when the message is published. + // Guaranteed to be unique within the topic. This value may be read by a + // subscriber that receives a `PubsubMessage` via a `Pull` call or a push + // delivery. It must not be populated by the publisher in a `Publish` call. + string message_id = 3; + + // The time at which the message was published, populated by the server when + // it receives the `Publish` call. It must not be populated by the + // publisher in a `Publish` call. + google.protobuf.Timestamp publish_time = 4; + + // Optional. If non-empty, identifies related messages for which publish order + // should be respected. If a `Subscription` has `enable_message_ordering` set + // to `true`, messages published with the same non-empty `ordering_key` value + // will be delivered to subscribers in the order in which they are received by + // the Pub/Sub system. All `PubsubMessage`s published in a given + // `PublishRequest` must specify the same `ordering_key` value. For more + // information, see [ordering + // messages](https://cloud.google.com/pubsub/docs/ordering). + string ordering_key = 5 [(google.api.field_behavior) = OPTIONAL]; +} + +// Request for the GetTopic method. +message GetTopicRequest { + // Required. The name of the topic to get. + // Format is `projects/{project}/topics/{topic}`. + string topic = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; +} + +// Request for the UpdateTopic method. +message UpdateTopicRequest { + // Required. The updated topic object. + Topic topic = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Indicates which fields in the provided topic to update. Must be + // specified and non-empty. Note that if `update_mask` contains + // "message_storage_policy" but the `message_storage_policy` is not set in + // the `topic` provided above, then the updated value is determined by the + // policy configured at the project or organization level. + google.protobuf.FieldMask update_mask = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the Publish method. +message PublishRequest { + // Required. The messages in the request will be published on this topic. + // Format is `projects/{project}/topics/{topic}`. + string topic = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; + + // Required. The messages to publish. + repeated PubsubMessage messages = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Response for the `Publish` method. +message PublishResponse { + // Optional. The server-assigned ID of each published message, in the same + // order as the messages in the request. IDs are guaranteed to be unique + // within the topic. + repeated string message_ids = 1 [(google.api.field_behavior) = OPTIONAL]; +} + +// Request for the `ListTopics` method. +message ListTopicsRequest { + // Required. The name of the project in which to list topics. + // Format is `projects/{project-id}`. + string project = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; + + // Optional. Maximum number of topics to return. + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The value returned by the last `ListTopicsResponse`; indicates + // that this is a continuation of a prior `ListTopics` call, and that the + // system should return the next page of data. + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response for the `ListTopics` method. +message ListTopicsResponse { + // Optional. The resulting topics. + repeated Topic topics = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If not empty, indicates that there may be more topics that match + // the request; this value should be passed in a new `ListTopicsRequest`. + string next_page_token = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Request for the `ListTopicSubscriptions` method. +message ListTopicSubscriptionsRequest { + // Required. The name of the topic that subscriptions are attached to. + // Format is `projects/{project}/topics/{topic}`. + string topic = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; + + // Optional. Maximum number of subscription names to return. + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The value returned by the last `ListTopicSubscriptionsResponse`; + // indicates that this is a continuation of a prior `ListTopicSubscriptions` + // call, and that the system should return the next page of data. + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response for the `ListTopicSubscriptions` method. +message ListTopicSubscriptionsResponse { + // Optional. The names of subscriptions attached to the topic specified in the + // request. + repeated string subscriptions = 1 [ + (google.api.field_behavior) = OPTIONAL, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + // Optional. If not empty, indicates that there may be more subscriptions that + // match the request; this value should be passed in a new + // `ListTopicSubscriptionsRequest` to get more subscriptions. + string next_page_token = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Request for the `ListTopicSnapshots` method. +message ListTopicSnapshotsRequest { + // Required. The name of the topic that snapshots are attached to. + // Format is `projects/{project}/topics/{topic}`. + string topic = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; + + // Optional. Maximum number of snapshot names to return. + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The value returned by the last `ListTopicSnapshotsResponse`; + // indicates that this is a continuation of a prior `ListTopicSnapshots` call, + // and that the system should return the next page of data. + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response for the `ListTopicSnapshots` method. +message ListTopicSnapshotsResponse { + // Optional. The names of the snapshots that match the request. + repeated string snapshots = 1 [ + (google.api.field_behavior) = OPTIONAL, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Snapshot" } + ]; + + // Optional. If not empty, indicates that there may be more snapshots that + // match the request; this value should be passed in a new + // `ListTopicSnapshotsRequest` to get more snapshots. + string next_page_token = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Request for the `DeleteTopic` method. +message DeleteTopicRequest { + // Required. Name of the topic to delete. + // Format is `projects/{project}/topics/{topic}`. + string topic = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; +} + +// Request for the DetachSubscription method. +message DetachSubscriptionRequest { + // Required. The subscription to detach. + // Format is `projects/{project}/subscriptions/{subscription}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; +} + +// Response for the DetachSubscription method. +// Reserved for future use. +message DetachSubscriptionResponse {} + +// The service that an application uses to manipulate subscriptions and to +// consume messages from a subscription via the `Pull` method or by +// establishing a bi-directional stream using the `StreamingPull` method. +service Subscriber { + option (google.api.default_host) = "pubsub.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform," + "https://www.googleapis.com/auth/pubsub"; + + // Creates a subscription to a given topic. See the [resource name rules] + // (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). + // If the subscription already exists, returns `ALREADY_EXISTS`. + // If the corresponding topic doesn't exist, returns `NOT_FOUND`. + // + // If the name is not provided in the request, the server will assign a random + // name for this subscription on the same project as the topic, conforming + // to the [resource name format] + // (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The + // generated name is populated in the returned Subscription object. Note that + // for REST API requests, you must specify a name in the request. + rpc CreateSubscription(Subscription) returns (Subscription) { + option (google.api.http) = { + put: "/v1/{name=projects/*/subscriptions/*}" + body: "*" + }; + option (google.api.method_signature) = + "name,topic,push_config,ack_deadline_seconds"; + } + + // Gets the configuration details of a subscription. + rpc GetSubscription(GetSubscriptionRequest) returns (Subscription) { + option (google.api.http) = { + get: "/v1/{subscription=projects/*/subscriptions/*}" + }; + option (google.api.method_signature) = "subscription"; + } + + // Updates an existing subscription by updating the fields specified in the + // update mask. Note that certain properties of a subscription, such as its + // topic, are not modifiable. + rpc UpdateSubscription(UpdateSubscriptionRequest) returns (Subscription) { + option (google.api.http) = { + patch: "/v1/{subscription.name=projects/*/subscriptions/*}" + body: "*" + }; + option (google.api.method_signature) = "subscription,update_mask"; + } + + // Lists matching subscriptions. + rpc ListSubscriptions(ListSubscriptionsRequest) + returns (ListSubscriptionsResponse) { + option (google.api.http) = { + get: "/v1/{project=projects/*}/subscriptions" + }; + option (google.api.method_signature) = "project"; + } + + // Deletes an existing subscription. All messages retained in the subscription + // are immediately dropped. Calls to `Pull` after deletion will return + // `NOT_FOUND`. After a subscription is deleted, a new one may be created with + // the same name, but the new one has no association with the old + // subscription or its topic unless the same topic is specified. + rpc DeleteSubscription(DeleteSubscriptionRequest) + returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/v1/{subscription=projects/*/subscriptions/*}" + }; + option (google.api.method_signature) = "subscription"; + } + + // Modifies the ack deadline for a specific message. This method is useful + // to indicate that more time is needed to process a message by the + // subscriber, or to make the message available for redelivery if the + // processing was interrupted. Note that this does not modify the + // subscription-level `ackDeadlineSeconds` used for subsequent messages. + rpc ModifyAckDeadline(ModifyAckDeadlineRequest) + returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1/{subscription=projects/*/subscriptions/*}:modifyAckDeadline" + body: "*" + }; + option (google.api.method_signature) = + "subscription,ack_ids,ack_deadline_seconds"; + } + + // Acknowledges the messages associated with the `ack_ids` in the + // `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages + // from the subscription. + // + // Acknowledging a message whose ack deadline has expired may succeed, + // but such a message may be redelivered later. Acknowledging a message more + // than once will not result in an error. + rpc Acknowledge(AcknowledgeRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1/{subscription=projects/*/subscriptions/*}:acknowledge" + body: "*" + }; + option (google.api.method_signature) = "subscription,ack_ids"; + } + + // Pulls messages from the server. + rpc Pull(PullRequest) returns (PullResponse) { + option (google.api.http) = { + post: "/v1/{subscription=projects/*/subscriptions/*}:pull" + body: "*" + }; + option (google.api.method_signature) = + "subscription,return_immediately,max_messages"; + option (google.api.method_signature) = "subscription,max_messages"; + } + + // Establishes a stream with the server, which sends messages down to the + // client. The client streams acknowledgments and ack deadline modifications + // back to the server. The server will close the stream and return the status + // on any error. The server may close the stream with status `UNAVAILABLE` to + // reassign server-side resources, in which case, the client should + // re-establish the stream. Flow control can be achieved by configuring the + // underlying RPC channel. + rpc StreamingPull(stream StreamingPullRequest) + returns (stream StreamingPullResponse) {} + + // Modifies the `PushConfig` for a specified subscription. + // + // This may be used to change a push subscription to a pull one (signified by + // an empty `PushConfig`) or vice versa, or change the endpoint URL and other + // attributes of a push subscription. Messages will accumulate for delivery + // continuously through the call regardless of changes to the `PushConfig`. + rpc ModifyPushConfig(ModifyPushConfigRequest) + returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1/{subscription=projects/*/subscriptions/*}:modifyPushConfig" + body: "*" + }; + option (google.api.method_signature) = "subscription,push_config"; + } + + // Gets the configuration details of a snapshot. Snapshots are used in + // [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, + // which allow you to manage message acknowledgments in bulk. That is, you can + // set the acknowledgment state of messages in an existing subscription to the + // state captured by a snapshot. + rpc GetSnapshot(GetSnapshotRequest) returns (Snapshot) { + option (google.api.http) = { + get: "/v1/{snapshot=projects/*/snapshots/*}" + }; + option (google.api.method_signature) = "snapshot"; + } + + // Lists the existing snapshots. Snapshots are used in [Seek]( + // https://cloud.google.com/pubsub/docs/replay-overview) operations, which + // allow you to manage message acknowledgments in bulk. That is, you can set + // the acknowledgment state of messages in an existing subscription to the + // state captured by a snapshot. + rpc ListSnapshots(ListSnapshotsRequest) returns (ListSnapshotsResponse) { + option (google.api.http) = { + get: "/v1/{project=projects/*}/snapshots" + }; + option (google.api.method_signature) = "project"; + } + + // Creates a snapshot from the requested subscription. Snapshots are used in + // [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, + // which allow you to manage message acknowledgments in bulk. That is, you can + // set the acknowledgment state of messages in an existing subscription to the + // state captured by a snapshot. + // If the snapshot already exists, returns `ALREADY_EXISTS`. + // If the requested subscription doesn't exist, returns `NOT_FOUND`. + // If the backlog in the subscription is too old -- and the resulting snapshot + // would expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. + // See also the `Snapshot.expire_time` field. If the name is not provided in + // the request, the server will assign a random + // name for this snapshot on the same project as the subscription, conforming + // to the [resource name format] + // (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The + // generated name is populated in the returned Snapshot object. Note that for + // REST API requests, you must specify a name in the request. + rpc CreateSnapshot(CreateSnapshotRequest) returns (Snapshot) { + option (google.api.http) = { + put: "/v1/{name=projects/*/snapshots/*}" + body: "*" + }; + option (google.api.method_signature) = "name,subscription"; + } + + // Updates an existing snapshot by updating the fields specified in the update + // mask. Snapshots are used in + // [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, + // which allow you to manage message acknowledgments in bulk. That is, you can + // set the acknowledgment state of messages in an existing subscription to the + // state captured by a snapshot. + rpc UpdateSnapshot(UpdateSnapshotRequest) returns (Snapshot) { + option (google.api.http) = { + patch: "/v1/{snapshot.name=projects/*/snapshots/*}" + body: "*" + }; + option (google.api.method_signature) = "snapshot,update_mask"; + } + + // Removes an existing snapshot. Snapshots are used in [Seek] + // (https://cloud.google.com/pubsub/docs/replay-overview) operations, which + // allow you to manage message acknowledgments in bulk. That is, you can set + // the acknowledgment state of messages in an existing subscription to the + // state captured by a snapshot. + // When the snapshot is deleted, all messages retained in the snapshot + // are immediately dropped. After a snapshot is deleted, a new one may be + // created with the same name, but the new one has no association with the old + // snapshot or its subscription, unless the same subscription is specified. + rpc DeleteSnapshot(DeleteSnapshotRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/v1/{snapshot=projects/*/snapshots/*}" + }; + option (google.api.method_signature) = "snapshot"; + } + + // Seeks an existing subscription to a point in time or to a given snapshot, + // whichever is provided in the request. Snapshots are used in [Seek] + // (https://cloud.google.com/pubsub/docs/replay-overview) operations, which + // allow you to manage message acknowledgments in bulk. That is, you can set + // the acknowledgment state of messages in an existing subscription to the + // state captured by a snapshot. Note that both the subscription and the + // snapshot must be on the same topic. + rpc Seek(SeekRequest) returns (SeekResponse) { + option (google.api.http) = { + post: "/v1/{subscription=projects/*/subscriptions/*}:seek" + body: "*" + }; + } +} + +// A subscription resource. If none of `push_config`, `bigquery_config`, or +// `cloud_storage_config` is set, then the subscriber will pull and ack messages +// using API methods. At most one of these fields may be set. +message Subscription { + option (google.api.resource) = { + type: "pubsub.googleapis.com/Subscription" + pattern: "projects/{project}/subscriptions/{subscription}" + plural: "subscriptions" + singular: "subscription" + }; + + // Possible states for a subscription. + enum State { + // Default value. This value is unused. + STATE_UNSPECIFIED = 0; + + // The subscription can actively receive messages + ACTIVE = 1; + + // The subscription cannot receive messages because of an error with the + // resource to which it pushes messages. See the more detailed error state + // in the corresponding configuration. + RESOURCE_ERROR = 2; + } + + // Information about an associated [Analytics Hub + // subscription](https://cloud.google.com/bigquery/docs/analytics-hub-manage-subscriptions). + message AnalyticsHubSubscriptionInfo { + // Optional. The name of the associated Analytics Hub listing resource. + // Pattern: + // "projects/{project}/locations/{location}/dataExchanges/{data_exchange}/listings/{listing}" + string listing = 1 [ + (google.api.field_behavior) = OPTIONAL, + (google.api.resource_reference) = { + type: "analyticshub.googleapis.com/Listing" + } + ]; + + // Optional. The name of the associated Analytics Hub subscription resource. + // Pattern: + // "projects/{project}/locations/{location}/subscriptions/{subscription}" + string subscription = 2 [(google.api.field_behavior) = OPTIONAL]; + } + + // Required. Identifier. The name of the subscription. It must have the format + // `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must + // start with a letter, and contain only letters (`[A-Za-z]`), numbers + // (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`), + // plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters + // in length, and it must not start with `"goog"`. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.field_behavior) = IDENTIFIER + ]; + + // Required. The name of the topic from which this subscription is receiving + // messages. Format is `projects/{project}/topics/{topic}`. The value of this + // field will be `_deleted-topic_` if the topic has been deleted. + string topic = 2 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; + + // Optional. If push delivery is used with this subscription, this field is + // used to configure it. + PushConfig push_config = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If delivery to BigQuery is used with this subscription, this + // field is used to configure it. + BigQueryConfig bigquery_config = 18 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If delivery to Google Cloud Storage is used with this + // subscription, this field is used to configure it. + CloudStorageConfig cloud_storage_config = 22 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If delivery to Bigtable is used with this subscription, this + // field is used to configure it. + BigtableConfig bigtable_config = 27 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The approximate amount of time (on a best-effort basis) Pub/Sub + // waits for the subscriber to acknowledge receipt before resending the + // message. In the interval after the message is delivered and before it is + // acknowledged, it is considered to be _outstanding_. During that time + // period, the message will not be redelivered (on a best-effort basis). + // + // For pull subscriptions, this value is used as the initial value for the ack + // deadline. To override this value for a given message, call + // `ModifyAckDeadline` with the corresponding `ack_id` if using + // non-streaming pull or send the `ack_id` in a + // `StreamingModifyAckDeadlineRequest` if using streaming pull. + // The minimum custom deadline you can specify is 10 seconds. + // The maximum custom deadline you can specify is 600 seconds (10 minutes). + // If this parameter is 0, a default value of 10 seconds is used. + // + // For push delivery, this value is also used to set the request timeout for + // the call to the push endpoint. + // + // If the subscriber never acknowledges the message, the Pub/Sub + // system will eventually redeliver the message. + int32 ack_deadline_seconds = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Indicates whether to retain acknowledged messages. If true, then + // messages are not expunged from the subscription's backlog, even if they are + // acknowledged, until they fall out of the `message_retention_duration` + // window. This must be true if you would like to [`Seek` to a timestamp] + // (https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time) in + // the past to replay previously-acknowledged messages. + bool retain_acked_messages = 7 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. How long to retain unacknowledged messages in the subscription's + // backlog, from the moment a message is published. If `retain_acked_messages` + // is true, then this also configures the retention of acknowledged messages, + // and thus configures how far back in time a `Seek` can be done. Defaults to + // 7 days. Cannot be more than 31 days or less than 10 minutes. + google.protobuf.Duration message_retention_duration = 8 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. See [Creating and managing + // labels](https://cloud.google.com/pubsub/docs/labels). + map labels = 9 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If true, messages published with the same `ordering_key` in + // `PubsubMessage` will be delivered to the subscribers in the order in which + // they are received by the Pub/Sub system. Otherwise, they may be delivered + // in any order. + bool enable_message_ordering = 10 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. A policy that specifies the conditions for this subscription's + // expiration. A subscription is considered active as long as any connected + // subscriber is successfully consuming messages from the subscription or is + // issuing operations on the subscription. If `expiration_policy` is not set, + // a *default policy* with `ttl` of 31 days will be used. The minimum allowed + // value for `expiration_policy.ttl` is 1 day. If `expiration_policy` is set, + // but `expiration_policy.ttl` is not set, the subscription never expires. + ExpirationPolicy expiration_policy = 11 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. An expression written in the Pub/Sub [filter + // language](https://cloud.google.com/pubsub/docs/filtering). If non-empty, + // then only `PubsubMessage`s whose `attributes` field matches the filter are + // delivered on this subscription. If empty, then no messages are filtered + // out. + string filter = 12 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. A policy that specifies the conditions for dead lettering + // messages in this subscription. If dead_letter_policy is not set, dead + // lettering is disabled. + // + // The Pub/Sub service account associated with this subscriptions's + // parent project (i.e., + // service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must have + // permission to Acknowledge() messages on this subscription. + DeadLetterPolicy dead_letter_policy = 13 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. A policy that specifies how Pub/Sub retries message delivery for + // this subscription. + // + // If not set, the default retry policy is applied. This generally implies + // that messages will be retried as soon as possible for healthy subscribers. + // RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded + // events for a given message. + RetryPolicy retry_policy = 14 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Indicates whether the subscription is detached from its topic. + // Detached subscriptions don't receive messages from their topic and don't + // retain any backlog. `Pull` and `StreamingPull` requests will return + // FAILED_PRECONDITION. If the subscription is a push subscription, pushes to + // the endpoint will not be made. + bool detached = 15 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If true, Pub/Sub provides the following guarantees for the + // delivery of a message with a given value of `message_id` on this + // subscription: + // + // * The message sent to a subscriber is guaranteed not to be resent + // before the message's acknowledgment deadline expires. + // * An acknowledged message will not be resent to a subscriber. + // + // Note that subscribers may still receive multiple copies of a message + // when `enable_exactly_once_delivery` is true if the message was published + // multiple times by a publisher client. These copies are considered distinct + // by Pub/Sub and have distinct `message_id` values. + bool enable_exactly_once_delivery = 16 + [(google.api.field_behavior) = OPTIONAL]; + + // Output only. Indicates the minimum duration for which a message is retained + // after it is published to the subscription's topic. If this field is set, + // messages published to the subscription's topic in the last + // `topic_message_retention_duration` are always available to subscribers. See + // the `message_retention_duration` field in `Topic`. This field is set only + // in responses from the server; it is ignored if it is set in any requests. + google.protobuf.Duration topic_message_retention_duration = 17 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. An output-only field indicating whether or not the + // subscription can receive messages. + State state = 19 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Information about the associated Analytics Hub subscription. + // Only set if the subscription is created by Analytics Hub. + AnalyticsHubSubscriptionInfo analytics_hub_subscription_info = 23 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Transforms to be applied to messages before they are delivered to + // subscribers. Transforms are applied in the order specified. + repeated MessageTransform message_transforms = 25 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Input only. Immutable. Tag keys/values directly bound to this + // resource. For example: + // "123/environment": "production", + // "123/costCenter": "marketing" + // See https://docs.cloud.google.com/pubsub/docs/tags for more information on + // using tags with Pub/Sub resources. + map tags = 26 [ + (google.api.field_behavior) = INPUT_ONLY, + (google.api.field_behavior) = IMMUTABLE, + (google.api.field_behavior) = OPTIONAL + ]; +} + +// A policy that specifies how Pub/Sub retries message delivery. +// +// Retry delay will be exponential based on provided minimum and maximum +// backoffs. https://en.wikipedia.org/wiki/Exponential_backoff. +// +// RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded +// events for a given message. +// +// Retry Policy is implemented on a best effort basis. At times, the delay +// between consecutive deliveries may not match the configuration. That is, +// delay can be more or less than configured backoff. +message RetryPolicy { + // Optional. The minimum delay between consecutive deliveries of a given + // message. Value should be between 0 and 600 seconds. Defaults to 10 seconds. + google.protobuf.Duration minimum_backoff = 1 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The maximum delay between consecutive deliveries of a given + // message. Value should be between 0 and 600 seconds. Defaults to 600 + // seconds. + google.protobuf.Duration maximum_backoff = 2 + [(google.api.field_behavior) = OPTIONAL]; +} + +// Dead lettering is done on a best effort basis. The same message might be +// dead lettered multiple times. +// +// If validation on any of the fields fails at subscription creation/updation, +// the create/update subscription request will fail. +message DeadLetterPolicy { + // Optional. The name of the topic to which dead letter messages should be + // published. Format is `projects/{project}/topics/{topic}`.The Pub/Sub + // service account associated with the enclosing subscription's parent project + // (i.e., service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com) must + // have permission to Publish() to this topic. + // + // The operation will fail if the topic does not exist. + // Users should ensure that there is a subscription attached to this topic + // since messages published to a topic with no subscriptions are lost. + string dead_letter_topic = 1 [ + (google.api.field_behavior) = OPTIONAL, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; + + // Optional. The maximum number of delivery attempts for any message. The + // value must be between 5 and 100. + // + // The number of delivery attempts is defined as 1 + (the sum of number of + // NACKs and number of times the acknowledgment deadline has been exceeded + // for the message). + // + // A NACK is any call to ModifyAckDeadline with a 0 deadline. Note that + // client libraries may automatically extend ack_deadlines. + // + // This field will be honored on a best effort basis. + // + // If this parameter is 0, a default value of 5 is used. + int32 max_delivery_attempts = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// A policy that specifies the conditions for resource expiration (i.e., +// automatic resource deletion). +message ExpirationPolicy { + // Optional. Specifies the "time-to-live" duration for an associated resource. + // The resource expires if it is not active for a period of `ttl`. The + // definition of "activity" depends on the type of the associated resource. + // The minimum and maximum allowed values for `ttl` depend on the type of the + // associated resource, as well. If `ttl` is not set, the associated resource + // never expires. + google.protobuf.Duration ttl = 1 [(google.api.field_behavior) = OPTIONAL]; +} + +// Configuration for a push delivery endpoint. +message PushConfig { + // Contains information needed for generating an + // [OpenID Connect + // token](https://developers.google.com/identity/protocols/OpenIDConnect). + message OidcToken { + // Optional. [Service account + // email](https://cloud.google.com/iam/docs/service-accounts) + // used for generating the OIDC token. For more information + // on setting up authentication, see + // [Push subscriptions](https://cloud.google.com/pubsub/docs/push). + string service_account_email = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Audience to be used when generating OIDC token. The audience + // claim identifies the recipients that the JWT is intended for. The + // audience value is a single case-sensitive string. Having multiple values + // (array) for the audience field is not supported. More info about the OIDC + // JWT token audience here: + // https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified, + // the Push endpoint URL will be used. + string audience = 2 [(google.api.field_behavior) = OPTIONAL]; + } + + // The payload to the push endpoint is in the form of the JSON representation + // of a PubsubMessage + // (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage). + message PubsubWrapper {} + + // Sets the `data` field as the HTTP body for delivery. + message NoWrapper { + // Optional. When true, writes the Pub/Sub message metadata to + // `x-goog-pubsub-:` headers of the HTTP request. Writes the + // Pub/Sub message attributes to `:` headers of the HTTP request. + bool write_metadata = 1 [(google.api.field_behavior) = OPTIONAL]; + } + + // Optional. A URL locating the endpoint to which messages should be pushed. + // For example, a Webhook endpoint might use `https://example.com/push`. + string push_endpoint = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Endpoint configuration attributes that can be used to control + // different aspects of the message delivery. + // + // The only currently supported attribute is `x-goog-version`, which you can + // use to change the format of the pushed message. This attribute + // indicates the version of the data expected by the endpoint. This + // controls the shape of the pushed message (i.e., its fields and metadata). + // + // If not present during the `CreateSubscription` call, it will default to + // the version of the Pub/Sub API used to make such call. If not present in a + // `ModifyPushConfig` call, its value will not be changed. `GetSubscription` + // calls will always return a valid version, even if the subscription was + // created without this attribute. + // + // The only supported values for the `x-goog-version` attribute are: + // + // * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. + // * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API. + // + // For example: + // `attributes { "x-goog-version": "v1" }` + map attributes = 2 [(google.api.field_behavior) = OPTIONAL]; + + // An authentication method used by push endpoints to verify the source of + // push requests. This can be used with push endpoints that are private by + // default to allow requests only from the Pub/Sub system, for example. + // This field is optional and should be set only by users interested in + // authenticated push. + oneof authentication_method { + // Optional. If specified, Pub/Sub will generate and attach an OIDC JWT + // token as an `Authorization` header in the HTTP request for every pushed + // message. + OidcToken oidc_token = 3 [(google.api.field_behavior) = OPTIONAL]; + } + + // The format of the delivered message to the push endpoint is defined by + // the chosen wrapper. When unset, `PubsubWrapper` is used. + oneof wrapper { + // Optional. When set, the payload to the push endpoint is in the form of + // the JSON representation of a PubsubMessage + // (https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#pubsubmessage). + PubsubWrapper pubsub_wrapper = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. When set, the payload to the push endpoint is not wrapped. + NoWrapper no_wrapper = 5 [(google.api.field_behavior) = OPTIONAL]; + } +} + +// Configuration for a BigQuery subscription. +message BigQueryConfig { + // Possible states for a BigQuery subscription. + enum State { + // Default value. This value is unused. + STATE_UNSPECIFIED = 0; + + // The subscription can actively send messages to BigQuery + ACTIVE = 1; + + // Cannot write to the BigQuery table because of permission denied errors. + // This can happen if + // - Pub/Sub SA has not been granted the [appropriate BigQuery IAM + // permissions](https://cloud.google.com/pubsub/docs/create-subscription#assign_bigquery_service_account) + // - bigquery.googleapis.com API is not enabled for the project + // ([instructions](https://cloud.google.com/service-usage/docs/enable-disable)) + PERMISSION_DENIED = 2; + + // Cannot write to the BigQuery table because it does not exist. + NOT_FOUND = 3; + + // Cannot write to the BigQuery table due to a schema mismatch. + SCHEMA_MISMATCH = 4; + + // Cannot write to the destination because enforce_in_transit is set to true + // and the destination locations are not in the allowed regions. + IN_TRANSIT_LOCATION_RESTRICTION = 5; + + // Cannot write to the BigQuery table because the table is not in the same + // location as where Vertex AI models used in `message_transform`s are + // deployed. + VERTEX_AI_LOCATION_RESTRICTION = 6; + } + + // Optional. The name of the table to which to write data, of the form + // {projectId}.{datasetId}.{tableId} + string table = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. When true, use the topic's schema as the columns to write to in + // BigQuery, if it exists. `use_topic_schema` and `use_table_schema` cannot be + // enabled at the same time. + bool use_topic_schema = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. When true, write the subscription name, message_id, publish_time, + // attributes, and ordering_key to additional columns in the table. The + // subscription name, message_id, and publish_time fields are put in their own + // columns while all other message properties (other than data) are written to + // a JSON object in the attributes column. + bool write_metadata = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. When true and use_topic_schema is true, any fields that are a + // part of the topic schema that are not part of the BigQuery table schema are + // dropped when writing to BigQuery. Otherwise, the schemas must be kept in + // sync and any messages with extra fields are not written and remain in the + // subscription's backlog. + bool drop_unknown_fields = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. An output-only field that indicates whether or not the + // subscription can receive messages. + State state = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. When true, use the BigQuery table's schema as the columns to + // write to in BigQuery. `use_table_schema` and `use_topic_schema` cannot be + // enabled at the same time. + bool use_table_schema = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The service account to use to write to BigQuery. The subscription + // creator or updater that specifies this field must have + // `iam.serviceAccounts.actAs` permission on the service account. If not + // specified, the Pub/Sub [service + // agent](https://cloud.google.com/iam/docs/service-agents), + // service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used. + string service_account_email = 7 [(google.api.field_behavior) = OPTIONAL]; +} + +// Configuration for a Bigtable subscription. The Pub/Sub message will be +// written to a Bigtable row as follows: +// - row key: subscription name and message ID delimited by #. +// - columns: message bytes written to a single column family "data" with an +// empty-string column qualifier. +// - cell timestamp: the message publish timestamp. +message BigtableConfig { + // Possible states for a Bigtable subscription. + // Note: more states could be added in the future. Please code accordingly. + enum State { + // Default value. This value is unused. + STATE_UNSPECIFIED = 0; + + // The subscription can actively send messages to Bigtable. + ACTIVE = 1; + + // Cannot write to Bigtable because the instance, table, or app profile + // does not exist. + NOT_FOUND = 2; + + // Cannot write to Bigtable because the app profile is not configured for + // single-cluster routing. + APP_PROFILE_MISCONFIGURED = 3; + + // Cannot write to Bigtable because of permission denied errors. + // This can happen if: + // - The Pub/Sub service agent has not been granted the + // [appropriate Bigtable IAM permission + // bigtable.tables.mutateRows]({$universe.dns_names.final_documentation_domain}/bigtable/docs/access-control#permissions) + // - The bigtable.googleapis.com API is not enabled for the project + // ([instructions]({$universe.dns_names.final_documentation_domain}/service-usage/docs/enable-disable)) + PERMISSION_DENIED = 4; + + // Cannot write to Bigtable because of a missing column family ("data") or + // if there is no structured row key for the subscription name + message ID. + SCHEMA_MISMATCH = 5; + + // Cannot write to the destination because enforce_in_transit is set to true + // and the destination locations are not in the allowed regions. + IN_TRANSIT_LOCATION_RESTRICTION = 6; + + // Cannot write to Bigtable because the table is not in the same location as + // where Vertex AI models used in `message_transform`s are deployed. + VERTEX_AI_LOCATION_RESTRICTION = 7; + } + + // Optional. The unique name of the table to write messages to. + // + // Values are of the form + // `projects//instances//tables/`. + string table = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The app profile to use for the Bigtable writes. If not specified, + // the "default" application profile will be used. The app profile must use + // single-cluster routing. + string app_profile_id = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The service account to use to write to Bigtable. The subscription + // creator or updater that specifies this field must have + // `iam.serviceAccounts.actAs` permission on the service account. If not + // specified, the Pub/Sub [service + // agent](https://cloud.google.com/iam/docs/service-agents), + // service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used. + string service_account_email = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. When true, write the subscription name, message_id, publish_time, + // attributes, and ordering_key to additional columns in the table under the + // pubsub_metadata column family. The subscription name, message_id, and + // publish_time fields are put in their own columns while all other message + // properties (other than data) are written to a JSON object in the attributes + // column. + bool write_metadata = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. An output-only field that indicates whether or not the + // subscription can receive messages. + State state = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Configuration for a Cloud Storage subscription. +message CloudStorageConfig { + // Configuration for writing message data in text format. + // Message payloads will be written to files as raw text, separated by a + // newline. + message TextConfig {} + + // Configuration for writing message data in Avro format. + // Message payloads and metadata will be written to files as an Avro binary. + message AvroConfig { + // Optional. When true, write the subscription name, message_id, + // publish_time, attributes, and ordering_key as additional fields in the + // output. The subscription name, message_id, and publish_time fields are + // put in their own fields while all other message properties other than + // data (for example, an ordering_key, if present) are added as entries in + // the attributes map. + bool write_metadata = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. When true, the output Cloud Storage file will be serialized + // using the topic schema, if it exists. + bool use_topic_schema = 2 [(google.api.field_behavior) = OPTIONAL]; + } + + // Possible states for a Cloud Storage subscription. + enum State { + // Default value. This value is unused. + STATE_UNSPECIFIED = 0; + + // The subscription can actively send messages to Cloud Storage. + ACTIVE = 1; + + // Cannot write to the Cloud Storage bucket because of permission denied + // errors. + PERMISSION_DENIED = 2; + + // Cannot write to the Cloud Storage bucket because it does not exist. + NOT_FOUND = 3; + + // Cannot write to the destination because enforce_in_transit is set to true + // and the destination locations are not in the allowed regions. + IN_TRANSIT_LOCATION_RESTRICTION = 4; + + // Cannot write to the Cloud Storage bucket due to an incompatibility + // between the topic schema and subscription settings. + SCHEMA_MISMATCH = 5; + + // Cannot write to the Cloud Storage bucket because the bucket is not in the + // same location as where Vertex AI models used in `message_transform`s are + // deployed. + VERTEX_AI_LOCATION_RESTRICTION = 6; + } + + // Required. User-provided name for the Cloud Storage bucket. + // The bucket must be created by the user. The bucket name must be without + // any prefix like "gs://". See the [bucket naming + // requirements] (https://cloud.google.com/storage/docs/buckets#naming). + string bucket = 1 [(google.api.field_behavior) = REQUIRED]; + + // Optional. User-provided prefix for Cloud Storage filename. See the [object + // naming requirements](https://cloud.google.com/storage/docs/objects#naming). + string filename_prefix = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. User-provided suffix for Cloud Storage filename. See the [object + // naming requirements](https://cloud.google.com/storage/docs/objects#naming). + // Must not end in "/". + string filename_suffix = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. User-provided format string specifying how to represent datetimes + // in Cloud Storage filenames. See the [datetime format + // guidance](https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription#file_names). + string filename_datetime_format = 10 [(google.api.field_behavior) = OPTIONAL]; + + // Defaults to text format. + oneof output_format { + // Optional. If set, message data will be written to Cloud Storage in text + // format. + TextConfig text_config = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If set, message data will be written to Cloud Storage in Avro + // format. + AvroConfig avro_config = 5 [(google.api.field_behavior) = OPTIONAL]; + } + + // Optional. The maximum duration that can elapse before a new Cloud Storage + // file is created. Min 1 minute, max 10 minutes, default 5 minutes. May not + // exceed the subscription's acknowledgment deadline. + google.protobuf.Duration max_duration = 6 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The maximum bytes that can be written to a Cloud Storage file + // before a new file is created. Min 1 KB, max 10 GiB. The max_bytes limit may + // be exceeded in cases where messages are larger than the limit. + int64 max_bytes = 7 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The maximum number of messages that can be written to a Cloud + // Storage file before a new file is created. Min 1000 messages. + int64 max_messages = 8 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. An output-only field that indicates whether or not the + // subscription can receive messages. + State state = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. The service account to use to write to Cloud Storage. The + // subscription creator or updater that specifies this field must have + // `iam.serviceAccounts.actAs` permission on the service account. If not + // specified, the Pub/Sub + // [service agent](https://cloud.google.com/iam/docs/service-agents), + // service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com, is used. + string service_account_email = 11 [(google.api.field_behavior) = OPTIONAL]; +} + +// A message and its corresponding acknowledgment ID. +message ReceivedMessage { + // Optional. This ID can be used to acknowledge the received message. + string ack_id = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The message. + PubsubMessage message = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The approximate number of times that Pub/Sub has attempted to + // deliver the associated message to a subscriber. + // + // More precisely, this is 1 + (number of NACKs) + + // (number of ack_deadline exceeds) for this message. + // + // A NACK is any call to ModifyAckDeadline with a 0 deadline. An ack_deadline + // exceeds event is whenever a message is not acknowledged within + // ack_deadline. Note that ack_deadline is initially + // Subscription.ackDeadlineSeconds, but may get extended automatically by + // the client library. + // + // Upon the first delivery of a given message, `delivery_attempt` will have a + // value of 1. The value is calculated at best effort and is approximate. + // + // If a DeadLetterPolicy is not set on the subscription, this will be 0. + int32 delivery_attempt = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// Request for the GetSubscription method. +message GetSubscriptionRequest { + // Required. The name of the subscription to get. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; +} + +// Request for the UpdateSubscription method. +message UpdateSubscriptionRequest { + // Required. The updated subscription object. + Subscription subscription = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Indicates which fields in the provided subscription to update. + // Must be specified and non-empty. + google.protobuf.FieldMask update_mask = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `ListSubscriptions` method. +message ListSubscriptionsRequest { + // Required. The name of the project in which to list subscriptions. + // Format is `projects/{project-id}`. + string project = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; + + // Optional. Maximum number of subscriptions to return. + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The value returned by the last `ListSubscriptionsResponse`; + // indicates that this is a continuation of a prior `ListSubscriptions` call, + // and that the system should return the next page of data. + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response for the `ListSubscriptions` method. +message ListSubscriptionsResponse { + // Optional. The subscriptions that match the request. + repeated Subscription subscriptions = 1 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If not empty, indicates that there may be more subscriptions that + // match the request; this value should be passed in a new + // `ListSubscriptionsRequest` to get more subscriptions. + string next_page_token = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Request for the DeleteSubscription method. +message DeleteSubscriptionRequest { + // Required. The subscription to delete. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; +} + +// Request for the ModifyPushConfig method. +message ModifyPushConfigRequest { + // Required. The name of the subscription. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + // Required. The push configuration for future deliveries. + // + // An empty `pushConfig` indicates that the Pub/Sub system should + // stop pushing messages from the given subscription and allow + // messages to be pulled and acknowledged - effectively pausing + // the subscription if `Pull` or `StreamingPull` is not called. + PushConfig push_config = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `Pull` method. +message PullRequest { + // Required. The subscription from which messages should be pulled. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + // Optional. If this field set to true, the system will respond immediately + // even if it there are no messages available to return in the `Pull` + // response. Otherwise, the system may wait (for a bounded amount of time) + // until at least one message is available, rather than returning no messages. + // Warning: setting this field to `true` is discouraged because it adversely + // impacts the performance of `Pull` operations. We recommend that users do + // not set this field. + bool return_immediately = 2 + [deprecated = true, (google.api.field_behavior) = OPTIONAL]; + + // Required. The maximum number of messages to return for this request. Must + // be a positive integer. The Pub/Sub system may return fewer than the number + // specified. + int32 max_messages = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Response for the `Pull` method. +message PullResponse { + // Optional. Received Pub/Sub messages. The list will be empty if there are no + // more messages available in the backlog, or if no messages could be returned + // before the request timeout. For JSON, the response can be entirely + // empty. The Pub/Sub system may return fewer than the `maxMessages` requested + // even if there are more messages available in the backlog. + repeated ReceivedMessage received_messages = 1 + [(google.api.field_behavior) = OPTIONAL]; +} + +// Request for the ModifyAckDeadline method. +message ModifyAckDeadlineRequest { + // Required. The name of the subscription. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + // Required. List of acknowledgment IDs. + repeated string ack_ids = 4 [(google.api.field_behavior) = REQUIRED]; + + // Required. The new ack deadline with respect to the time this request was + // sent to the Pub/Sub system. For example, if the value is 10, the new ack + // deadline will expire 10 seconds after the `ModifyAckDeadline` call was + // made. Specifying zero might immediately make the message available for + // delivery to another subscriber client. This typically results in an + // increase in the rate of message redeliveries (that is, duplicates). + // The minimum deadline you can specify is 0 seconds. + // The maximum deadline you can specify in a single request is 600 seconds + // (10 minutes). + int32 ack_deadline_seconds = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the Acknowledge method. +message AcknowledgeRequest { + // Required. The subscription whose message is being acknowledged. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + // Required. The acknowledgment ID for the messages being acknowledged that + // was returned by the Pub/Sub system in the `Pull` response. Must not be + // empty. + repeated string ack_ids = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `StreamingPull` streaming RPC method. This request is used to +// establish the initial stream as well as to stream acknowledgments and ack +// deadline modifications from the client to the server. +message StreamingPullRequest { + // Required. The subscription for which to initialize the new stream. This + // must be provided in the first request on the stream, and must not be set in + // subsequent requests from client to server. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + // Optional. List of acknowledgment IDs for acknowledging previously received + // messages (received on this stream or a different stream). If an ack ID has + // expired, the corresponding message may be redelivered later. Acknowledging + // a message more than once will not result in an error. If the acknowledgment + // ID is malformed, the stream will be aborted with status `INVALID_ARGUMENT`. + repeated string ack_ids = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The list of new ack deadlines for the IDs listed in + // `modify_deadline_ack_ids`. The size of this list must be the same as the + // size of `modify_deadline_ack_ids`. If it differs the stream will be aborted + // with `INVALID_ARGUMENT`. Each element in this list is applied to the + // element in the same position in `modify_deadline_ack_ids`. The new ack + // deadline is with respect to the time this request was sent to the Pub/Sub + // system. Must be >= 0. For example, if the value is 10, the new ack deadline + // will expire 10 seconds after this request is received. If the value is 0, + // the message is immediately made available for another streaming or + // non-streaming pull request. If the value is < 0 (an error), the stream will + // be aborted with status `INVALID_ARGUMENT`. + repeated int32 modify_deadline_seconds = 3 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. List of acknowledgment IDs whose deadline will be modified based + // on the corresponding element in `modify_deadline_seconds`. This field can + // be used to indicate that more time is needed to process a message by the + // subscriber, or to make the message available for redelivery if the + // processing was interrupted. + repeated string modify_deadline_ack_ids = 4 + [(google.api.field_behavior) = OPTIONAL]; + + // Required. The ack deadline to use for the stream. This must be provided in + // the first request on the stream, but it can also be updated on subsequent + // requests from client to server. The minimum deadline you can specify is 10 + // seconds. The maximum deadline you can specify is 600 seconds (10 minutes). + int32 stream_ack_deadline_seconds = 5 + [(google.api.field_behavior) = REQUIRED]; + + // Optional. A unique identifier that is used to distinguish client instances + // from each other. Only needs to be provided on the initial request. When a + // stream disconnects and reconnects for the same stream, the client_id should + // be set to the same value so that state associated with the old stream can + // be transferred to the new stream. The same client_id should not be used for + // different client instances. + string client_id = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Flow control settings for the maximum number of outstanding + // messages. When there are `max_outstanding_messages` currently sent to the + // streaming pull client that have not yet been acked or nacked, the server + // stops sending more messages. The sending of messages resumes once the + // number of outstanding messages is less than this value. If the value is + // <= 0, there is no limit to the number of outstanding messages. This + // property can only be set on the initial StreamingPullRequest. If it is set + // on a subsequent request, the stream will be aborted with status + // `INVALID_ARGUMENT`. + int64 max_outstanding_messages = 7 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Flow control settings for the maximum number of outstanding + // bytes. When there are `max_outstanding_bytes` or more worth of messages + // currently sent to the streaming pull client that have not yet been acked or + // nacked, the server will stop sending more messages. The sending of messages + // resumes once the number of outstanding bytes is less than this value. If + // the value is <= 0, there is no limit to the number of outstanding bytes. + // This property can only be set on the initial StreamingPullRequest. If it is + // set on a subsequent request, the stream will be aborted with status + // `INVALID_ARGUMENT`. + int64 max_outstanding_bytes = 8 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The protocol version used by the client. This property can only + // be set on the initial StreamingPullRequest. If it is set on a subsequent + // request, the stream will be aborted with status `INVALID_ARGUMENT`. + int64 protocol_version = 10 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response for the `StreamingPull` method. This response is used to stream +// messages from the server to the client. +message StreamingPullResponse { + // Acknowledgment IDs sent in one or more previous requests to acknowledge a + // previously received message. + message AcknowledgeConfirmation { + // Optional. Successfully processed acknowledgment IDs. + repeated string ack_ids = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. List of acknowledgment IDs that were malformed or whose + // acknowledgment deadline has expired. + repeated string invalid_ack_ids = 2 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. List of acknowledgment IDs that were out of order. + repeated string unordered_ack_ids = 3 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. List of acknowledgment IDs that failed processing with + // temporary issues. + repeated string temporary_failed_ack_ids = 4 + [(google.api.field_behavior) = OPTIONAL]; + } + + // Acknowledgment IDs sent in one or more previous requests to modify the + // deadline for a specific message. + message ModifyAckDeadlineConfirmation { + // Optional. Successfully processed acknowledgment IDs. + repeated string ack_ids = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. List of acknowledgment IDs that were malformed or whose + // acknowledgment deadline has expired. + repeated string invalid_ack_ids = 2 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. List of acknowledgment IDs that failed processing with + // temporary issues. + repeated string temporary_failed_ack_ids = 3 + [(google.api.field_behavior) = OPTIONAL]; + } + + // Subscription properties sent as part of the response. + message SubscriptionProperties { + // Optional. True iff exactly once delivery is enabled for this + // subscription. + bool exactly_once_delivery_enabled = 1 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. True iff message ordering is enabled for this subscription. + bool message_ordering_enabled = 2 [(google.api.field_behavior) = OPTIONAL]; + } + + // Optional. Received Pub/Sub messages. + repeated ReceivedMessage received_messages = 1 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. This field will only be set if `enable_exactly_once_delivery` is + // set to `true` and is not guaranteed to be populated. + AcknowledgeConfirmation acknowledge_confirmation = 5 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. This field will only be set if `enable_exactly_once_delivery` is + // set to `true` and is not guaranteed to be populated. + ModifyAckDeadlineConfirmation modify_ack_deadline_confirmation = 3 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Properties associated with this subscription. + SubscriptionProperties subscription_properties = 4 + [(google.api.field_behavior) = OPTIONAL]; +} + +// Request for the `CreateSnapshot` method. +message CreateSnapshotRequest { + // Required. User-provided name for this snapshot. If the name is not provided + // in the request, the server will assign a random name for this snapshot on + // the same project as the subscription. Note that for REST API requests, you + // must specify a name. See the [resource name + // rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). + // Format is `projects/{project}/snapshots/{snap}`. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Snapshot" } + ]; + + // Required. The subscription whose backlog the snapshot retains. + // Specifically, the created snapshot is guaranteed to retain: + // (a) The existing backlog on the subscription. More precisely, this is + // defined as the messages in the subscription's backlog that are + // unacknowledged upon the successful completion of the + // `CreateSnapshot` request; as well as: + // (b) Any messages published to the subscription's topic following the + // successful completion of the CreateSnapshot request. + // Format is `projects/{project}/subscriptions/{sub}`. + string subscription = 2 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + // Optional. See [Creating and managing + // labels](https://cloud.google.com/pubsub/docs/labels). + map labels = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Input only. Immutable. Tag keys/values directly bound to this + // resource. For example: + // "123/environment": "production", + // "123/costCenter": "marketing" + // See https://docs.cloud.google.com/pubsub/docs/tags for more information on + // using tags with Pub/Sub resources. + map tags = 4 [ + (google.api.field_behavior) = INPUT_ONLY, + (google.api.field_behavior) = IMMUTABLE, + (google.api.field_behavior) = OPTIONAL + ]; +} + +// Request for the UpdateSnapshot method. +message UpdateSnapshotRequest { + // Required. The updated snapshot object. + Snapshot snapshot = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Indicates which fields in the provided snapshot to update. + // Must be specified and non-empty. + google.protobuf.FieldMask update_mask = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// A snapshot resource. Snapshots are used in +// [Seek](https://cloud.google.com/pubsub/docs/replay-overview) +// operations, which allow you to manage message acknowledgments in bulk. That +// is, you can set the acknowledgment state of messages in an existing +// subscription to the state captured by a snapshot. +message Snapshot { + option (google.api.resource) = { + type: "pubsub.googleapis.com/Snapshot" + pattern: "projects/{project}/snapshots/{snapshot}" + plural: "snapshots" + singular: "snapshot" + }; + + // Optional. The name of the snapshot. + string name = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The name of the topic from which this snapshot is retaining + // messages. + string topic = 2 [ + (google.api.field_behavior) = OPTIONAL, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Topic" } + ]; + + // Optional. The snapshot is guaranteed to exist up until this time. + // A newly-created snapshot expires no later than 7 days from the time of its + // creation. Its exact lifetime is determined at creation by the existing + // backlog in the source subscription. Specifically, the lifetime of the + // snapshot is `7 days - (age of oldest unacked message in the subscription)`. + // For example, consider a subscription whose oldest unacked message is 3 days + // old. If a snapshot is created from this subscription, the snapshot -- which + // will always capture this 3-day-old backlog as long as the snapshot + // exists -- will expire in 4 days. The service will refuse to create a + // snapshot that would expire in less than 1 hour after creation. + google.protobuf.Timestamp expire_time = 3 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. See [Creating and managing labels] + // (https://cloud.google.com/pubsub/docs/labels). + map labels = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Request for the GetSnapshot method. +message GetSnapshotRequest { + // Required. The name of the snapshot to get. + // Format is `projects/{project}/snapshots/{snap}`. + string snapshot = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Snapshot" } + ]; +} + +// Request for the `ListSnapshots` method. +message ListSnapshotsRequest { + // Required. The name of the project in which to list snapshots. + // Format is `projects/{project-id}`. + string project = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; + + // Optional. Maximum number of snapshots to return. + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The value returned by the last `ListSnapshotsResponse`; indicates + // that this is a continuation of a prior `ListSnapshots` call, and that the + // system should return the next page of data. + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response for the `ListSnapshots` method. +message ListSnapshotsResponse { + // Optional. The resulting snapshots. + repeated Snapshot snapshots = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If not empty, indicates that there may be more snapshot that + // match the request; this value should be passed in a new + // `ListSnapshotsRequest`. + string next_page_token = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Request for the `DeleteSnapshot` method. +message DeleteSnapshotRequest { + // Required. The name of the snapshot to delete. + // Format is `projects/{project}/snapshots/{snap}`. + string snapshot = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Snapshot" } + ]; +} + +// Request for the `Seek` method. +message SeekRequest { + // Required. The subscription to affect. + string subscription = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Subscription" + } + ]; + + oneof target { + // Optional. The time to seek to. + // Messages retained in the subscription that were published before this + // time are marked as acknowledged, and messages retained in the + // subscription that were published after this time are marked as + // unacknowledged. Note that this operation affects only those messages + // retained in the subscription (configured by the combination of + // `message_retention_duration` and `retain_acked_messages`). For example, + // if `time` corresponds to a point before the message retention + // window (or to a point before the system's notion of the subscription + // creation time), only retained messages will be marked as unacknowledged, + // and already-expunged messages will not be restored. + google.protobuf.Timestamp time = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The snapshot to seek to. The snapshot's topic must be the same + // as that of the provided subscription. Format is + // `projects/{project}/snapshots/{snap}`. + string snapshot = 3 [ + (google.api.field_behavior) = OPTIONAL, + (google.api.resource_reference) = { + type: "pubsub.googleapis.com/Snapshot" + } + ]; + } +} + +// Response for the `Seek` method (this response is empty). +message SeekResponse {} diff --git a/java-pubsub/proto-google-cloud-pubsub-v1/src/main/proto/google/pubsub/v1/schema.proto b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/proto/google/pubsub/v1/schema.proto new file mode 100644 index 000000000000..48a6b2aee3e1 --- /dev/null +++ b/java-pubsub/proto-google-cloud-pubsub-v1/src/main/proto/google/pubsub/v1/schema.proto @@ -0,0 +1,409 @@ +// Copyright 2026 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.pubsub.v1; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.PubSub.V1"; +option go_package = "cloud.google.com/go/pubsub/v2/apiv1/pubsubpb;pubsubpb"; +option java_multiple_files = true; +option java_outer_classname = "SchemaProto"; +option java_package = "com.google.pubsub.v1"; +option php_namespace = "Google\\Cloud\\PubSub\\V1"; +option ruby_package = "Google::Cloud::PubSub::V1"; + +// Service for doing schema-related operations. +service SchemaService { + option (google.api.default_host) = "pubsub.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform," + "https://www.googleapis.com/auth/pubsub"; + + // Creates a schema. + rpc CreateSchema(CreateSchemaRequest) returns (Schema) { + option (google.api.http) = { + post: "/v1/{parent=projects/*}/schemas" + body: "schema" + }; + option (google.api.method_signature) = "parent,schema,schema_id"; + } + + // Gets a schema. + rpc GetSchema(GetSchemaRequest) returns (Schema) { + option (google.api.http) = { + get: "/v1/{name=projects/*/schemas/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Lists schemas in a project. + rpc ListSchemas(ListSchemasRequest) returns (ListSchemasResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*}/schemas" + }; + option (google.api.method_signature) = "parent"; + } + + // Lists all schema revisions for the named schema. + rpc ListSchemaRevisions(ListSchemaRevisionsRequest) + returns (ListSchemaRevisionsResponse) { + option (google.api.http) = { + get: "/v1/{name=projects/*/schemas/*}:listRevisions" + }; + option (google.api.method_signature) = "name"; + } + + // Commits a new schema revision to an existing schema. + rpc CommitSchema(CommitSchemaRequest) returns (Schema) { + option (google.api.http) = { + post: "/v1/{name=projects/*/schemas/*}:commit" + body: "*" + }; + option (google.api.method_signature) = "name,schema"; + } + + // Creates a new schema revision that is a copy of the provided revision_id. + rpc RollbackSchema(RollbackSchemaRequest) returns (Schema) { + option (google.api.http) = { + post: "/v1/{name=projects/*/schemas/*}:rollback" + body: "*" + }; + option (google.api.method_signature) = "name,revision_id"; + } + + // Deletes a specific schema revision. + rpc DeleteSchemaRevision(DeleteSchemaRevisionRequest) returns (Schema) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/schemas/*}:deleteRevision" + }; + option (google.api.method_signature) = "name,revision_id"; + } + + // Deletes a schema. + rpc DeleteSchema(DeleteSchemaRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/schemas/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Validates a schema. + rpc ValidateSchema(ValidateSchemaRequest) returns (ValidateSchemaResponse) { + option (google.api.http) = { + post: "/v1/{parent=projects/*}/schemas:validate" + body: "*" + }; + option (google.api.method_signature) = "parent,schema"; + } + + // Validates a message against a schema. + rpc ValidateMessage(ValidateMessageRequest) + returns (ValidateMessageResponse) { + option (google.api.http) = { + post: "/v1/{parent=projects/*}/schemas:validateMessage" + body: "*" + }; + } +} + +// A schema resource. +message Schema { + option (google.api.resource) = { + type: "pubsub.googleapis.com/Schema" + pattern: "projects/{project}/schemas/{schema}" + }; + + // Possible schema definition types. + enum Type { + // Default value. This value is unused. + TYPE_UNSPECIFIED = 0; + + // A Protocol Buffer schema definition. + PROTOCOL_BUFFER = 1; + + // An Avro schema definition. + AVRO = 2; + } + + // Required. Name of the schema. + // Format is `projects/{project}/schemas/{schema}`. + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // The type of the schema definition. + Type type = 2; + + // The definition of the schema. This should contain a string representing + // the full definition of the schema that is a valid schema definition of + // the type specified in `type`. + string definition = 3; + + // Output only. Immutable. The revision ID of the schema. + string revision_id = 4 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.field_behavior) = OUTPUT_ONLY + ]; + + // Output only. The timestamp that the revision was created. + google.protobuf.Timestamp revision_create_time = 6 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// View of Schema object fields to be returned by GetSchema and ListSchemas. +enum SchemaView { + // The default / unset value. + // The API will default to the BASIC view. + SCHEMA_VIEW_UNSPECIFIED = 0; + + // Include the name and type of the schema, but not the definition. + BASIC = 1; + + // Include all Schema object fields. + FULL = 2; +} + +// Request for the CreateSchema method. +message CreateSchemaRequest { + // Required. The name of the project in which to create the schema. + // Format is `projects/{project-id}`. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "pubsub.googleapis.com/Schema" + } + ]; + + // Required. The schema object to create. + // + // This schema's `name` parameter is ignored. The schema object returned + // by CreateSchema will have a `name` made using the given `parent` and + // `schema_id`. + Schema schema = 2 [(google.api.field_behavior) = REQUIRED]; + + // The ID to use for the schema, which will become the final component of + // the schema's resource name. + // + // See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for + // resource name constraints. + string schema_id = 3; +} + +// Request for the GetSchema method. +message GetSchemaRequest { + // Required. The name of the schema to get. + // Format is `projects/{project}/schemas/{schema}`. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Schema" } + ]; + + // The set of fields to return in the response. If not set, returns a Schema + // with all fields filled out. Set to `BASIC` to omit the `definition`. + SchemaView view = 2; +} + +// Request for the `ListSchemas` method. +message ListSchemasRequest { + // Required. The name of the project in which to list schemas. + // Format is `projects/{project-id}`. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; + + // The set of Schema fields to return in the response. If not set, returns + // Schemas with `name` and `type`, but not `definition`. Set to `FULL` to + // retrieve all fields. + SchemaView view = 2; + + // Maximum number of schemas to return. + int32 page_size = 3; + + // The value returned by the last `ListSchemasResponse`; indicates that + // this is a continuation of a prior `ListSchemas` call, and that the + // system should return the next page of data. + string page_token = 4; +} + +// Response for the `ListSchemas` method. +message ListSchemasResponse { + // The resulting schemas. + repeated Schema schemas = 1; + + // If not empty, indicates that there may be more schemas that match the + // request; this value should be passed in a new `ListSchemasRequest`. + string next_page_token = 2; +} + +// Request for the `ListSchemaRevisions` method. +message ListSchemaRevisionsRequest { + // Required. The name of the schema to list revisions for. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Schema" } + ]; + + // The set of Schema fields to return in the response. If not set, returns + // Schemas with `name` and `type`, but not `definition`. Set to `FULL` to + // retrieve all fields. + SchemaView view = 2; + + // The maximum number of revisions to return per page. + int32 page_size = 3; + + // The page token, received from a previous ListSchemaRevisions call. + // Provide this to retrieve the subsequent page. + string page_token = 4; +} + +// Response for the `ListSchemaRevisions` method. +message ListSchemaRevisionsResponse { + // The revisions of the schema. + repeated Schema schemas = 1; + + // A token that can be sent as `page_token` to retrieve the next page. + // If this field is empty, there are no subsequent pages. + string next_page_token = 2; +} + +// Request for CommitSchema method. +message CommitSchemaRequest { + // Required. The name of the schema we are revising. + // Format is `projects/{project}/schemas/{schema}`. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Schema" } + ]; + + // Required. The schema revision to commit. + Schema schema = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `RollbackSchema` method. +message RollbackSchemaRequest { + // Required. The schema being rolled back with revision id. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Schema" } + ]; + + // Required. The revision ID to roll back to. + // It must be a revision of the same schema. + // + // Example: c7cfa2a8 + string revision_id = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Request for the `DeleteSchemaRevision` method. +message DeleteSchemaRevisionRequest { + // Required. The name of the schema revision to be deleted, with a revision ID + // explicitly included. + // + // Example: `projects/123/schemas/my-schema@c7cfa2a8` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Schema" } + ]; + + // Optional. This field is deprecated and should not be used for specifying + // the revision ID. The revision ID should be specified via the `name` + // parameter. + string revision_id = 2 + [deprecated = true, (google.api.field_behavior) = OPTIONAL]; +} + +// Request for the `DeleteSchema` method. +message DeleteSchemaRequest { + // Required. Name of the schema to delete. + // Format is `projects/{project}/schemas/{schema}`. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Schema" } + ]; +} + +// Request for the `ValidateSchema` method. +message ValidateSchemaRequest { + // Required. The name of the project in which to validate schemas. + // Format is `projects/{project-id}`. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; + + // Required. The schema object to validate. + Schema schema = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Response for the `ValidateSchema` method. +// Empty for now. +message ValidateSchemaResponse {} + +// Request for the `ValidateMessage` method. +message ValidateMessageRequest { + // Required. The name of the project in which to validate schemas. + // Format is `projects/{project-id}`. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "cloudresourcemanager.googleapis.com/Project" + } + ]; + + oneof schema_spec { + // Name of the schema against which to validate. + // + // Format is `projects/{project}/schemas/{schema}`. + string name = 2 [ + (google.api.resource_reference) = { type: "pubsub.googleapis.com/Schema" } + ]; + + // Ad-hoc schema against which to validate + Schema schema = 3; + } + + // Message to validate against the provided `schema_spec`. + bytes message = 4; + + // The encoding expected for messages + Encoding encoding = 5; +} + +// Response for the `ValidateMessage` method. +// Empty for now. +message ValidateMessageResponse {} + +// Possible encoding types for messages. +enum Encoding { + // Unspecified + ENCODING_UNSPECIFIED = 0; + + // JSON encoding + JSON = 1; + + // Binary encoding, as defined by the schema type. For some schema types, + // binary encoding may not be available. + BINARY = 2; +} diff --git a/java-pubsub/samples/README.md b/java-pubsub/samples/README.md new file mode 100644 index 000000000000..4390e7ea69fc --- /dev/null +++ b/java-pubsub/samples/README.md @@ -0,0 +1,25 @@ +# How to run the samples + +1. Clone this repo and navigate to the `snippets` directory. + ```shell + git clone https://github.com/googleapis/java-pubsub + cd java-pubsub/samples/snippets + ``` + +1. [Obtain GCP user access credentials] via a web flow for your application. + ```shell + gcloud auth application-default login + ``` + +1. With [Maven] installed, run a sample that has the to-do section completed: + ```shell + mvn clean compile exec:java -Dexec.mainClass=pubsub.CreateTopicExample + ``` + +1. To run the samples test: + ```shell + mvn -Dtest=pubsub.AdminIT test + ``` + +[Maven]: https://maven.apache.org/ +[Obtain GCP user access credentials]: https://cloud.google.com/sdk/gcloud/reference/auth/application-default/login \ No newline at end of file diff --git a/java-pubsub/samples/checkstyle-suppressions.xml b/java-pubsub/samples/checkstyle-suppressions.xml new file mode 100644 index 000000000000..a1bfbb84ae12 --- /dev/null +++ b/java-pubsub/samples/checkstyle-suppressions.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/java-pubsub/samples/install-without-bom/pom.xml b/java-pubsub/samples/install-without-bom/pom.xml new file mode 100644 index 000000000000..f5f4ee888991 --- /dev/null +++ b/java-pubsub/samples/install-without-bom/pom.xml @@ -0,0 +1,163 @@ + + + + 4.0.0 + com.google.cloud + pubsub-install-without-bom + jar + Google Cloud Pub/Sub Install Without Bom + https://github.com/googleapis/java-pubsub + + + + com.google.cloud.samples + shared-configuration + 1.2.2 + + + + 1.8 + 1.8 + UTF-8 + + + + + + + com.google.cloud + google-cloud-pubsub + 1.148.0 + + + + + org.apache.avro + avro + 1.11.4 + compile + + + org.xerial.snappy + snappy-java + 1.1.10.8 + + + + junit + junit + 4.13.2 + test + + + com.google.truth + truth + 1.4.5 + test + + + com.google.protobuf + protobuf-java-util + 4.33.5 + + + com.google.cloud + google-cloud-core + 2.65.0 + tests + + + com.google.cloud + google-cloud-bigquery + 2.59.0 + + + com.google.cloud + google-cloud-storage + 2.63.0 + + + com.google.cloud.opentelemetry + exporter-trace + 0.36.0 + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.6.1 + + + add-snippets-source + + add-source + + + + ../snippets/src/main/java + + + + + add-snippets-resources + + add-resource + + + + + ../snippets/src/main/resources + + + + + + add-snippets-tests + + add-test-source + + + + ../snippets/src/test/java + + + + + add-snippets-tests-resource + + add-test-resource + + + + + ../snippets/src/test/resources> + + + + + + + + + diff --git a/java-pubsub/samples/pom.xml b/java-pubsub/samples/pom.xml new file mode 100644 index 000000000000..b63314dd54af --- /dev/null +++ b/java-pubsub/samples/pom.xml @@ -0,0 +1,84 @@ + + + + 4.0.0 + com.google.cloud + google-cloud-pubsub-samples + 0.0.1-SNAPSHOT + pom + Google Cloud Pub/Sub Samples Parent + https://github.com/googleapis/java-pubsub + + Java idiomatic client for Google Cloud Platform services. + + + + + com.google.cloud.samples + shared-configuration + 1.2.2 + + + + 1.8 + 1.8 + UTF-8 + + + + install-without-bom + snapshot + snippets + + + + + + org.apache.maven.plugins + maven-deploy-plugin + 3.1.4 + + true + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.7.0 + + true + + + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.6.0 + + checkstyle-suppressions.xml + + + + + diff --git a/java-pubsub/samples/snapshot/pom.xml b/java-pubsub/samples/snapshot/pom.xml new file mode 100644 index 000000000000..b96ea4c331c1 --- /dev/null +++ b/java-pubsub/samples/snapshot/pom.xml @@ -0,0 +1,162 @@ + + + + 4.0.0 + com.google.cloud + pubsub-snapshot + jar + Google Cloud Pub/Sub Snapshot Samples + https://github.com/googleapis/java-pubsub + + + + com.google.cloud.samples + shared-configuration + 1.2.2 + + + + 1.8 + 1.8 + UTF-8 + + + + + + com.google.cloud + google-cloud-pubsub + 1.149.1-SNAPSHOT + + + + + org.apache.avro + avro + 1.11.4 + compile + + + org.xerial.snappy + snappy-java + 1.1.10.8 + + + com.google.protobuf + protobuf-java-util + 4.33.5 + + + + junit + junit + 4.13.2 + test + + + com.google.truth + truth + 1.4.5 + test + + + com.google.cloud + google-cloud-core + 2.65.0 + tests + + + com.google.cloud + google-cloud-bigquery + 2.59.0 + + + com.google.cloud + google-cloud-storage + 2.63.0 + + + com.google.cloud.opentelemetry + exporter-trace + 0.36.0 + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.6.1 + + + add-snippets-source + + add-source + + + + ../snippets/src/main/java + + + + + add-snippets-resources + + add-resource + + + + + ../snippets/src/main/resources + + + + + + add-snippets-tests + + add-test-source + + + + ../snippets/src/test/java + + + + + add-snippets-tests-resource + + add-test-resource + + + + + ../snippets/src/test/resources> + + + + + + + + + diff --git a/java-pubsub/samples/snippets/pom.xml b/java-pubsub/samples/snippets/pom.xml new file mode 100644 index 000000000000..42f69ff4a90a --- /dev/null +++ b/java-pubsub/samples/snippets/pom.xml @@ -0,0 +1,112 @@ + + + + 4.0.0 + com.google.cloud + pubsub-snippets + jar + Google Cloud Pub/Sub Snippets + https://github.com/googleapis/java-pubsub + + + + com.google.cloud.samples + shared-configuration + 1.2.2 + + + + 1.8 + 1.8 + UTF-8 + + + + + + + + com.google.cloud + libraries-bom + 26.76.0 + pom + import + + + + + + + com.google.cloud + google-cloud-pubsub + + + + + com.google.cloud + google-cloud-bigquery + + + com.google.cloud + google-cloud-storage + + + com.google.cloud.opentelemetry + exporter-trace + 0.36.0 + + + org.apache.avro + avro + 1.11.4 + + + org.xerial.snappy + snappy-java + 1.1.10.8 + + + com.google.protobuf + protobuf-java-util + 4.33.5 + + + + junit + junit + 4.13.2 + test + + + com.google.truth + truth + 1.4.5 + test + + + com.google.cloud + google-cloud-core + 2.65.0 + tests + + + + + diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CommitAvroSchemaExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CommitAvroSchemaExample.java new file mode 100644 index 000000000000..8f24e75a26a6 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CommitAvroSchemaExample.java @@ -0,0 +1,69 @@ +/* + * Copyright 2023 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. + */ + +package pubsub; + +// [START pubsub_commit_avro_schema] + +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.pubsub.v1.SchemaServiceClient; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.SchemaName; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class CommitAvroSchemaExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String schemaId = "your-schema-id"; + String avscFile = "path/to/an/avro/schema/file/(.avsc)/formatted/in/json"; + + commitAvroSchemaExample(projectId, schemaId, avscFile); + } + + public static Schema commitAvroSchemaExample(String projectId, String schemaId, String avscFile) + throws IOException { + + ProjectName projectName = ProjectName.of(projectId); + SchemaName schemaName = SchemaName.of(projectId, schemaId); + + // Read an Avro schema file formatted in JSON as a string. + String avscSource = new String(Files.readAllBytes(Paths.get(avscFile))); + + try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) { + + Schema schema = + schemaServiceClient.commitSchema( + schemaName.toString(), + Schema.newBuilder() + .setName(schemaName.toString()) + .setType(Schema.Type.AVRO) + .setDefinition(avscSource) + .build()); + + System.out.println("Committed a schema using an Avro schema:\n" + schema); + return schema; + } catch (NotFoundException e) { + System.out.println(schemaName + "does not exist."); + return null; + } + } +} +// [END pubsub_commit_avro_schema] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CommitProtoSchemaExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CommitProtoSchemaExample.java new file mode 100644 index 000000000000..e609b9a5fd96 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CommitProtoSchemaExample.java @@ -0,0 +1,69 @@ +/* + * Copyright 2023 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. + */ + +package pubsub; + +// [START pubsub_commit_proto_schema] + +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.pubsub.v1.SchemaServiceClient; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.SchemaName; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class CommitProtoSchemaExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String schemaId = "your-schema-id"; + String protoFile = "path/to/a/proto/file/(.proto)/formatted/in/protocol/buffers"; + + commitProtoSchemaExample(projectId, schemaId, protoFile); + } + + public static Schema commitProtoSchemaExample(String projectId, String schemaId, String protoFile) + throws IOException { + + ProjectName projectName = ProjectName.of(projectId); + SchemaName schemaName = SchemaName.of(projectId, schemaId); + + // Read a proto file as a string. + String protoSource = new String(Files.readAllBytes(Paths.get(protoFile))); + + try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) { + + Schema schema = + schemaServiceClient.commitSchema( + schemaName.toString(), + Schema.newBuilder() + .setName(schemaName.toString()) + .setType(Schema.Type.PROTOCOL_BUFFER) + .setDefinition(protoSource) + .build()); + + System.out.println("Committed a schema using a protobuf schema:\n" + schema); + return schema; + } catch (NotFoundException e) { + System.out.println(schemaName + "does not exist."); + return null; + } + } +} +// [END pubsub_commit_proto_schema] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateAvroSchemaExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateAvroSchemaExample.java new file mode 100644 index 000000000000..393b128b3b26 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateAvroSchemaExample.java @@ -0,0 +1,70 @@ +/* + * Copyright 2021 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. + */ + +package pubsub; + +// [START pubsub_create_avro_schema] + +import com.google.api.gax.rpc.AlreadyExistsException; +import com.google.cloud.pubsub.v1.SchemaServiceClient; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.SchemaName; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class CreateAvroSchemaExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String schemaId = "your-schema-id"; + String avscFile = "path/to/an/avro/schema/file/(.avsc)/formatted/in/json"; + + createAvroSchemaExample(projectId, schemaId, avscFile); + } + + public static Schema createAvroSchemaExample(String projectId, String schemaId, String avscFile) + throws IOException { + + ProjectName projectName = ProjectName.of(projectId); + SchemaName schemaName = SchemaName.of(projectId, schemaId); + + // Read an Avro schema file formatted in JSON as a string. + String avscSource = new String(Files.readAllBytes(Paths.get(avscFile))); + + try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) { + + Schema schema = + schemaServiceClient.createSchema( + projectName, + Schema.newBuilder() + .setName(schemaName.toString()) + .setType(Schema.Type.AVRO) + .setDefinition(avscSource) + .build(), + schemaId); + + System.out.println("Created a schema using an Avro schema:\n" + schema); + return schema; + } catch (AlreadyExistsException e) { + System.out.println(schemaName + "already exists."); + return null; + } + } +} +// [END pubsub_create_avro_schema] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateBigQuerySubscriptionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateBigQuerySubscriptionExample.java new file mode 100644 index 000000000000..002b6ef1f5ab --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateBigQuerySubscriptionExample.java @@ -0,0 +1,62 @@ +/* + * Copyright 2022 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. + */ + +package pubsub; + +// [START pubsub_create_bigquery_subscription] +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.pubsub.v1.BigQueryConfig; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.Subscription; +import java.io.IOException; + +public class CreateBigQuerySubscriptionExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + String subscriptionId = "your-subscription-id"; + String bigqueryTableId = "your-project.your-dataset.your-table"; + + createBigQuerySubscription(projectId, topicId, subscriptionId, bigqueryTableId); + } + + public static void createBigQuerySubscription( + String projectId, String topicId, String subscriptionId, String bigqueryTableId) + throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + BigQueryConfig bigqueryConfig = + BigQueryConfig.newBuilder().setTable(bigqueryTableId).setWriteMetadata(true).build(); + + Subscription subscription = + subscriptionAdminClient.createSubscription( + Subscription.newBuilder() + .setName(subscriptionName.toString()) + .setTopic(topicName.toString()) + .setBigqueryConfig(bigqueryConfig) + .build()); + + System.out.println("Created a BigQuery subscription: " + subscription.getAllFields()); + } + } +} +// [END pubsub_create_bigquery_subscription] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateCloudStorageSubscriptionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateCloudStorageSubscriptionExample.java new file mode 100644 index 000000000000..654ba3857876 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateCloudStorageSubscriptionExample.java @@ -0,0 +1,78 @@ +/* + * Copyright 2022 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. + */ + +package pubsub; + +// [START pubsub_create_cloud_storage_subscription] +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.protobuf.Duration; +import com.google.pubsub.v1.CloudStorageConfig; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.Subscription; +import java.io.IOException; + +public class CreateCloudStorageSubscriptionExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + String subscriptionId = "your-subscription-id"; + String bucket = "your-bucket"; + String filenamePrefix = "log_events_"; + String filenameSuffix = ".text"; + Duration maxDuration = Duration.newBuilder().setSeconds(300).build(); + + createCloudStorageSubscription( + projectId, topicId, subscriptionId, bucket, filenamePrefix, filenameSuffix, maxDuration); + } + + public static void createCloudStorageSubscription( + String projectId, + String topicId, + String subscriptionId, + String bucket, + String filenamePrefix, + String filenameSuffix, + Duration maxDuration) + throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + CloudStorageConfig cloudStorageConfig = + CloudStorageConfig.newBuilder() + .setBucket(bucket) + .setFilenamePrefix(filenamePrefix) + .setFilenameSuffix(filenameSuffix) + .setMaxDuration(maxDuration) + .build(); + + Subscription subscription = + subscriptionAdminClient.createSubscription( + Subscription.newBuilder() + .setName(subscriptionName.toString()) + .setTopic(topicName.toString()) + .setCloudStorageConfig(cloudStorageConfig) + .build()); + + System.out.println("Created a CloudStorage subscription: " + subscription.getAllFields()); + } + } +} +// [END pubsub_create_cloud_storage_subscription] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateProtoSchemaExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateProtoSchemaExample.java new file mode 100644 index 000000000000..e7b5bf113e07 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateProtoSchemaExample.java @@ -0,0 +1,70 @@ +/* + * Copyright 2021 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. + */ + +package pubsub; + +// [START pubsub_create_proto_schema] + +import com.google.api.gax.rpc.AlreadyExistsException; +import com.google.cloud.pubsub.v1.SchemaServiceClient; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.SchemaName; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class CreateProtoSchemaExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String schemaId = "your-schema-id"; + String protoFile = "path/to/a/proto/file/(.proto)/formatted/in/protocol/buffers"; + + createProtoSchemaExample(projectId, schemaId, protoFile); + } + + public static Schema createProtoSchemaExample(String projectId, String schemaId, String protoFile) + throws IOException { + + ProjectName projectName = ProjectName.of(projectId); + SchemaName schemaName = SchemaName.of(projectId, schemaId); + + // Read a proto file as a string. + String protoSource = new String(Files.readAllBytes(Paths.get(protoFile))); + + try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) { + + Schema schema = + schemaServiceClient.createSchema( + projectName, + Schema.newBuilder() + .setName(schemaName.toString()) + .setType(Schema.Type.PROTOCOL_BUFFER) + .setDefinition(protoSource) + .build(), + schemaId); + + System.out.println("Created a schema using a protobuf schema:\n" + schema); + return schema; + } catch (AlreadyExistsException e) { + System.out.println(schemaName + "already exists."); + return null; + } + } +} +// [END pubsub_create_proto_schema] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreatePullSubscriptionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreatePullSubscriptionExample.java new file mode 100644 index 000000000000..e58fd621e2c6 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreatePullSubscriptionExample.java @@ -0,0 +1,52 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_create_pull_subscription] + +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.pubsub.v1.PushConfig; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class CreatePullSubscriptionExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + String topicId = "your-topic-id"; + + createPullSubscriptionExample(projectId, subscriptionId, topicId); + } + + public static void createPullSubscriptionExample( + String projectId, String subscriptionId, String topicId) throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + SubscriptionName subscriptionName = SubscriptionName.of(projectId, subscriptionId); + // Create a pull subscription with default acknowledgement deadline of 10 seconds. + // Messages not successfully acknowledged within 10 seconds will get resent by the server. + Subscription subscription = + subscriptionAdminClient.createSubscription( + subscriptionName, topicName, PushConfig.getDefaultInstance(), 10); + System.out.println("Created pull subscription: " + subscription.getName()); + } + } +} +// [END pubsub_create_pull_subscription] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreatePushSubscriptionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreatePushSubscriptionExample.java new file mode 100644 index 000000000000..b77795290209 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreatePushSubscriptionExample.java @@ -0,0 +1,55 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_create_push_subscription] + +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.pubsub.v1.PushConfig; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class CreatePushSubscriptionExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + String topicId = "your-topic-id"; + String pushEndpoint = "https://my-test-project.appspot.com/push"; + + createPushSubscriptionExample(projectId, subscriptionId, topicId, pushEndpoint); + } + + public static void createPushSubscriptionExample( + String projectId, String subscriptionId, String topicId, String pushEndpoint) + throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + SubscriptionName subscriptionName = SubscriptionName.of(projectId, subscriptionId); + PushConfig pushConfig = PushConfig.newBuilder().setPushEndpoint(pushEndpoint).build(); + + // Create a push subscription with default acknowledgement deadline of 10 seconds. + // Messages not successfully acknowledged within 10 seconds will get resent by the server. + Subscription subscription = + subscriptionAdminClient.createSubscription(subscriptionName, topicName, pushConfig, 10); + System.out.println("Created push subscription: " + subscription.getName()); + } + } +} +// [END pubsub_create_push_subscription] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithDeadLetterPolicyExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithDeadLetterPolicyExample.java new file mode 100644 index 000000000000..d7cb5d658357 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithDeadLetterPolicyExample.java @@ -0,0 +1,85 @@ +/* + * Copyright 2020 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. + */ + +package pubsub; + +// [START pubsub_dead_letter_create_subscription] +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.pubsub.v1.DeadLetterPolicy; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.Subscription; +import java.io.IOException; + +public class CreateSubscriptionWithDeadLetterPolicyExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // This is the subscription you want to create with a dead letter policy. + String subscriptionId = "your-subscription-id"; + // This is an existing topic that you want to attach the subscription with dead letter policy + // to. + String topicId = "your-topic-id"; + // This is an existing topic that the subscription with dead letter policy forwards dead letter + // messages to. + String deadLetterTopicId = "your-dead-letter-topic-id"; + + CreateSubscriptionWithDeadLetterPolicyExample.createSubscriptionWithDeadLetterPolicyExample( + projectId, subscriptionId, topicId, deadLetterTopicId); + } + + public static void createSubscriptionWithDeadLetterPolicyExample( + String projectId, String subscriptionId, String topicId, String deadLetterTopicId) + throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + ProjectTopicName deadLetterTopicName = ProjectTopicName.of(projectId, deadLetterTopicId); + + DeadLetterPolicy deadLetterPolicy = + DeadLetterPolicy.newBuilder() + .setDeadLetterTopic(deadLetterTopicName.toString()) + // The maximum number of times that the service attempts to deliver a + // message before forwarding it to the dead letter topic. Must be [5-100]. + .setMaxDeliveryAttempts(10) + .build(); + + Subscription request = + Subscription.newBuilder() + .setName(subscriptionName.toString()) + .setTopic(topicName.toString()) + .setDeadLetterPolicy(deadLetterPolicy) + .build(); + + Subscription subscription = subscriptionAdminClient.createSubscription(request); + + System.out.println("Created subscription: " + subscription.getName()); + System.out.println( + "It will forward dead letter messages to: " + + subscription.getDeadLetterPolicy().getDeadLetterTopic()); + System.out.println( + "After " + + subscription.getDeadLetterPolicy().getMaxDeliveryAttempts() + + " delivery attempts."); + // Remember to attach a subscription to the dead letter topic because + // messages published to a topic with no subscriptions are lost. + } + } +} +// [END pubsub_dead_letter_create_subscription] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithExactlyOnceDelivery.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithExactlyOnceDelivery.java new file mode 100644 index 000000000000..e5f4a0e92909 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithExactlyOnceDelivery.java @@ -0,0 +1,59 @@ +/* + * Copyright 2022 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. + */ + +package pubsub; + +// [START pubsub_create_subscription_with_exactly_once_delivery] +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.Subscription; +import java.io.IOException; + +public class CreateSubscriptionWithExactlyOnceDelivery { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + String subscriptionId = "your-subscription-id"; + + createSubscriptionWithExactlyOnceDeliveryExample(projectId, topicId, subscriptionId); + } + + public static void createSubscriptionWithExactlyOnceDeliveryExample( + String projectId, String topicId, String subscriptionId) throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + Subscription subscription = + subscriptionAdminClient.createSubscription( + Subscription.newBuilder() + .setName(subscriptionName.toString()) + .setTopic(topicName.toString()) + // Enable exactly once delivery in the subscription. + .setEnableExactlyOnceDelivery(true) + .build()); + + System.out.println( + "Created a subscription with exactly once delivery enabled: " + + subscription.getAllFields()); + } + } +} +// [END pubsub_create_subscription_with_exactly_once_delivery] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithFiltering.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithFiltering.java new file mode 100644 index 000000000000..40bbac03402c --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithFiltering.java @@ -0,0 +1,59 @@ +/* + * Copyright 2020 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. + */ + +package pubsub; + +// [START pubsub_create_subscription_with_filter] +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.Subscription; +import java.io.IOException; + +public class CreateSubscriptionWithFiltering { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + String subscriptionId = "your-subscription-id"; + String filter = "attributes.author=\"unknown\""; + + createSubscriptionWithFilteringExample(projectId, topicId, subscriptionId, filter); + } + + public static void createSubscriptionWithFilteringExample( + String projectId, String topicId, String subscriptionId, String filter) throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + Subscription subscription = + subscriptionAdminClient.createSubscription( + Subscription.newBuilder() + .setName(subscriptionName.toString()) + .setTopic(topicName.toString()) + // Receive messages with attribute key "author" and value "unknown". + .setFilter(filter) + .build()); + + System.out.println( + "Created a subscription with filtering enabled: " + subscription.getAllFields()); + } + } +} +// [END pubsub_create_subscription_with_filter] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithOrdering.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithOrdering.java new file mode 100644 index 000000000000..6f549e764221 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithOrdering.java @@ -0,0 +1,57 @@ +/* + * Copyright 2020 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. + */ + +package pubsub; + +// [START pubsub_enable_subscription_ordering] +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.Subscription; +import java.io.IOException; + +public class CreateSubscriptionWithOrdering { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + String subscriptionId = "your-subscription-id"; + + createSubscriptionWithOrderingExample(projectId, topicId, subscriptionId); + } + + public static void createSubscriptionWithOrderingExample( + String projectId, String topicId, String subscriptionId) throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + Subscription subscription = + subscriptionAdminClient.createSubscription( + Subscription.newBuilder() + .setName(subscriptionName.toString()) + .setTopic(topicName.toString()) + // Set message ordering to true for ordered messages in the subscription. + .setEnableMessageOrdering(true) + .build()); + + System.out.println("Created a subscription with ordering: " + subscription.getAllFields()); + } + } +} +// [END pubsub_enable_subscription_ordering] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithSmtExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithSmtExample.java new file mode 100644 index 000000000000..53516c54099c --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateSubscriptionWithSmtExample.java @@ -0,0 +1,74 @@ +/* + * Copyright 2025 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. + */ + +package pubsub; + +// [START pubsub_create_subscription_with_smt] +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.pubsub.v1.JavaScriptUDF; +import com.google.pubsub.v1.MessageTransform; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.Subscription; +import java.io.IOException; + +public class CreateSubscriptionWithSmtExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + String subscriptionId = "your-subscription-id"; + + createSubscriptionWithSmtExample(projectId, topicId, subscriptionId); + } + + public static void createSubscriptionWithSmtExample( + String projectId, String topicId, String subscriptionId) throws IOException { + + // UDF that removes the 'ssn' field, if present + String code = + "function redactSSN(message, metadata) {" + + " const data = JSON.parse(message.data);" + + " delete data['ssn'];" + + " message.data = JSON.stringify(data);" + + " return message;" + + "}"; + String functionName = "redactSSN"; + + JavaScriptUDF udf = + JavaScriptUDF.newBuilder().setCode(code).setFunctionName(functionName).build(); + MessageTransform transform = MessageTransform.newBuilder().setJavascriptUdf(udf).build(); + + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + Subscription subscription = + subscriptionAdminClient.createSubscription( + Subscription.newBuilder() + .setName(subscriptionName.toString()) + .setTopic(topicName.toString()) + // Add the UDF message transform + .addMessageTransforms(transform) + .build()); + + System.out.println("Created subscription with SMT: " + subscription.getAllFields()); + } + } +} +// [END pubsub_create_subscription_with_smt] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicExample.java new file mode 100644 index 000000000000..f002ec83768f --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicExample.java @@ -0,0 +1,45 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_create_topic] +// [START pubsub_quickstart_create_topic] + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class CreateTopicExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + createTopicExample(projectId, topicId); + } + + public static void createTopicExample(String projectId, String topicId) throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + Topic topic = topicAdminClient.createTopic(topicName); + System.out.println("Created topic: " + topic.getName()); + } + } +} +// [END pubsub_create_topic] +// [END pubsub_quickstart_create_topic] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithAwsMskIngestionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithAwsMskIngestionExample.java new file mode 100644 index 000000000000..52aed57dd4e6 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithAwsMskIngestionExample.java @@ -0,0 +1,74 @@ +/* + * Copyright 2025 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. + */ + +package pubsub; + +// [START pubsub_create_topic_with_aws_msk_ingestion] + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.IngestionDataSourceSettings; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class CreateTopicWithAwsMskIngestionExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + // AWS MSK ingestion settings. + String clusterArn = "cluster-arn"; + String mskTopic = "msk-topic"; + String awsRoleArn = "aws-role-arn"; + String gcpServiceAccount = "gcp-service-account"; + + createTopicWithAwsMskIngestionExample( + projectId, topicId, clusterArn, mskTopic, awsRoleArn, gcpServiceAccount); + } + + public static void createTopicWithAwsMskIngestionExample( + String projectId, + String topicId, + String clusterArn, + String mskTopic, + String awsRoleArn, + String gcpServiceAccount) + throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + + IngestionDataSourceSettings.AwsMsk awsMsk = + IngestionDataSourceSettings.AwsMsk.newBuilder() + .setClusterArn(clusterArn) + .setTopic(mskTopic) + .setAwsRoleArn(awsRoleArn) + .setGcpServiceAccount(gcpServiceAccount) + .build(); + IngestionDataSourceSettings ingestionDataSourceSettings = + IngestionDataSourceSettings.newBuilder().setAwsMsk(awsMsk).build(); + + Topic topic = + topicAdminClient.createTopic( + Topic.newBuilder() + .setName(topicName.toString()) + .setIngestionDataSourceSettings(ingestionDataSourceSettings) + .build()); + + System.out.println("Created topic with AWS MSK ingestion settings: " + topic.getAllFields()); + } + } +} +// [END pubsub_create_topic_with_aws_msk_ingestion] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithAzureEventHubsIngestionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithAzureEventHubsIngestionExample.java new file mode 100644 index 000000000000..fb72a3e1db30 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithAzureEventHubsIngestionExample.java @@ -0,0 +1,92 @@ +/* + * Copyright 2025 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. + */ + +package pubsub; + +// [START pubsub_create_topic_with_azure_event_hubs_ingestion] + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.IngestionDataSourceSettings; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class CreateTopicWithAzureEventHubsIngestionExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + // Azure Event Hubs ingestion settings. + String resourceGroup = "resource-group"; + String namespace = "namespace"; + String eventHub = "event-hub"; + String clientId = "client-id"; + String tenantId = "tenant-id"; + String subscriptionId = "subscription-id"; + String gcpServiceAccount = "gcp-service-account"; + + createTopicWithAzureEventHubsIngestionExample( + projectId, + topicId, + resourceGroup, + namespace, + eventHub, + clientId, + tenantId, + subscriptionId, + gcpServiceAccount); + } + + public static void createTopicWithAzureEventHubsIngestionExample( + String projectId, + String topicId, + String resourceGroup, + String namespace, + String eventHub, + String clientId, + String tenantId, + String subscriptionId, + String gcpServiceAccount) + throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + + IngestionDataSourceSettings.AzureEventHubs azureEventHubs = + IngestionDataSourceSettings.AzureEventHubs.newBuilder() + .setResourceGroup(resourceGroup) + .setNamespace(namespace) + .setEventHub(eventHub) + .setClientId(clientId) + .setTenantId(tenantId) + .setSubscriptionId(subscriptionId) + .setGcpServiceAccount(gcpServiceAccount) + .build(); + IngestionDataSourceSettings ingestionDataSourceSettings = + IngestionDataSourceSettings.newBuilder().setAzureEventHubs(azureEventHubs).build(); + + Topic topic = + topicAdminClient.createTopic( + Topic.newBuilder() + .setName(topicName.toString()) + .setIngestionDataSourceSettings(ingestionDataSourceSettings) + .build()); + + System.out.println( + "Created topic with Azure Event Hubs ingestion settings: " + topic.getAllFields()); + } + } +} +// [END pubsub_create_topic_with_azure_event_hubs_ingestion] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithCloudStorageIngestionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithCloudStorageIngestionExample.java new file mode 100644 index 000000000000..d795cdc2856e --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithCloudStorageIngestionExample.java @@ -0,0 +1,109 @@ +/* + * 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. + */ + +package pubsub; + +// [START pubsub_create_topic_with_cloud_storage_ingestion] + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.protobuf.util.Timestamps; +import com.google.pubsub.v1.IngestionDataSourceSettings; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.text.ParseException; + +public class CreateTopicWithCloudStorageIngestionExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + // Cloud Storage ingestion settings. + // bucket and inputFormat are required arguments. + String bucket = "your-bucket"; + String inputFormat = "text"; + String textDelimiter = "\n"; + String matchGlob = "**.txt"; + String minimumObjectCreateTime = "YYYY-MM-DDThh:mm:ssZ"; + + createTopicWithCloudStorageIngestionExample( + projectId, topicId, bucket, inputFormat, textDelimiter, matchGlob, minimumObjectCreateTime); + } + + public static void createTopicWithCloudStorageIngestionExample( + String projectId, + String topicId, + String bucket, + String inputFormat, + String textDelimiter, + String matchGlob, + String minimumObjectCreateTime) + throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + IngestionDataSourceSettings.CloudStorage.Builder cloudStorageBuilder = + IngestionDataSourceSettings.CloudStorage.newBuilder().setBucket(bucket); + switch (inputFormat) { + case "text": + cloudStorageBuilder.setTextFormat( + IngestionDataSourceSettings.CloudStorage.TextFormat.newBuilder() + .setDelimiter(textDelimiter) + .build()); + break; + case "avro": + cloudStorageBuilder.setAvroFormat( + IngestionDataSourceSettings.CloudStorage.AvroFormat.getDefaultInstance()); + break; + case "pubsub_avro": + cloudStorageBuilder.setPubsubAvroFormat( + IngestionDataSourceSettings.CloudStorage.PubSubAvroFormat.getDefaultInstance()); + break; + default: + throw new IllegalArgumentException( + "inputFormat must be in ('text', 'avro', 'pubsub_avro'); got value: " + inputFormat); + } + + if (matchGlob != null && !matchGlob.isEmpty()) { + cloudStorageBuilder.setMatchGlob(matchGlob); + } + + if (minimumObjectCreateTime != null && !minimumObjectCreateTime.isEmpty()) { + try { + cloudStorageBuilder.setMinimumObjectCreateTime(Timestamps.parse(minimumObjectCreateTime)); + } catch (ParseException e) { + System.err.println("Unable to parse timestamp: " + minimumObjectCreateTime); + } + } + + IngestionDataSourceSettings ingestionDataSourceSettings = + IngestionDataSourceSettings.newBuilder() + .setCloudStorage(cloudStorageBuilder.build()) + .build(); + + TopicName topicName = TopicName.of(projectId, topicId); + + Topic topic = + topicAdminClient.createTopic( + Topic.newBuilder() + .setName(topicName.toString()) + .setIngestionDataSourceSettings(ingestionDataSourceSettings) + .build()); + + System.out.println( + "Created topic with Cloud Storage ingestion settings: " + topic.getAllFields()); + } + } +} +// [END pubsub_create_topic_with_cloud_storage_ingestion] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithConfluentCloudIngestionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithConfluentCloudIngestionExample.java new file mode 100644 index 000000000000..cd27a0ac9f76 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithConfluentCloudIngestionExample.java @@ -0,0 +1,84 @@ +/* + * Copyright 2025 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. + */ + +package pubsub; + +// [START pubsub_create_topic_with_confluent_cloud_ingestion] + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.IngestionDataSourceSettings; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class CreateTopicWithConfluentCloudIngestionExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + // Confluent Cloud ingestion settings. + String bootstrapServer = "bootstrap-server"; + String clusterId = "cluster-id"; + String confluentTopic = "confluent-topic"; + String identityPoolId = "identity-pool-id"; + String gcpServiceAccount = "gcp-service-account"; + + createTopicWithConfluentCloudIngestionExample( + projectId, + topicId, + bootstrapServer, + clusterId, + confluentTopic, + identityPoolId, + gcpServiceAccount); + } + + public static void createTopicWithConfluentCloudIngestionExample( + String projectId, + String topicId, + String bootstrapServer, + String clusterId, + String confluentTopic, + String identityPoolId, + String gcpServiceAccount) + throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + + IngestionDataSourceSettings.ConfluentCloud confluentCloud = + IngestionDataSourceSettings.ConfluentCloud.newBuilder() + .setBootstrapServer(bootstrapServer) + .setClusterId(clusterId) + .setTopic(confluentTopic) + .setIdentityPoolId(identityPoolId) + .setGcpServiceAccount(gcpServiceAccount) + .build(); + IngestionDataSourceSettings ingestionDataSourceSettings = + IngestionDataSourceSettings.newBuilder().setConfluentCloud(confluentCloud).build(); + + Topic topic = + topicAdminClient.createTopic( + Topic.newBuilder() + .setName(topicName.toString()) + .setIngestionDataSourceSettings(ingestionDataSourceSettings) + .build()); + + System.out.println( + "Created topic with Confluent Cloud ingestion settings: " + topic.getAllFields()); + } + } +} +// [END pubsub_create_topic_with_confluent_cloud_ingestion] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithKinesisIngestionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithKinesisIngestionExample.java new file mode 100644 index 000000000000..6f79ef6b7c3f --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithKinesisIngestionExample.java @@ -0,0 +1,74 @@ +/* + * 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. + */ + +package pubsub; + +// [START pubsub_create_topic_with_kinesis_ingestion] + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.IngestionDataSourceSettings; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class CreateTopicWithKinesisIngestionExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + // Kinesis ingestion settings. + String streamArn = "stream-arn"; + String consumerArn = "consumer-arn"; + String awsRoleArn = "aws-role-arn"; + String gcpServiceAccount = "gcp-service-account"; + + createTopicWithKinesisIngestionExample( + projectId, topicId, streamArn, consumerArn, awsRoleArn, gcpServiceAccount); + } + + public static void createTopicWithKinesisIngestionExample( + String projectId, + String topicId, + String streamArn, + String consumerArn, + String awsRoleArn, + String gcpServiceAccount) + throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + + IngestionDataSourceSettings.AwsKinesis awsKinesis = + IngestionDataSourceSettings.AwsKinesis.newBuilder() + .setStreamArn(streamArn) + .setConsumerArn(consumerArn) + .setAwsRoleArn(awsRoleArn) + .setGcpServiceAccount(gcpServiceAccount) + .build(); + IngestionDataSourceSettings ingestionDataSourceSettings = + IngestionDataSourceSettings.newBuilder().setAwsKinesis(awsKinesis).build(); + + Topic topic = + topicAdminClient.createTopic( + Topic.newBuilder() + .setName(topicName.toString()) + .setIngestionDataSourceSettings(ingestionDataSourceSettings) + .build()); + + System.out.println("Created topic with Kinesis ingestion settings: " + topic.getAllFields()); + } + } +} +// [END pubsub_create_topic_with_kinesis_ingestion] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithSchemaExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithSchemaExample.java new file mode 100644 index 000000000000..2ce1a2b53da9 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithSchemaExample.java @@ -0,0 +1,67 @@ +/* + * Copyright 2021 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. + */ + +package pubsub; + +// [START pubsub_create_topic_with_schema] + +import com.google.api.gax.rpc.AlreadyExistsException; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.Encoding; +import com.google.pubsub.v1.SchemaName; +import com.google.pubsub.v1.SchemaSettings; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class CreateTopicWithSchemaExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + // Use an existing schema. + String schemaId = "your-schema-id"; + // Choose either BINARY or JSON message serialization in this topic. + Encoding encoding = Encoding.BINARY; + + createTopicWithSchemaExample(projectId, topicId, schemaId, encoding); + } + + public static void createTopicWithSchemaExample( + String projectId, String topicId, String schemaId, Encoding encoding) throws IOException { + TopicName topicName = TopicName.of(projectId, topicId); + SchemaName schemaName = SchemaName.of(projectId, schemaId); + + SchemaSettings schemaSettings = + SchemaSettings.newBuilder().setSchema(schemaName.toString()).setEncoding(encoding).build(); + + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + + Topic topic = + topicAdminClient.createTopic( + Topic.newBuilder() + .setName(topicName.toString()) + .setSchemaSettings(schemaSettings) + .build()); + + System.out.println("Created topic with schema: " + topic.getName()); + } catch (AlreadyExistsException e) { + System.out.println(schemaName + "already exists."); + } + } +} +// [END pubsub_create_topic_with_schema] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithSchemaRevisionsExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithSchemaRevisionsExample.java new file mode 100644 index 000000000000..69322d927642 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithSchemaRevisionsExample.java @@ -0,0 +1,82 @@ +/* + * Copyright 2023 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. + */ + +package pubsub; + +// [START pubsub_create_topic_with_schema_revisions] + +import com.google.api.gax.rpc.AlreadyExistsException; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.Encoding; +import com.google.pubsub.v1.SchemaName; +import com.google.pubsub.v1.SchemaSettings; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class CreateTopicWithSchemaRevisionsExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + // Use an existing schema. + String schemaId = "your-schema-id"; + // Choose either BINARY or JSON message serialization in this topic. + Encoding encoding = Encoding.BINARY; + // Set the minimum and maximum revsion ID + String firstRevisionId = "your-revision-id"; + String lastRevisionId = "your-revision-id"; + + createTopicWithSchemaRevisionsExample( + projectId, topicId, schemaId, firstRevisionId, lastRevisionId, encoding); + } + + public static void createTopicWithSchemaRevisionsExample( + String projectId, + String topicId, + String schemaId, + String firstRevisionid, + String lastRevisionId, + Encoding encoding) + throws IOException { + TopicName topicName = TopicName.of(projectId, topicId); + SchemaName schemaName = SchemaName.of(projectId, schemaId); + + SchemaSettings schemaSettings = + SchemaSettings.newBuilder() + .setSchema(schemaName.toString()) + .setFirstRevisionId(firstRevisionid) + .setLastRevisionId(lastRevisionId) + .setEncoding(encoding) + .build(); + + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + + Topic topic = + topicAdminClient.createTopic( + Topic.newBuilder() + .setName(topicName.toString()) + .setSchemaSettings(schemaSettings) + .build()); + + System.out.println("Created topic with schema: " + topic.getName()); + } catch (AlreadyExistsException e) { + System.out.println(schemaName + "already exists."); + } + } +} +// [END pubsub_create_topic_with_schema_revisions] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithSmtExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithSmtExample.java new file mode 100644 index 000000000000..c96322015381 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateTopicWithSmtExample.java @@ -0,0 +1,72 @@ +/* + * Copyright 2025 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. + */ + +package pubsub; + +// [START pubsub_create_topic_with_smt] + +import com.google.api.gax.rpc.AlreadyExistsException; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.JavaScriptUDF; +import com.google.pubsub.v1.MessageTransform; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class CreateTopicWithSmtExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + createTopicWithSmtExample(projectId, topicId); + } + + public static void createTopicWithSmtExample(String projectId, String topicId) + throws IOException { + TopicName topicName = TopicName.of(projectId, topicId); + + // UDF that removes the 'ssn' field, if present + String code = + "function redactSSN(message, metadata) {" + + " const data = JSON.parse(message.data);" + + " delete data['ssn'];" + + " message.data = JSON.stringify(data);" + + " return message;" + + "}"; + String functionName = "redactSSN"; + + JavaScriptUDF udf = + JavaScriptUDF.newBuilder().setCode(code).setFunctionName(functionName).build(); + MessageTransform transform = MessageTransform.newBuilder().setJavascriptUdf(udf).build(); + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + + Topic topic = + topicAdminClient.createTopic( + Topic.newBuilder() + .setName(topicName.toString()) + // Add the UDF message transform + .addMessageTransforms(transform) + .build()); + + System.out.println("Created topic with SMT: " + topic.getName()); + } catch (AlreadyExistsException e) { + System.out.println(topicName + "already exists."); + } + } +} + // [END pubsub_create_topic_with_smt] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/CreateUnwrappedPushSubscriptionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateUnwrappedPushSubscriptionExample.java new file mode 100644 index 000000000000..d2fef438225d --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/CreateUnwrappedPushSubscriptionExample.java @@ -0,0 +1,63 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_create_unwrapped_push_subscription] + +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.pubsub.v1.PushConfig; +import com.google.pubsub.v1.PushConfig.NoWrapper; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class CreateUnwrappedPushSubscriptionExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + String topicId = "your-topic-id"; + String pushEndpoint = "https://my-test-project.appspot.com/push"; + + createPushSubscriptionExample(projectId, subscriptionId, topicId, pushEndpoint); + } + + public static void createPushSubscriptionExample( + String projectId, String subscriptionId, String topicId, String pushEndpoint) + throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + SubscriptionName subscriptionName = SubscriptionName.of(projectId, subscriptionId); + NoWrapper noWrapper = + NoWrapper.newBuilder() + // Determines if message metadata is added to the HTTP headers of + // the delivered message. + .setWriteMetadata(true) + .build(); + PushConfig pushConfig = + PushConfig.newBuilder().setPushEndpoint(pushEndpoint).setNoWrapper(noWrapper).build(); + + // Create a push subscription with default acknowledgement deadline of 10 seconds. + // Messages not successfully acknowledged within 10 seconds will get resent by the server. + Subscription subscription = + subscriptionAdminClient.createSubscription(subscriptionName, topicName, pushConfig, 10); + System.out.println("Created push subscription: " + subscription.getName()); + } + } +} +// [END pubsub_create_unwrapped_push_subscription] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/DeleteSchemaExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/DeleteSchemaExample.java new file mode 100644 index 000000000000..2cd5fa522df3 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/DeleteSchemaExample.java @@ -0,0 +1,50 @@ +/* + * Copyright 2021 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. + */ + +package pubsub; + +// [START pubsub_delete_schema] + +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.pubsub.v1.SchemaServiceClient; +import com.google.pubsub.v1.SchemaName; +import java.io.IOException; + +public class DeleteSchemaExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String schemaId = "your-schema-id"; + + deleteSchemaExample(projectId, schemaId); + } + + public static void deleteSchemaExample(String projectId, String schemaId) throws IOException { + SchemaName schemaName = SchemaName.of(projectId, schemaId); + + try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) { + + schemaServiceClient.deleteSchema(schemaName); + + System.out.println("Deleted a schema:" + schemaName); + + } catch (NotFoundException e) { + System.out.println(schemaName + "not found."); + } + } +} +// [END pubsub_delete_schema] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/DeleteSchemaRevisionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/DeleteSchemaRevisionExample.java new file mode 100644 index 000000000000..30aa65a53536 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/DeleteSchemaRevisionExample.java @@ -0,0 +1,55 @@ +/* + * Copyright 2023 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. + */ + +package pubsub; + +// [START pubsub_delete_schema_revision] + +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.pubsub.v1.SchemaServiceClient; +import com.google.pubsub.v1.DeleteSchemaRevisionRequest; +import com.google.pubsub.v1.SchemaName; +import java.io.IOException; + +public class DeleteSchemaRevisionExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String schemaId = "your-schema-id@your-revision-id"; + + deleteSchemaRevisionExample(projectId, schemaId); + } + + public static void deleteSchemaRevisionExample(String projectId, String schemaId) + throws IOException { + SchemaName schemaName = SchemaName.of(projectId, schemaId); + + try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) { + + DeleteSchemaRevisionRequest request = + DeleteSchemaRevisionRequest.newBuilder().setName(schemaName.toString()).build(); + + schemaServiceClient.deleteSchemaRevision(request); + + System.out.println("Deleted a schema revision:" + schemaName); + + } catch (NotFoundException e) { + System.out.println(schemaName + "not found."); + } + } +} +// [END pubsub_delete_schema_revision] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/DeleteSubscriptionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/DeleteSubscriptionExample.java new file mode 100644 index 000000000000..0142ba2c308a --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/DeleteSubscriptionExample.java @@ -0,0 +1,49 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_delete_subscription] + +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.pubsub.v1.SubscriptionName; +import java.io.IOException; + +public class DeleteSubscriptionExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + + deleteSubscriptionExample(projectId, subscriptionId); + } + + public static void deleteSubscriptionExample(String projectId, String subscriptionId) + throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + SubscriptionName subscriptionName = SubscriptionName.of(projectId, subscriptionId); + try { + subscriptionAdminClient.deleteSubscription(subscriptionName); + System.out.println("Deleted subscription."); + } catch (NotFoundException e) { + System.out.println(e.getMessage()); + } + } + } +} +// [END pubsub_delete_subscription] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/DeleteTopicExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/DeleteTopicExample.java new file mode 100644 index 000000000000..50b7480ba146 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/DeleteTopicExample.java @@ -0,0 +1,47 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_delete_topic] + +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class DeleteTopicExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + deleteTopicExample(projectId, topicId); + } + + public static void deleteTopicExample(String projectId, String topicId) throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + try { + topicAdminClient.deleteTopic(topicName); + System.out.println("Deleted topic."); + } catch (NotFoundException e) { + System.out.println(e.getMessage()); + } + } + } +} +// [END pubsub_delete_topic] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/DetachSubscriptionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/DetachSubscriptionExample.java new file mode 100644 index 000000000000..b414563c26a6 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/DetachSubscriptionExample.java @@ -0,0 +1,58 @@ +/* + * Copyright 2020 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. + */ + +package pubsub; + +// [START pubsub_detach_subscription] +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.DetachSubscriptionRequest; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.SubscriptionName; +import java.io.IOException; + +public class DetachSubscriptionExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // Choose an existing subscription. + String subscriptionId = "your-subscription-id"; + + detachSubscriptionExample(projectId, subscriptionId); + } + + public static void detachSubscriptionExample(String projectId, String subscriptionId) + throws IOException { + SubscriptionName subscriptionName = SubscriptionName.of(projectId, subscriptionId); + + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + topicAdminClient.detachSubscription( + DetachSubscriptionRequest.newBuilder() + .setSubscription(subscriptionName.toString()) + .build()); + } + + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + Subscription subscription = subscriptionAdminClient.getSubscription(subscriptionName); + if (subscription.getDetached()) { + System.out.println("Subscription is detached."); + } else { + System.out.println("Subscription is NOT detached."); + } + } + } +} +// [END pubsub_detach_subscription] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/GetSchemaExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/GetSchemaExample.java new file mode 100644 index 000000000000..a3b72895aba4 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/GetSchemaExample.java @@ -0,0 +1,51 @@ +/* + * Copyright 2021 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. + */ + +package pubsub; + +// [START pubsub_get_schema] + +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.pubsub.v1.SchemaServiceClient; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.SchemaName; +import java.io.IOException; + +public class GetSchemaExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String schemaId = "your-schema-id"; + + getSchemaExample(projectId, schemaId); + } + + public static void getSchemaExample(String projectId, String schemaId) throws IOException { + SchemaName schemaName = SchemaName.of(projectId, schemaId); + + try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) { + + Schema schema = schemaServiceClient.getSchema(schemaName); + + System.out.println("Got a schema:\n" + schema); + + } catch (NotFoundException e) { + System.out.println(schemaName + "not found."); + } + } +} +// [END pubsub_get_schema] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/GetSchemaRevisionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/GetSchemaRevisionExample.java new file mode 100644 index 000000000000..ce8c17ee8379 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/GetSchemaRevisionExample.java @@ -0,0 +1,51 @@ +/* + * Copyright 2023 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. + */ + +package pubsub; + +// [START pubsub_get_schema_revision] + +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.pubsub.v1.SchemaServiceClient; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.SchemaName; +import java.io.IOException; + +public class GetSchemaRevisionExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String schemaId = "your-schema-id[@your-schema-revision]"; + getSchemaRevisionExample(projectId, schemaId); + } + + public static void getSchemaRevisionExample(String projectId, String schemaId) + throws IOException { + SchemaName schemaName = SchemaName.of(projectId, schemaId); + + try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) { + + Schema schema = schemaServiceClient.getSchema(schemaName); + + System.out.println("Got a schema:\n" + schema); + + } catch (NotFoundException e) { + System.out.println(schemaName + "not found."); + } + } +} +// [END pubsub_get_schema_revision] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/GetSubscriptionPolicyExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/GetSubscriptionPolicyExample.java new file mode 100644 index 000000000000..172fdbde58a5 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/GetSubscriptionPolicyExample.java @@ -0,0 +1,48 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_get_subscription_policy] + +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.pubsub.v1.ProjectSubscriptionName; +import java.io.IOException; + +public class GetSubscriptionPolicyExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + + getSubscriptionPolicyExample(projectId, subscriptionId); + } + + public static void getSubscriptionPolicyExample(String projectId, String subscriptionId) + throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + GetIamPolicyRequest getIamPolicyRequest = + GetIamPolicyRequest.newBuilder().setResource(subscriptionName.toString()).build(); + Policy policy = subscriptionAdminClient.getIamPolicy(getIamPolicyRequest); + System.out.println("Subscription policy: " + policy); + } + } +} +// [END pubsub_get_subscription_policy] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/GetTopicPolicyExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/GetTopicPolicyExample.java new file mode 100644 index 000000000000..21b938d00b95 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/GetTopicPolicyExample.java @@ -0,0 +1,46 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_get_topic_policy] + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class GetTopicPolicyExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + getTopicPolicyExample(projectId, topicId); + } + + public static void getTopicPolicyExample(String projectId, String topicId) throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + GetIamPolicyRequest getIamPolicyRequest = + GetIamPolicyRequest.newBuilder().setResource(topicName.toString()).build(); + Policy policy = topicAdminClient.getIamPolicy(getIamPolicyRequest); + System.out.println("Topic policy: " + policy); + } + } +} +// [END pubsub_get_topic_policy] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/ListSchemaRevisionsExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/ListSchemaRevisionsExample.java new file mode 100644 index 000000000000..69cfa59ab2c8 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/ListSchemaRevisionsExample.java @@ -0,0 +1,46 @@ +/* + * Copyright 2023 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. + */ + +package pubsub; + +// [START pubsub_list_schema_revisions] +import com.google.cloud.pubsub.v1.SchemaServiceClient; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.SchemaName; +import java.io.IOException; + +public class ListSchemaRevisionsExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String schemaId = "your-schema-id"; + + listSchemaRevisionsExample(projectId, schemaId); + } + + public static void listSchemaRevisionsExample(String projectId, String schemaId) + throws IOException { + SchemaName schemaName = SchemaName.of(projectId, schemaId); + + try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) { + for (Schema schema : schemaServiceClient.listSchemaRevisions(schemaName).iterateAll()) { + System.out.println(schema); + } + System.out.println("Listed schema revisions."); + } + } +} +// [END pubsub_list_schema_revisions] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/ListSchemasExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/ListSchemasExample.java new file mode 100644 index 000000000000..8447184ae98b --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/ListSchemasExample.java @@ -0,0 +1,44 @@ +/* + * Copyright 2021 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. + */ + +package pubsub; + +// [START pubsub_list_schemas] +import com.google.cloud.pubsub.v1.SchemaServiceClient; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.Schema; +import java.io.IOException; + +public class ListSchemasExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + + listSchemasExample(projectId); + } + + public static void listSchemasExample(String projectId) throws IOException { + ProjectName projectName = ProjectName.of(projectId); + + try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) { + for (Schema schema : schemaServiceClient.listSchemas(projectName).iterateAll()) { + System.out.println(schema); + } + System.out.println("Listed schemas."); + } + } +} +// [END pubsub_list_schemas] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/ListSubscriptionsInProjectExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/ListSubscriptionsInProjectExample.java new file mode 100644 index 000000000000..54942a13c795 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/ListSubscriptionsInProjectExample.java @@ -0,0 +1,45 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_list_subscriptions] + +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.Subscription; +import java.io.IOException; + +public class ListSubscriptionsInProjectExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + + listSubscriptionInProjectExample(projectId); + } + + public static void listSubscriptionInProjectExample(String projectId) throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + ProjectName projectName = ProjectName.of(projectId); + for (Subscription subscription : + subscriptionAdminClient.listSubscriptions(projectName).iterateAll()) { + System.out.println(subscription.getName()); + } + System.out.println("Listed all the subscriptions in the project."); + } + } +} +// [END pubsub_list_subscriptions] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/ListSubscriptionsInTopicExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/ListSubscriptionsInTopicExample.java new file mode 100644 index 000000000000..ffb2d7153429 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/ListSubscriptionsInTopicExample.java @@ -0,0 +1,45 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_list_topic_subscriptions] + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class ListSubscriptionsInTopicExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + listSubscriptionInTopicExample(projectId, topicId); + } + + public static void listSubscriptionInTopicExample(String projectId, String topicId) + throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + for (String subscription : topicAdminClient.listTopicSubscriptions(topicName).iterateAll()) { + System.out.println(subscription); + } + System.out.println("Listed all the subscriptions in the topic."); + } + } +} +// [END pubsub_list_topic_subscriptions] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/ListTopicsExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/ListTopicsExample.java new file mode 100644 index 000000000000..3771f43fd3c7 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/ListTopicsExample.java @@ -0,0 +1,44 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_list_topics] + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.ProjectName; +import com.google.pubsub.v1.Topic; +import java.io.IOException; + +public class ListTopicsExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + + listTopicsExample(projectId); + } + + public static void listTopicsExample(String projectId) throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + ProjectName projectName = ProjectName.of(projectId); + for (Topic topic : topicAdminClient.listTopics(projectName).iterateAll()) { + System.out.println(topic.getName()); + } + System.out.println("Listed all topics."); + } + } +} +// [END pubsub_list_topics] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/OpenTelemetryPublisherExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/OpenTelemetryPublisherExample.java new file mode 100644 index 000000000000..606c6fe36a79 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/OpenTelemetryPublisherExample.java @@ -0,0 +1,99 @@ +/* + * 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. + */ + +package pubsub; + +// [START pubsub_publish_otel_tracing] + +import com.google.api.core.ApiFuture; +import com.google.cloud.opentelemetry.trace.TraceConfiguration; +import com.google.cloud.opentelemetry.trace.TraceExporter; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.SdkTracerProvider; +import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; +import io.opentelemetry.sdk.trace.export.SpanExporter; +import io.opentelemetry.sdk.trace.samplers.Sampler; +import io.opentelemetry.semconv.ResourceAttributes; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +public class OpenTelemetryPublisherExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + openTelemetryPublisherExample(projectId, topicId); + } + + public static void openTelemetryPublisherExample(String projectId, String topicId) + throws IOException, ExecutionException, InterruptedException { + Resource resource = + Resource.getDefault().toBuilder() + .put(ResourceAttributes.SERVICE_NAME, "publisher-example") + .build(); + + // Creates a Cloud Trace exporter. + SpanExporter traceExporter = + TraceExporter.createWithConfiguration( + TraceConfiguration.builder().setProjectId(projectId).build()); + + SdkTracerProvider sdkTracerProvider = + SdkTracerProvider.builder() + .setResource(resource) + .addSpanProcessor(SimpleSpanProcessor.create(traceExporter)) + .setSampler(Sampler.alwaysOn()) + .build(); + + OpenTelemetry openTelemetry = + OpenTelemetrySdk.builder().setTracerProvider(sdkTracerProvider).buildAndRegisterGlobal(); + + TopicName topicName = TopicName.of(projectId, topicId); + + Publisher publisher = null; + try { + // Create a publisher instance with the created OpenTelemetry object and enabling tracing. + publisher = + Publisher.newBuilder(topicName) + .setOpenTelemetry(openTelemetry) + .setEnableOpenTelemetryTracing(true) + .build(); + + String message = "Hello World!"; + ByteString data = ByteString.copyFromUtf8(message); + PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build(); + + // Once published, returns a server-assigned message id (unique within the topic) + ApiFuture messageIdFuture = publisher.publish(pubsubMessage); + String messageId = messageIdFuture.get(); + System.out.println("Published message ID: " + messageId); + } finally { + if (publisher != null) { + // When finished with the publisher, shutdown to free up resources. + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } + } +} +// [END pubsub_publish_otel_tracing] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/OpenTelemetrySubscriberExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/OpenTelemetrySubscriberExample.java new file mode 100644 index 000000000000..f78c38d198a5 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/OpenTelemetrySubscriberExample.java @@ -0,0 +1,100 @@ +/* + * 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. + */ + +package pubsub; + +// [START pubsub_subscribe_otel_tracing] + +import com.google.cloud.opentelemetry.trace.TraceConfiguration; +import com.google.cloud.opentelemetry.trace.TraceExporter; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.SdkTracerProvider; +import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; +import io.opentelemetry.sdk.trace.export.SpanExporter; +import io.opentelemetry.sdk.trace.samplers.Sampler; +import io.opentelemetry.semconv.ResourceAttributes; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class OpenTelemetrySubscriberExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + + openTelemetrySubscriberExample(projectId, subscriptionId); + } + + public static void openTelemetrySubscriberExample(String projectId, String subscriptionId) { + Resource resource = + Resource.getDefault().toBuilder() + .put(ResourceAttributes.SERVICE_NAME, "subscriber-example") + .build(); + + // Creates a Cloud Trace exporter. + SpanExporter traceExporter = + TraceExporter.createWithConfiguration( + TraceConfiguration.builder().setProjectId(projectId).build()); + + SdkTracerProvider sdkTracerProvider = + SdkTracerProvider.builder() + .setResource(resource) + .addSpanProcessor(SimpleSpanProcessor.create(traceExporter)) + .setSampler(Sampler.alwaysOn()) + .build(); + + OpenTelemetry openTelemetry = + OpenTelemetrySdk.builder().setTracerProvider(sdkTracerProvider).buildAndRegisterGlobal(); + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + // Instantiate an asynchronous message receiver. + MessageReceiver receiver = + (PubsubMessage message, AckReplyConsumer consumer) -> { + // Handle incoming message, then ack the received message. + System.out.println("Id: " + message.getMessageId()); + System.out.println("Data: " + message.getData().toStringUtf8()); + consumer.ack(); + }; + + Subscriber subscriber = null; + try { + subscriber = + Subscriber.newBuilder(subscriptionName, receiver) + .setOpenTelemetry(openTelemetry) + .setEnableOpenTelemetryTracing(true) + .build(); + + // Start the subscriber. + subscriber.startAsync().awaitRunning(); + System.out.printf("Listening for messages on %s:\n", subscriptionName.toString()); + // Allow the subscriber to run for 30s unless an unrecoverable error occurs. + subscriber.awaitTerminated(30, TimeUnit.SECONDS); + } catch (TimeoutException timeoutException) { + // Shut down the subscriber after 30s. Stop receiving messages. + subscriber.stopAsync(); + } + } +} + // [END pubsub_subscribe_otel_tracing] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/OptimisticSubscribeExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/OptimisticSubscribeExample.java new file mode 100644 index 000000000000..fbc9a183b535 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/OptimisticSubscribeExample.java @@ -0,0 +1,103 @@ +/* + * 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. + */ + +package pubsub; + +// [START pubsub_optimistic_subscribe] + +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.PushConfig; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class OptimisticSubscribeExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + String topicId = "your-topic-id"; + + optimisticSubscribeExample(projectId, subscriptionId, topicId); + } + + public static void optimisticSubscribeExample( + String projectId, String subscriptionId, String topicId) throws IOException { + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + // Instantiate an asynchronous message receiver. + MessageReceiver receiver = + (PubsubMessage message, AckReplyConsumer consumer) -> { + // Handle incoming message, then ack the received message. + System.out.println("Id: " + message.getMessageId()); + System.out.println("Data: " + message.getData().toStringUtf8()); + consumer.ack(); + }; + + Subscriber subscriber = null; + try { + subscriber = Subscriber.newBuilder(subscriptionName, receiver).build(); + + // Listen for resource NOT_FOUND errors and rebuild the subscriber and restart subscribing + // when the current subscriber encounters these errors. + subscriber.addListener( + new Subscriber.Listener() { + public void failed(Subscriber.State from, Throwable failure) { + System.out.println(failure.getStackTrace()); + if (failure instanceof NotFoundException) { + try (SubscriptionAdminClient subscriptionAdminClient = + SubscriptionAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + // Create a pull subscription with default acknowledgement deadline of 10 seconds. + // The client library will automatically extend acknowledgement deadlines. + Subscription subscription = + subscriptionAdminClient.createSubscription( + subscriptionName, topicName, PushConfig.getDefaultInstance(), 10); + System.out.println("Created pull subscription: " + subscription.getName()); + optimisticSubscribeExample(projectId, subscriptionId, topicId); + } catch (IOException err) { + System.out.println("Failed to create pull subscription: " + err.getMessage()); + } + } + } + }, + MoreExecutors.directExecutor()); + + subscriber.startAsync().awaitRunning(); + System.out.printf("Listening for messages on %s:\n", subscriptionName.toString()); + subscriber.awaitTerminated(30, TimeUnit.SECONDS); + } catch (IllegalStateException e) { + // Prevent an exception from being thrown if it is the expected NotFoundException + if (!(subscriber.failureCause() instanceof NotFoundException)) { + throw e; + } + } catch (TimeoutException e) { + subscriber.stopAsync(); + } + } +} + +// [END pubsub_optimistic_subscribe] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/PublishAvroRecordsExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishAvroRecordsExample.java new file mode 100644 index 000000000000..763882d65f36 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishAvroRecordsExample.java @@ -0,0 +1,109 @@ +/* + * Copyright 2021 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. + */ + +package pubsub; + +// [START pubsub_publish_avro_records] + +import com.google.api.core.ApiFuture; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.Encoding; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import org.apache.avro.io.Encoder; +import org.apache.avro.io.EncoderFactory; +import utilities.State; + +public class PublishAvroRecordsExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // Use a topic created with an Avro schema. + String topicId = "your-topic-id"; + + publishAvroRecordsExample(projectId, topicId); + } + + public static void publishAvroRecordsExample(String projectId, String topicId) + throws IOException, ExecutionException, InterruptedException { + + Encoding encoding = null; + + TopicName topicName = TopicName.of(projectId, topicId); + + // Get the topic encoding type. + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + encoding = topicAdminClient.getTopic(topicName).getSchemaSettings().getEncoding(); + } + + // Instantiate an avro-tools-generated class defined in `us-states.avsc`. + State state = State.newBuilder().setName("Alaska").setPostAbbr("AK").build(); + + Publisher publisher = null; + + block: + try { + publisher = Publisher.newBuilder(topicName).build(); + + // Prepare to serialize the object to the output stream. + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + + Encoder encoder = null; + + // Prepare an appropriate encoder for publishing to the topic. + switch (encoding) { + case BINARY: + System.out.println("Preparing a BINARY encoder..."); + encoder = EncoderFactory.get().directBinaryEncoder(byteStream, /* reuse= */ null); + break; + + case JSON: + System.out.println("Preparing a JSON encoder..."); + encoder = EncoderFactory.get().jsonEncoder(State.getClassSchema(), byteStream); + break; + + default: + break block; + } + + // Encode the object and write it to the output stream. + state.customEncode(encoder); + encoder.flush(); + + // Publish the encoded object as a Pub/Sub message. + ByteString data = ByteString.copyFrom(byteStream.toByteArray()); + PubsubMessage message = PubsubMessage.newBuilder().setData(data).build(); + System.out.println("Publishing message: " + message); + + ApiFuture future = publisher.publish(message); + System.out.println("Published message ID: " + future.get()); + + } finally { + if (publisher != null) { + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } + } +} +// [END pubsub_publish_avro_records] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/PublishProtobufMessagesExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishProtobufMessagesExample.java new file mode 100644 index 000000000000..b08682e3f7f0 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishProtobufMessagesExample.java @@ -0,0 +1,97 @@ +/* + * Copyright 2021 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. + */ + +package pubsub; + +// [START pubsub_publish_proto_messages] + +import com.google.api.core.ApiFuture; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.protobuf.ByteString; +import com.google.protobuf.util.JsonFormat; +import com.google.pubsub.v1.Encoding; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import utilities.StateProto.State; + +public class PublishProtobufMessagesExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // Use a topic created with a proto schema. + String topicId = "your-topic-id"; + + publishProtobufMessagesExample(projectId, topicId); + } + + public static void publishProtobufMessagesExample(String projectId, String topicId) + throws IOException, ExecutionException, InterruptedException { + + Encoding encoding = null; + + TopicName topicName = TopicName.of(projectId, topicId); + + // Get the topic encoding type. + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + encoding = topicAdminClient.getTopic(topicName).getSchemaSettings().getEncoding(); + } + + Publisher publisher = null; + + // Instantiate a protoc-generated class defined in `us-states.proto`. + State state = State.newBuilder().setName("Alaska").setPostAbbr("AK").build(); + + block: + try { + publisher = Publisher.newBuilder(topicName).build(); + + PubsubMessage.Builder message = PubsubMessage.newBuilder(); + + // Prepare an appropriately formatted message based on topic encoding. + switch (encoding) { + case BINARY: + message.setData(state.toByteString()); + System.out.println("Publishing a BINARY-formatted message:\n" + message); + break; + + case JSON: + String jsonString = JsonFormat.printer().omittingInsignificantWhitespace().print(state); + message.setData(ByteString.copyFromUtf8(jsonString)); + System.out.println("Publishing a JSON-formatted message:\n" + message); + break; + + default: + break block; + } + + // Publish the message. + ApiFuture future = publisher.publish(message.build()); + System.out.println("Published message ID: " + future.get()); + + } finally { + if (publisher != null) { + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } + } +} +// [END pubsub_publish_proto_messages] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithBatchSettingsExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithBatchSettingsExample.java new file mode 100644 index 000000000000..7a2252d76c8c --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithBatchSettingsExample.java @@ -0,0 +1,93 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_publisher_batch_settings] + +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutures; +import com.google.api.gax.batching.BatchingSettings; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import org.threeten.bp.Duration; + +public class PublishWithBatchSettingsExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + publishWithBatchSettingsExample(projectId, topicId); + } + + public static void publishWithBatchSettingsExample(String projectId, String topicId) + throws IOException, ExecutionException, InterruptedException { + TopicName topicName = TopicName.of(projectId, topicId); + Publisher publisher = null; + List> messageIdFutures = new ArrayList<>(); + + try { + // Batch settings control how the publisher batches messages + long requestBytesThreshold = 5000L; // default : 1000 bytes + long messageCountBatchSize = 100L; // default : 100 message + + Duration publishDelayThreshold = Duration.ofMillis(100); // default : 1 ms + + // Publish request get triggered based on request size, messages count & time since last + // publish, whichever condition is met first. + BatchingSettings batchingSettings = + BatchingSettings.newBuilder() + .setElementCountThreshold(messageCountBatchSize) + .setRequestByteThreshold(requestBytesThreshold) + .setDelayThreshold(publishDelayThreshold) + .build(); + + // Create a publisher instance with default settings bound to the topic + publisher = Publisher.newBuilder(topicName).setBatchingSettings(batchingSettings).build(); + + // schedule publishing one message at a time : messages get automatically batched + for (int i = 0; i < 100; i++) { + String message = "message " + i; + ByteString data = ByteString.copyFromUtf8(message); + PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build(); + + // Once published, returns a server-assigned message id (unique within the topic) + ApiFuture messageIdFuture = publisher.publish(pubsubMessage); + messageIdFutures.add(messageIdFuture); + } + } finally { + // Wait on any pending publish requests. + List messageIds = ApiFutures.allAsList(messageIdFutures).get(); + + System.out.println("Published " + messageIds.size() + " messages with batch settings."); + + if (publisher != null) { + // When finished with the publisher, shutdown to free up resources. + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } + } +} +// [END pubsub_publisher_batch_settings] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithConcurrencyControlExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithConcurrencyControlExample.java new file mode 100644 index 000000000000..785a4ce3b285 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithConcurrencyControlExample.java @@ -0,0 +1,85 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_publisher_concurrency_control] + +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutures; +import com.google.api.gax.core.ExecutorProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +public class PublishWithConcurrencyControlExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + publishWithConcurrencyControlExample(projectId, topicId); + } + + public static void publishWithConcurrencyControlExample(String projectId, String topicId) + throws IOException, ExecutionException, InterruptedException { + TopicName topicName = TopicName.of(projectId, topicId); + Publisher publisher = null; + List> messageIdFutures = new ArrayList<>(); + + try { + // Provides an executor service for processing messages. The default + // `executorProvider` used by the publisher has a default thread count of + // 5 * the number of processors available to the Java virtual machine. + ExecutorProvider executorProvider = + InstantiatingExecutorProvider.newBuilder().setExecutorThreadCount(4).build(); + + // `setExecutorProvider` configures an executor for the publisher. + publisher = Publisher.newBuilder(topicName).setExecutorProvider(executorProvider).build(); + + // schedule publishing one message at a time : messages get automatically batched + for (int i = 0; i < 100; i++) { + String message = "message " + i; + ByteString data = ByteString.copyFromUtf8(message); + PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build(); + + // Once published, returns a server-assigned message id (unique within the topic) + ApiFuture messageIdFuture = publisher.publish(pubsubMessage); + messageIdFutures.add(messageIdFuture); + } + } finally { + // Wait on any pending publish requests. + List messageIds = ApiFutures.allAsList(messageIdFutures).get(); + + System.out.println("Published " + messageIds.size() + " messages with concurrency control."); + + if (publisher != null) { + // When finished with the publisher, shutdown to free up resources. + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } + } +} + +// [END pubsub_publisher_concurrency_control] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithCustomAttributesExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithCustomAttributesExample.java new file mode 100644 index 000000000000..77468f15dc69 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithCustomAttributesExample.java @@ -0,0 +1,71 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_publish_custom_attributes] + +import com.google.api.core.ApiFuture; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.common.collect.ImmutableMap; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +public class PublishWithCustomAttributesExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + publishWithCustomAttributesExample(projectId, topicId); + } + + public static void publishWithCustomAttributesExample(String projectId, String topicId) + throws IOException, ExecutionException, InterruptedException { + TopicName topicName = TopicName.of(projectId, topicId); + Publisher publisher = null; + + try { + // Create a publisher instance with default settings bound to the topic + publisher = Publisher.newBuilder(topicName).build(); + + String message = "first message"; + ByteString data = ByteString.copyFromUtf8(message); + PubsubMessage pubsubMessage = + PubsubMessage.newBuilder() + .setData(data) + .putAllAttributes(ImmutableMap.of("year", "2020", "author", "unknown")) + .build(); + + // Once published, returns a server-assigned message id (unique within the topic) + ApiFuture messageIdFuture = publisher.publish(pubsubMessage); + String messageId = messageIdFuture.get(); + System.out.println("Published a message with custom attributes: " + messageId); + + } finally { + if (publisher != null) { + // When finished with the publisher, shutdown to free up resources. + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } + } +} +// [END pubsub_publish_custom_attributes] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithErrorHandlerExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithErrorHandlerExample.java new file mode 100644 index 000000000000..8702d4240d6f --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithErrorHandlerExample.java @@ -0,0 +1,96 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_publish_with_error_handler] + +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutureCallback; +import com.google.api.core.ApiFutures; +import com.google.api.gax.rpc.ApiException; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.TimeUnit; + +public class PublishWithErrorHandlerExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + publishWithErrorHandlerExample(projectId, topicId); + } + + public static void publishWithErrorHandlerExample(String projectId, String topicId) + throws IOException, InterruptedException { + TopicName topicName = TopicName.of(projectId, topicId); + Publisher publisher = null; + + try { + // Create a publisher instance with default settings bound to the topic + publisher = Publisher.newBuilder(topicName).build(); + + List messages = Arrays.asList("first message", "second message"); + + for (final String message : messages) { + ByteString data = ByteString.copyFromUtf8(message); + PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build(); + + // Once published, returns a server-assigned message id (unique within the topic) + ApiFuture future = publisher.publish(pubsubMessage); + + // Add an asynchronous callback to handle success / failure + ApiFutures.addCallback( + future, + new ApiFutureCallback() { + + @Override + public void onFailure(Throwable throwable) { + if (throwable instanceof ApiException) { + ApiException apiException = ((ApiException) throwable); + // details on the API exception + System.out.println(apiException.getStatusCode().getCode()); + System.out.println(apiException.isRetryable()); + } + System.out.println("Error publishing message : " + message); + } + + @Override + public void onSuccess(String messageId) { + // Once published, returns server-assigned message ids (unique within the topic) + System.out.println("Published message ID: " + messageId); + } + }, + MoreExecutors.directExecutor()); + } + } finally { + if (publisher != null) { + // When finished with the publisher, shutdown to free up resources. + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } + } +} +// [END pubsub_publish_with_error_handler] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithFlowControlExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithFlowControlExample.java new file mode 100644 index 000000000000..b1d4a8ef8be5 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithFlowControlExample.java @@ -0,0 +1,94 @@ +/* + * Copyright 2021 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. + */ + +package pubsub; + +// [START pubsub_publisher_flow_control] + +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutures; +import com.google.api.gax.batching.BatchingSettings; +import com.google.api.gax.batching.FlowControlSettings; +import com.google.api.gax.batching.FlowController.LimitExceededBehavior; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +public class PublishWithFlowControlExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + publishWithFlowControlExample(projectId, topicId); + } + + public static void publishWithFlowControlExample(String projectId, String topicId) + throws IOException, ExecutionException, InterruptedException { + TopicName topicName = TopicName.of(projectId, topicId); + Publisher publisher = null; + List> messageIdFutures = new ArrayList<>(); + + try { + // Configure how many messages the publisher client can hold in memory + // and what to do when messages exceed the limit. + FlowControlSettings flowControlSettings = + FlowControlSettings.newBuilder() + // Block more messages from being published when the limit is reached. The other + // options are Ignore (or continue publishing) and ThrowException (or error out). + .setLimitExceededBehavior(LimitExceededBehavior.Block) + .setMaxOutstandingRequestBytes(10 * 1024 * 1024L) // 10 MiB + .setMaxOutstandingElementCount(100L) // 100 messages + .build(); + + // By default, messages are not batched. + BatchingSettings batchingSettings = + BatchingSettings.newBuilder().setFlowControlSettings(flowControlSettings).build(); + + publisher = Publisher.newBuilder(topicName).setBatchingSettings(batchingSettings).build(); + + // Publish 1000 messages in quick succession may be constrained by publisher flow control. + for (int i = 0; i < 1000; i++) { + String message = "message " + i; + ByteString data = ByteString.copyFromUtf8(message); + PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build(); + + // Once published, returns a server-assigned message id (unique within the topic) + ApiFuture messageIdFuture = publisher.publish(pubsubMessage); + messageIdFutures.add(messageIdFuture); + } + } finally { + // Wait on any pending publish requests. + List messageIds = ApiFutures.allAsList(messageIdFutures).get(); + + System.out.println( + "Published " + messageIds.size() + " messages with flow control settings."); + + if (publisher != null) { + // When finished with the publisher, shut down to free up resources. + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } + } +} +// [END pubsub_publisher_flow_control] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithGrpcCompressionExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithGrpcCompressionExample.java new file mode 100644 index 000000000000..ccbf7b5a8725 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithGrpcCompressionExample.java @@ -0,0 +1,77 @@ +/* + * Copyright 2022 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. + */ + +package pubsub; + +// [START pubsub_publisher_with_compression] +import com.google.api.core.ApiFuture; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +public class PublishWithGrpcCompressionExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // Choose an existing topic. + String topicId = "your-topic-id"; + + publishWithGrpcCompressionExample(projectId, topicId); + } + + public static void publishWithGrpcCompressionExample(String projectId, String topicId) + throws IOException, ExecutionException, InterruptedException { + TopicName topicName = TopicName.of(projectId, topicId); + + // Create a publisher and set enable compression to true. + Publisher publisher = null; + try { + // Enable compression and configure the compression threshold to 10 bytes (default to 240 B). + // Publish requests of sizes > 10 B (excluding the request headers) will get compressed. + // The number of messages in a publish request is determined by publisher batch settings. + // Batching is turned off by default, i.e. each publish request contains only one message. + publisher = + Publisher.newBuilder(topicName) + .setEnableCompression(true) + .setCompressionBytesThreshold(10L) + .build(); + + byte[] bytes = new byte[1024]; + ByteString data = ByteString.copyFrom(bytes); + PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build(); + + // Once published, returns a server-assigned message id (unique within the topic). + // You can look up the actual size of the outbound data using the Java Logging API. + // Configure logging properties as shown in + // https://github.com/googleapis/java-pubsub/tree/main/samples/snippets/src/main/resources/logging.properties + // and look for "OUTBOUND DATA" with "length=" in the output log. + ApiFuture messageIdFuture = publisher.publish(pubsubMessage); + String messageId = messageIdFuture.get(); + System.out.println("Published a compressed message of message ID: " + messageId); + } finally { + if (publisher != null) { + // When finished with the publisher, shutdown to free up resources. + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } + } +} +// [END pubsub_publisher_with_compression] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithOrderingKeys.java b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithOrderingKeys.java new file mode 100644 index 000000000000..e1509db5a5fd --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithOrderingKeys.java @@ -0,0 +1,100 @@ +/* + * Copyright 2020 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. + */ + +package pubsub; + +// [START pubsub_publish_with_ordering_keys] +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutureCallback; +import com.google.api.core.ApiFutures; +import com.google.api.gax.rpc.ApiException; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +public class PublishWithOrderingKeys { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // Choose an existing topic. + String topicId = "your-topic-id"; + + publishWithOrderingKeysExample(projectId, topicId); + } + + public static void publishWithOrderingKeysExample(String projectId, String topicId) + throws IOException, InterruptedException { + TopicName topicName = TopicName.of(projectId, topicId); + // Create a publisher and set message ordering to true. + Publisher publisher = + Publisher.newBuilder(topicName) + // Sending messages to the same region ensures they are received in order + // even when multiple publishers are used. + .setEndpoint("us-east1-pubsub.googleapis.com:443") + .setEnableMessageOrdering(true) + .build(); + + try { + Map messages = new LinkedHashMap(); + messages.put("message1", "key1"); + messages.put("message2", "key2"); + messages.put("message3", "key1"); + messages.put("message4", "key2"); + + for (Map.Entry entry : messages.entrySet()) { + ByteString data = ByteString.copyFromUtf8(entry.getKey()); + PubsubMessage pubsubMessage = + PubsubMessage.newBuilder().setData(data).setOrderingKey(entry.getValue()).build(); + ApiFuture future = publisher.publish(pubsubMessage); + + // Add an asynchronous callback to handle publish success / failure. + ApiFutures.addCallback( + future, + new ApiFutureCallback() { + + @Override + public void onFailure(Throwable throwable) { + if (throwable instanceof ApiException) { + ApiException apiException = ((ApiException) throwable); + // Details on the API exception. + System.out.println(apiException.getStatusCode().getCode()); + System.out.println(apiException.isRetryable()); + } + System.out.println("Error publishing message : " + pubsubMessage.getData()); + } + + @Override + public void onSuccess(String messageId) { + // Once published, returns server-assigned message ids (unique within the topic). + System.out.println(pubsubMessage.getData() + " : " + messageId); + } + }, + MoreExecutors.directExecutor()); + } + } finally { + // When finished with the publisher, shutdown to free up resources. + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } +} +// [END pubsub_publish_with_ordering_keys] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithRetrySettingsExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithRetrySettingsExample.java new file mode 100644 index 000000000000..423ec6ea9fba --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/PublishWithRetrySettingsExample.java @@ -0,0 +1,88 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_publisher_retry_settings] + +import com.google.api.core.ApiFuture; +import com.google.api.gax.retrying.RetrySettings; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import org.threeten.bp.Duration; + +public class PublishWithRetrySettingsExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + publishWithRetrySettingsExample(projectId, topicId); + } + + public static void publishWithRetrySettingsExample(String projectId, String topicId) + throws IOException, ExecutionException, InterruptedException { + TopicName topicName = TopicName.of(projectId, topicId); + Publisher publisher = null; + + try { + // Retry settings control how the publisher handles retry-able failures + Duration initialRetryDelay = Duration.ofMillis(100); // default: 100 ms + double retryDelayMultiplier = 2.0; // back off for repeated failures, default: 1.3 + Duration maxRetryDelay = Duration.ofSeconds(60); // default : 60 seconds + Duration initialRpcTimeout = Duration.ofSeconds(1); // default: 5 seconds + double rpcTimeoutMultiplier = 1.0; // default: 1.0 + Duration maxRpcTimeout = Duration.ofSeconds(600); // default: 600 seconds + Duration totalTimeout = Duration.ofSeconds(600); // default: 600 seconds + + RetrySettings retrySettings = + RetrySettings.newBuilder() + .setInitialRetryDelay(initialRetryDelay) + .setRetryDelayMultiplier(retryDelayMultiplier) + .setMaxRetryDelay(maxRetryDelay) + .setInitialRpcTimeout(initialRpcTimeout) + .setRpcTimeoutMultiplier(rpcTimeoutMultiplier) + .setMaxRpcTimeout(maxRpcTimeout) + .setTotalTimeout(totalTimeout) + .build(); + + // Create a publisher instance with default settings bound to the topic + publisher = Publisher.newBuilder(topicName).setRetrySettings(retrySettings).build(); + + String message = "first message"; + ByteString data = ByteString.copyFromUtf8(message); + PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build(); + + // Once published, returns a server-assigned message id (unique within the topic) + ApiFuture messageIdFuture = publisher.publish(pubsubMessage); + String messageId = messageIdFuture.get(); + System.out.println("Published a message with retry settings: " + messageId); + + } finally { + if (publisher != null) { + // When finished with the publisher, shutdown to free up resources. + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } + } +} +// [END pubsub_publisher_retry_settings] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/PublisherExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/PublisherExample.java new file mode 100644 index 000000000000..e4dc39a897da --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/PublisherExample.java @@ -0,0 +1,67 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_quickstart_publisher] +// [START pubsub_publish] + +import com.google.api.core.ApiFuture; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +public class PublisherExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + publisherExample(projectId, topicId); + } + + public static void publisherExample(String projectId, String topicId) + throws IOException, ExecutionException, InterruptedException { + TopicName topicName = TopicName.of(projectId, topicId); + + Publisher publisher = null; + try { + // Create a publisher instance with default settings bound to the topic + publisher = Publisher.newBuilder(topicName).build(); + + String message = "Hello World!"; + ByteString data = ByteString.copyFromUtf8(message); + PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build(); + + // Once published, returns a server-assigned message id (unique within the topic) + ApiFuture messageIdFuture = publisher.publish(pubsubMessage); + String messageId = messageIdFuture.get(); + System.out.println("Published message ID: " + messageId); + } finally { + if (publisher != null) { + // When finished with the publisher, shutdown to free up resources. + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } + } +} +// [END pubsub_quickstart_publisher] +// [END pubsub_publish] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/ReceiveMessagesWithDeliveryAttemptsExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/ReceiveMessagesWithDeliveryAttemptsExample.java new file mode 100644 index 000000000000..b63ca1dd7cab --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/ReceiveMessagesWithDeliveryAttemptsExample.java @@ -0,0 +1,74 @@ +/* + * Copyright 2020 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. + */ + +package pubsub; + +// [START pubsub_dead_letter_delivery_attempt] + +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class ReceiveMessagesWithDeliveryAttemptsExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // This is an existing subscription with a dead letter policy. + String subscriptionId = "your-subscription-id"; + + ReceiveMessagesWithDeliveryAttemptsExample.receiveMessagesWithDeliveryAttemptsExample( + projectId, subscriptionId); + } + + public static void receiveMessagesWithDeliveryAttemptsExample( + String projectId, String subscriptionId) { + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + // Instantiate an asynchronous message receiver. + MessageReceiver receiver = + new MessageReceiver() { + @Override + public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) { + // Handle incoming message, then ack the received message. + System.out.println("Id: " + message.getMessageId()); + System.out.println("Data: " + message.getData().toStringUtf8()); + System.out.println("Delivery Attempt: " + Subscriber.getDeliveryAttempt(message)); + consumer.ack(); + } + }; + + Subscriber subscriber = null; + try { + subscriber = Subscriber.newBuilder(subscriptionName, receiver).build(); + // Start the subscriber. + subscriber.startAsync().awaitRunning(); + System.out.printf("Listening for messages on %s:\n", subscriptionName.toString()); + // Allow the subscriber to run for 30s unless an unrecoverable error occurs. + subscriber.awaitTerminated(30, TimeUnit.SECONDS); + } catch (TimeoutException timeoutException) { + // Shut down the subscriber after 30s. Stop receiving messages. + subscriber.stopAsync(); + } + } +} +// [END pubsub_dead_letter_delivery_attempt] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/RemoveDeadLetterPolicyExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/RemoveDeadLetterPolicyExample.java new file mode 100644 index 000000000000..529850574a02 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/RemoveDeadLetterPolicyExample.java @@ -0,0 +1,74 @@ +/* + * Copyright 2020 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. + */ + +package pubsub; + +// [START pubsub_dead_letter_remove] + +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.protobuf.FieldMask; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.TopicName; +import com.google.pubsub.v1.UpdateSubscriptionRequest; + +public class RemoveDeadLetterPolicyExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // This is an existing subscription with dead letter policy. + String subscriptionId = "your-subscription-id"; + // This is an existing topic that the subscription with dead letter policy is attached to. + String topicId = "your-topic-id"; + + RemoveDeadLetterPolicyExample.removeDeadLetterPolicyExample(projectId, subscriptionId, topicId); + } + + public static void removeDeadLetterPolicyExample( + String projectId, String subscriptionId, String topicId) throws Exception { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + TopicName topicName = TopicName.of(projectId, topicId); + + // Construct the subscription you expect to have after the request. Here, + // values in the required fields (name, topic) help identify the subscription. + // No dead letter policy is supplied. + Subscription expectedSubscription = + Subscription.newBuilder() + .setName(subscriptionName.toString()) + .setTopic(topicName.toString()) + .build(); + + // Construct a field mask to indicate which field to update in the subscription. + FieldMask updateMask = FieldMask.newBuilder().addPaths("dead_letter_policy").build(); + + UpdateSubscriptionRequest request = + UpdateSubscriptionRequest.newBuilder() + .setSubscription(expectedSubscription) + .setUpdateMask(updateMask) + .build(); + + Subscription response = subscriptionAdminClient.updateSubscription(request); + + // You should see an empty dead letter topic field inside the dead letter policy. + System.out.println("After: " + response.getAllFields()); + } + } +} +// [END pubsub_dead_letter_remove] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/ResumePublishWithOrderingKeys.java b/java-pubsub/samples/snippets/src/main/java/pubsub/ResumePublishWithOrderingKeys.java new file mode 100644 index 000000000000..ce5e9175432e --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/ResumePublishWithOrderingKeys.java @@ -0,0 +1,99 @@ +/* + * Copyright 2020 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. + */ + +package pubsub; + +// [START pubsub_resume_publish_with_ordering_keys] +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutureCallback; +import com.google.api.core.ApiFutures; +import com.google.api.gax.rpc.ApiException; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +public class ResumePublishWithOrderingKeys { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // Choose an existing topic. + String topicId = "your-topic-id"; + + resumePublishWithOrderingKeysExample(projectId, topicId); + } + + public static void resumePublishWithOrderingKeysExample(String projectId, String topicId) + throws IOException, InterruptedException { + TopicName topicName = TopicName.of(projectId, topicId); + // Create a publisher and set message ordering to true. + Publisher publisher = + Publisher.newBuilder(topicName) + .setEnableMessageOrdering(true) + .setEndpoint("us-east1-pubsub.googleapis.com:443") + .build(); + + try { + Map messages = new LinkedHashMap(); + messages.put("message1", "key1"); + messages.put("message2", "key2"); + messages.put("message3", "key1"); + messages.put("message4", "key2"); + + for (Map.Entry entry : messages.entrySet()) { + ByteString data = ByteString.copyFromUtf8(entry.getKey()); + PubsubMessage pubsubMessage = + PubsubMessage.newBuilder().setData(data).setOrderingKey(entry.getValue()).build(); + ApiFuture future = publisher.publish(pubsubMessage); + + // Add an asynchronous callback to handle publish success / failure. + ApiFutures.addCallback( + future, + new ApiFutureCallback() { + + @Override + public void onFailure(Throwable throwable) { + if (throwable instanceof ApiException) { + ApiException apiException = ((ApiException) throwable); + // Details on the API exception. + System.out.println(apiException.getStatusCode().getCode()); + System.out.println(apiException.isRetryable()); + } + System.out.println("Error publishing message : " + pubsubMessage.getData()); + // (Beta) Must call resumePublish to reset key and continue publishing with order. + publisher.resumePublish(pubsubMessage.getOrderingKey()); + } + + @Override + public void onSuccess(String messageId) { + // Once published, returns server-assigned message ids (unique within the topic). + System.out.println(pubsubMessage.getData() + " : " + messageId); + } + }, + MoreExecutors.directExecutor()); + } + } finally { + publisher.shutdown(); + publisher.awaitTermination(1, TimeUnit.MINUTES); + } + } +} +// [END pubsub_resume_publish_with_ordering_keys] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/RollbackSchemaExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/RollbackSchemaExample.java new file mode 100644 index 000000000000..0af304ed5203 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/RollbackSchemaExample.java @@ -0,0 +1,53 @@ +/* + * Copyright 2023 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. + */ + +package pubsub; + +// [START pubsub_rollback_schema] + +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.pubsub.v1.SchemaServiceClient; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.SchemaName; +import java.io.IOException; + +public class RollbackSchemaExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project"; + String schemaId = "your-schema"; + String revisionId = "your-revision"; + + rollbackSchemaExample(projectId, schemaId, revisionId); + } + + public static void rollbackSchemaExample(String projectId, String schemaId, String revisionId) + throws IOException { + SchemaName schemaName = SchemaName.of(projectId, schemaId); + + try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) { + + Schema schema = schemaServiceClient.rollbackSchema(schemaName, revisionId); + + System.out.println("Rolled back a schema:" + schema); + + } catch (NotFoundException e) { + System.out.println(schemaName + "not found."); + } + } +} +// [END pubsub_rollback_schema] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/SetSubscriptionPolicyExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/SetSubscriptionPolicyExample.java new file mode 100644 index 000000000000..f5b19f6854b6 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/SetSubscriptionPolicyExample.java @@ -0,0 +1,67 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_set_subscription_policy] + +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.iam.v1.Binding; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.pubsub.v1.ProjectSubscriptionName; +import java.io.IOException; + +public class SetSubscriptionPolicyExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + + setSubscriptionPolicyExample(projectId, subscriptionId); + } + + public static void setSubscriptionPolicyExample(String projectId, String subscriptionId) + throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + GetIamPolicyRequest getIamPolicyRequest = + GetIamPolicyRequest.newBuilder().setResource(subscriptionName.toString()).build(); + Policy oldPolicy = subscriptionAdminClient.getIamPolicy(getIamPolicyRequest); + + // Create new role -> members binding + Binding binding = + Binding.newBuilder() + .setRole("roles/pubsub.editor") + .addMembers("domain:google.com") + .build(); + + // Add new binding to updated policy + Policy updatedPolicy = Policy.newBuilder(oldPolicy).addBindings(binding).build(); + + SetIamPolicyRequest setIamPolicyRequest = + SetIamPolicyRequest.newBuilder() + .setResource(subscriptionName.toString()) + .setPolicy(updatedPolicy) + .build(); + Policy newPolicy = subscriptionAdminClient.setIamPolicy(setIamPolicyRequest); + System.out.println("New subscription policy: " + newPolicy); + } + } +} +// [END pubsub_set_subscription_policy] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/SetTopicPolicyExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/SetTopicPolicyExample.java new file mode 100644 index 000000000000..6a2359e8c355 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/SetTopicPolicyExample.java @@ -0,0 +1,65 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_set_topic_policy] + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.iam.v1.Binding; +import com.google.iam.v1.GetIamPolicyRequest; +import com.google.iam.v1.Policy; +import com.google.iam.v1.SetIamPolicyRequest; +import com.google.pubsub.v1.TopicName; +import java.io.IOException; + +public class SetTopicPolicyExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + setTopicPolicyExample(projectId, topicId); + } + + public static void setTopicPolicyExample(String projectId, String topicId) throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + GetIamPolicyRequest getIamPolicyRequest = + GetIamPolicyRequest.newBuilder().setResource(topicName.toString()).build(); + Policy oldPolicy = topicAdminClient.getIamPolicy(getIamPolicyRequest); + + // Create new role -> members binding + Binding binding = + Binding.newBuilder() + .setRole("roles/pubsub.editor") + .addMembers("domain:google.com") + .build(); + + // Add new binding to updated policy + Policy updatedPolicy = Policy.newBuilder(oldPolicy).addBindings(binding).build(); + + SetIamPolicyRequest setIamPolicyRequest = + SetIamPolicyRequest.newBuilder() + .setResource(topicName.toString()) + .setPolicy(updatedPolicy) + .build(); + Policy newPolicy = topicAdminClient.setIamPolicy(setIamPolicyRequest); + System.out.println("New topic policy: " + newPolicy); + } + } +} +// [END pubsub_set_topic_policy] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeAsyncExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeAsyncExample.java new file mode 100644 index 000000000000..4d2f40815097 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeAsyncExample.java @@ -0,0 +1,67 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_quickstart_subscriber] +// [START pubsub_subscriber_async_pull] + +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class SubscribeAsyncExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + + subscribeAsyncExample(projectId, subscriptionId); + } + + public static void subscribeAsyncExample(String projectId, String subscriptionId) { + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + // Instantiate an asynchronous message receiver. + MessageReceiver receiver = + (PubsubMessage message, AckReplyConsumer consumer) -> { + // Handle incoming message, then ack the received message. + System.out.println("Id: " + message.getMessageId()); + System.out.println("Data: " + message.getData().toStringUtf8()); + consumer.ack(); + }; + + Subscriber subscriber = null; + try { + subscriber = Subscriber.newBuilder(subscriptionName, receiver).build(); + // Start the subscriber. + subscriber.startAsync().awaitRunning(); + System.out.printf("Listening for messages on %s:\n", subscriptionName.toString()); + // Allow the subscriber to run for 30s unless an unrecoverable error occurs. + subscriber.awaitTerminated(30, TimeUnit.SECONDS); + } catch (TimeoutException timeoutException) { + // Shut down the subscriber after 30s. Stop receiving messages. + subscriber.stopAsync(); + } + } +} +// [END pubsub_subscriber_async_pull] +// [END pubsub_quickstart_subscriber] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeSyncExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeSyncExample.java new file mode 100644 index 000000000000..e3a03404470e --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeSyncExample.java @@ -0,0 +1,91 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_subscriber_sync_pull] + +import com.google.cloud.pubsub.v1.stub.GrpcSubscriberStub; +import com.google.cloud.pubsub.v1.stub.SubscriberStub; +import com.google.cloud.pubsub.v1.stub.SubscriberStubSettings; +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PullRequest; +import com.google.pubsub.v1.PullResponse; +import com.google.pubsub.v1.ReceivedMessage; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class SubscribeSyncExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + Integer numOfMessages = 10; + + subscribeSyncExample(projectId, subscriptionId, numOfMessages); + } + + public static void subscribeSyncExample( + String projectId, String subscriptionId, Integer numOfMessages) throws IOException { + SubscriberStubSettings subscriberStubSettings = + SubscriberStubSettings.newBuilder() + .setTransportChannelProvider( + SubscriberStubSettings.defaultGrpcTransportProviderBuilder() + .setMaxInboundMessageSize(20 * 1024 * 1024) // 20MB (maximum message size). + .build()) + .build(); + + try (SubscriberStub subscriber = GrpcSubscriberStub.create(subscriberStubSettings)) { + String subscriptionName = ProjectSubscriptionName.format(projectId, subscriptionId); + PullRequest pullRequest = + PullRequest.newBuilder() + .setMaxMessages(numOfMessages) + .setSubscription(subscriptionName) + .build(); + + // Use pullCallable().futureCall to asynchronously perform this operation. + PullResponse pullResponse = subscriber.pullCallable().call(pullRequest); + + // Stop the program if the pull response is empty to avoid acknowledging + // an empty list of ack IDs. + if (pullResponse.getReceivedMessagesList().isEmpty()) { + System.out.println("No message was pulled. Exiting."); + return; + } + + List ackIds = new ArrayList<>(); + for (ReceivedMessage message : pullResponse.getReceivedMessagesList()) { + // Handle received message + // ... + ackIds.add(message.getAckId()); + } + + // Acknowledge received messages. + AcknowledgeRequest acknowledgeRequest = + AcknowledgeRequest.newBuilder() + .setSubscription(subscriptionName) + .addAllAckIds(ackIds) + .build(); + + // Use acknowledgeCallable().futureCall to asynchronously perform this operation. + subscriber.acknowledgeCallable().call(acknowledgeRequest); + System.out.println(pullResponse.getReceivedMessagesList()); + } + } +} +// [END pubsub_subscriber_sync_pull] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeSyncWithLeaseExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeSyncWithLeaseExample.java new file mode 100644 index 000000000000..67b60420338d --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeSyncWithLeaseExample.java @@ -0,0 +1,105 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_subscriber_sync_pull_with_lease] + +import com.google.cloud.pubsub.v1.stub.GrpcSubscriberStub; +import com.google.cloud.pubsub.v1.stub.SubscriberStub; +import com.google.cloud.pubsub.v1.stub.SubscriberStubSettings; +import com.google.pubsub.v1.AcknowledgeRequest; +import com.google.pubsub.v1.ModifyAckDeadlineRequest; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PullRequest; +import com.google.pubsub.v1.PullResponse; +import com.google.pubsub.v1.ReceivedMessage; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class SubscribeSyncWithLeaseExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + Integer numOfMessages = 10; + + subscribeSyncWithLeaseExample(projectId, subscriptionId, numOfMessages); + } + + public static void subscribeSyncWithLeaseExample( + String projectId, String subscriptionId, Integer numOfMessages) + throws IOException, InterruptedException { + SubscriberStubSettings subscriberStubSettings = + SubscriberStubSettings.newBuilder() + .setTransportChannelProvider( + SubscriberStubSettings.defaultGrpcTransportProviderBuilder() + .setMaxInboundMessageSize(20 << 20) // 20 MB + .build()) + .build(); + + try (SubscriberStub subscriber = GrpcSubscriberStub.create(subscriberStubSettings)) { + + String subscriptionName = ProjectSubscriptionName.format(projectId, subscriptionId); + + PullRequest pullRequest = + PullRequest.newBuilder() + .setMaxMessages(numOfMessages) + .setSubscription(subscriptionName) + .build(); + + // Use pullCallable().futureCall to asynchronously perform this operation. + PullResponse pullResponse = subscriber.pullCallable().call(pullRequest); + + // Stop the program if the pull response is empty to avoid acknowledging + // an empty list of ack IDs. + if (pullResponse.getReceivedMessagesList().isEmpty()) { + System.out.println("No message was pulled. Exiting."); + return; + } + + List ackIds = new ArrayList<>(); + for (ReceivedMessage message : pullResponse.getReceivedMessagesList()) { + ackIds.add(message.getAckId()); + + // Modify the ack deadline of each received message from the default 10 seconds to 30. + // This prevents the server from redelivering the message after the default 10 seconds + // have passed. + ModifyAckDeadlineRequest modifyAckDeadlineRequest = + ModifyAckDeadlineRequest.newBuilder() + .setSubscription(subscriptionName) + .addAckIds(message.getAckId()) + .setAckDeadlineSeconds(30) + .build(); + + subscriber.modifyAckDeadlineCallable().call(modifyAckDeadlineRequest); + } + + // Acknowledge received messages. + AcknowledgeRequest acknowledgeRequest = + AcknowledgeRequest.newBuilder() + .setSubscription(subscriptionName) + .addAllAckIds(ackIds) + .build(); + + // Use acknowledgeCallable().futureCall to asynchronously perform this operation. + subscriber.acknowledgeCallable().call(acknowledgeRequest); + System.out.println(pullResponse.getReceivedMessagesList()); + } + } +} +// [END pubsub_subscriber_sync_pull_with_lease] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithAvroSchemaExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithAvroSchemaExample.java new file mode 100644 index 000000000000..68880d1d307f --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithAvroSchemaExample.java @@ -0,0 +1,109 @@ +/* + * Copyright 2021 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. + */ + +package pubsub; + +// [START pubsub_subscribe_avro_records] + +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import org.apache.avro.io.Decoder; +import org.apache.avro.io.DecoderFactory; +import org.apache.avro.specific.SpecificDatumReader; +import utilities.State; + +public class SubscribeWithAvroSchemaExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // Use an existing subscription. + String subscriptionId = "your-subscription-id"; + + subscribeWithAvroSchemaExample(projectId, subscriptionId); + } + + public static void subscribeWithAvroSchemaExample(String projectId, String subscriptionId) { + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + // Prepare a reader for the encoded Avro records. + SpecificDatumReader reader = new SpecificDatumReader<>(State.getClassSchema()); + + // Instantiate an asynchronous message receiver. + MessageReceiver receiver = + (PubsubMessage message, AckReplyConsumer consumer) -> { + ByteString data = message.getData(); + + // Get the schema encoding type. + String encoding = message.getAttributesMap().get("googclient_schemaencoding"); + + // Send the message data to a byte[] input stream. + InputStream inputStream = new ByteArrayInputStream(data.toByteArray()); + + Decoder decoder = null; + + // Prepare an appropriate decoder for the message data in the input stream + // based on the schema encoding type. + block: + try { + switch (encoding) { + case "BINARY": + decoder = DecoderFactory.get().directBinaryDecoder(inputStream, /* reuse= */ null); + System.out.println("Receiving a binary-encoded message:"); + break; + case "JSON": + decoder = DecoderFactory.get().jsonDecoder(State.getClassSchema(), inputStream); + System.out.println("Receiving a JSON-encoded message:"); + break; + default: + break block; + } + + // Obtain an object of the generated Avro class using the decoder. + State state = reader.read(null, decoder); + System.out.println(state.getName() + " is abbreviated as " + state.getPostAbbr()); + + } catch (IOException e) { + System.err.println(e); + } + + // Ack the message. + consumer.ack(); + }; + + Subscriber subscriber = null; + try { + subscriber = Subscriber.newBuilder(subscriptionName, receiver).build(); + subscriber.startAsync().awaitRunning(); + System.out.printf("Listening for messages on %s:\n", subscriptionName.toString()); + subscriber.awaitTerminated(30, TimeUnit.SECONDS); + } catch (TimeoutException timeoutException) { + subscriber.stopAsync(); + } + } +} +// [END pubsub_subscribe_avro_records] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithAvroSchemaRevisionsExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithAvroSchemaRevisionsExample.java new file mode 100644 index 000000000000..9498bd0204bd --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithAvroSchemaRevisionsExample.java @@ -0,0 +1,158 @@ +/* + * Copyright 2023 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. + */ + +package pubsub; + +// [START pubsub_subscribe_avro_records_with_revisions] + +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.SchemaServiceClient; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.Schema; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import org.apache.avro.io.Decoder; +import org.apache.avro.io.DecoderFactory; +import org.apache.avro.specific.SpecificDatumReader; +import utilities.State; + +public class SubscribeWithAvroSchemaRevisionsExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // Use an existing subscription. + String subscriptionId = "your-subscription-id"; + + subscribeWithAvroSchemaRevisionsExample(projectId, subscriptionId); + } + + static SchemaServiceClient getSchemaServiceClient() { + try { + return SchemaServiceClient.create(); + } catch (IOException e) { + System.out.println("Could not get schema client: " + e); + return null; + } + } + + public static void subscribeWithAvroSchemaRevisionsExample( + String projectId, String subscriptionId) { + // Used to get the schemas for revsions. + final SchemaServiceClient schemaServiceClient = getSchemaServiceClient(); + if (schemaServiceClient == null) { + return; + } + + // Cache for the readers for different revision IDs. + Map> revisionReaders = + new HashMap>(); + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + // Instantiate an asynchronous message receiver. + MessageReceiver receiver = + (PubsubMessage message, AckReplyConsumer consumer) -> { + // Get the schema encoding type. + String name = message.getAttributesMap().get("googclient_schemaname"); + String revision = message.getAttributesMap().get("googclient_schemarevisionid"); + + SpecificDatumReader reader = null; + synchronized (revisionReaders) { + reader = revisionReaders.get(revision); + } + if (reader == null) { + // This is the first time we are seeing this revision. We need to + // fetch the schema and cache its decoder. It would be more typical + // to do this asynchronously, but is shown here in a synchronous + // way to ease readability. + try { + Schema schema = schemaServiceClient.getSchema(name + "@" + revision); + org.apache.avro.Schema avroSchema = + new org.apache.avro.Schema.Parser().parse(schema.getDefinition()); + reader = new SpecificDatumReader(avroSchema, State.getClassSchema()); + synchronized (revisionReaders) { + revisionReaders.put(revision, reader); + } + } catch (Exception e) { + System.out.println("Could not get schema: " + e); + // Without the schema, we cannot read the message, so nack it. + consumer.nack(); + return; + } + } + + ByteString data = message.getData(); + // Send the message data to a byte[] input stream. + InputStream inputStream = new ByteArrayInputStream(data.toByteArray()); + + String encoding = message.getAttributesMap().get("googclient_schemaencoding"); + + Decoder decoder = null; + + // Prepare an appropriate decoder for the message data in the input stream + // based on the schema encoding type. + try { + switch (encoding) { + case "BINARY": + decoder = DecoderFactory.get().directBinaryDecoder(inputStream, /* reuse= */ null); + System.out.println("Receiving a binary-encoded message:"); + break; + case "JSON": + decoder = DecoderFactory.get().jsonDecoder(State.getClassSchema(), inputStream); + System.out.println("Receiving a JSON-encoded message:"); + break; + default: + System.out.println("Unknown message type; nacking."); + consumer.nack(); + break; + } + + // Obtain an object of the generated Avro class using the decoder. + State state = reader.read(null, decoder); + System.out.println(state.getName() + " is abbreviated as " + state.getPostAbbr()); + + // Ack the message. + consumer.ack(); + } catch (IOException e) { + System.err.println(e); + // If we failed to process the message, nack it. + consumer.nack(); + } + }; + + Subscriber subscriber = null; + try { + subscriber = Subscriber.newBuilder(subscriptionName, receiver).build(); + subscriber.startAsync().awaitRunning(); + System.out.printf("Listening for messages on %s:\n", subscriptionName.toString()); + subscriber.awaitTerminated(30, TimeUnit.SECONDS); + } catch (TimeoutException timeoutException) { + subscriber.stopAsync(); + } + } +} +// [END pubsub_subscribe_avro_records_with_revisions] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithConcurrencyControlExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithConcurrencyControlExample.java new file mode 100644 index 000000000000..e24599eb3795 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithConcurrencyControlExample.java @@ -0,0 +1,83 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_subscriber_concurrency_control] + +import com.google.api.gax.core.ExecutorProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class SubscribeWithConcurrencyControlExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + + subscribeWithConcurrencyControlExample(projectId, subscriptionId); + } + + public static void subscribeWithConcurrencyControlExample( + String projectId, String subscriptionId) { + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + // Instantiate an asynchronous message receiver. + MessageReceiver receiver = + (PubsubMessage message, AckReplyConsumer consumer) -> { + // Handle incoming message, then ack the received message. + System.out.println("Id: " + message.getMessageId()); + System.out.println("Data: " + message.getData().toStringUtf8()); + consumer.ack(); + }; + + Subscriber subscriber = null; + try { + // Provides an executor service for processing messages. The default `executorProvider` used + // by the subscriber has a default thread count of 5. + ExecutorProvider executorProvider = + InstantiatingExecutorProvider.newBuilder().setExecutorThreadCount(4).build(); + + // `setParallelPullCount` determines how many StreamingPull streams the subscriber will open + // to receive message. It defaults to 1. `setExecutorProvider` configures an executor for the + // subscriber to process messages. Here, the subscriber is configured to open 2 streams for + // receiving messages, each stream creates a new executor with 4 threads to help process the + // message callbacks. In total 2x4=8 threads are used for message processing. + subscriber = + Subscriber.newBuilder(subscriptionName, receiver) + .setParallelPullCount(2) + .setExecutorProvider(executorProvider) + .build(); + + // Start the subscriber. + subscriber.startAsync().awaitRunning(); + System.out.printf("Listening for messages on %s:\n", subscriptionName.toString()); + // Allow the subscriber to run for 30s unless an unrecoverable error occurs. + subscriber.awaitTerminated(30, TimeUnit.SECONDS); + } catch (TimeoutException timeoutException) { + // Shut down the subscriber after 30s. Stop receiving messages. + subscriber.stopAsync(); + } + } +} +// [END pubsub_subscriber_concurrency_control] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithCustomAttributesExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithCustomAttributesExample.java new file mode 100644 index 000000000000..59255096a3a4 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithCustomAttributesExample.java @@ -0,0 +1,69 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_subscriber_async_pull_custom_attributes] + +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class SubscribeWithCustomAttributesExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + + subscribeWithCustomAttributesExample(projectId, subscriptionId); + } + + public static void subscribeWithCustomAttributesExample(String projectId, String subscriptionId) { + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + // Instantiate an asynchronous message receiver. + MessageReceiver receiver = + (PubsubMessage message, AckReplyConsumer consumer) -> { + // Handle incoming message, then ack the received message. + System.out.println("Id: " + message.getMessageId()); + System.out.println("Data: " + message.getData().toStringUtf8()); + // Print message attributes. + message + .getAttributesMap() + .forEach((key, value) -> System.out.println(key + " = " + value)); + consumer.ack(); + }; + + Subscriber subscriber = null; + try { + subscriber = Subscriber.newBuilder(subscriptionName, receiver).build(); + // Start the subscriber. + subscriber.startAsync().awaitRunning(); + System.out.printf("Listening for messages on %s:\n", subscriptionName.toString()); + // Allow the subscriber to run for 30s unless an unrecoverable error occurs. + subscriber.awaitTerminated(30, TimeUnit.SECONDS); + } catch (TimeoutException timeoutException) { + // Shut down the subscriber after 30s. Stop receiving messages. + subscriber.stopAsync(); + } + } +} +// [END pubsub_subscriber_async_pull_custom_attributes] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithErrorListenerExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithErrorListenerExample.java new file mode 100644 index 000000000000..1e17afe684c8 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithErrorListenerExample.java @@ -0,0 +1,85 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_subscriber_error_listener] + +import com.google.api.gax.core.ExecutorProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class SubscribeWithErrorListenerExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + + subscribeWithErrorListenerExample(projectId, subscriptionId); + } + + public static void subscribeWithErrorListenerExample(String projectId, String subscriptionId) { + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + // Instantiate an asynchronous message receiver. + MessageReceiver receiver = + (PubsubMessage message, AckReplyConsumer consumer) -> { + // Handle incoming message, then ack the received message. + System.out.println("Id: " + message.getMessageId()); + System.out.println("Data: " + message.getData().toStringUtf8()); + consumer.ack(); + }; + + Subscriber subscriber = null; + try { + // Provides an executor service for processing messages. + ExecutorProvider executorProvider = + InstantiatingExecutorProvider.newBuilder().setExecutorThreadCount(4).build(); + + subscriber = + Subscriber.newBuilder(subscriptionName, receiver) + .setExecutorProvider(executorProvider) + .build(); + + // Listen for unrecoverable failures. + subscriber.addListener( + new Subscriber.Listener() { + public void failed(Subscriber.State from, Throwable failure) { + System.out.println("Unrecoverable subscriber failure:" + failure.getStackTrace()); + } + }, + MoreExecutors.directExecutor()); + + // Start the subscriber. + subscriber.startAsync().awaitRunning(); + System.out.printf("Listening for messages on %s:\n", subscriptionName.toString()); + // Allow the subscriber to run for 30s unless an unrecoverable error occurs. + subscriber.awaitTerminated(30, TimeUnit.SECONDS); + } catch (TimeoutException timeoutException) { + // Shut down the subscriber after 30s. Stop receiving messages. + subscriber.stopAsync(); + } + } +} +// [END pubsub_subscriber_error_listener] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithExactlyOnceConsumerWithResponseExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithExactlyOnceConsumerWithResponseExample.java new file mode 100644 index 000000000000..cf5ed324833e --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithExactlyOnceConsumerWithResponseExample.java @@ -0,0 +1,117 @@ +/* + * Copyright 2022 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. + */ + +package pubsub; + +// [START pubsub_subscriber_exactly_once] + +import com.google.cloud.pubsub.v1.AckReplyConsumerWithResponse; +import com.google.cloud.pubsub.v1.AckResponse; +import com.google.cloud.pubsub.v1.MessageReceiverWithAckResponse; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class SubscribeWithExactlyOnceConsumerWithResponseExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + + subscribeWithExactlyOnceConsumerWithResponseExample(projectId, subscriptionId); + } + + public static void subscribeWithExactlyOnceConsumerWithResponseExample( + String projectId, String subscriptionId) { + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + // Instantiate an asynchronous message receiver using `AckReplyConsumerWithResponse` + // instead of `AckReplyConsumer` to get a future that tracks the result of the ack call. + // When exactly once delivery is enabled on the subscription, the message is guaranteed + // to not be delivered again if the ack future succeeds. + MessageReceiverWithAckResponse receiverWithResponse = + (PubsubMessage message, AckReplyConsumerWithResponse consumerWithResponse) -> { + try { + // Handle incoming message, then ack the message, and receive an ack response. + System.out.println("Message received: " + message.getData().toStringUtf8()); + Future ackResponseFuture = consumerWithResponse.ack(); + + // Retrieve the completed future for the ack response from the server. + AckResponse ackResponse = ackResponseFuture.get(); + + switch (ackResponse) { + case SUCCESSFUL: + // Success code means that this MessageID will not be delivered again. + System.out.println("Message successfully acked: " + message.getMessageId()); + break; + case INVALID: + System.out.println( + "Message failed to ack with a response of Invalid. Id: " + + message.getMessageId()); + break; + case PERMISSION_DENIED: + System.out.println( + "Message failed to ack with a response of Permission Denied. Id: " + + message.getMessageId()); + break; + case FAILED_PRECONDITION: + System.out.println( + "Message failed to ack with a response of Failed Precondition. Id: " + + message.getMessageId()); + break; + case OTHER: + System.out.println( + "Message failed to ack with a response of Other. Id: " + + message.getMessageId()); + break; + default: + break; + } + } catch (InterruptedException | ExecutionException e) { + System.out.println( + "MessageId: " + message.getMessageId() + " failed when retrieving future"); + } catch (Throwable t) { + System.out.println("Throwable caught" + t.getMessage()); + } + }; + + Subscriber subscriber = null; + try { + // Pub/Sub's exactly once delivery guarantee only applies when subscribers connect to the + // service in the same region. + // For list of locational endpoints for Pub/Sub, see + // https://cloud.google.com/pubsub/docs/reference/service_apis_overview#list_of_locational_endpoints + subscriber = + Subscriber.newBuilder(subscriptionName, receiverWithResponse) + .setEndpoint("us-west1-pubsub.googleapis.com:443") + .build(); + // Start the subscriber. + subscriber.startAsync().awaitRunning(); + System.out.printf("Listening for messages on %s:\n", subscriptionName.toString()); + // Allow the subscriber to run for 30s unless an unrecoverable error occurs. + subscriber.awaitTerminated(30, TimeUnit.SECONDS); + } catch (TimeoutException timeoutException) { + // Shut down the subscriber after 30s. Stop receiving messages. + subscriber.stopAsync(); + } + } +} +// [END pubsub_subscriber_exactly_once] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithFlowControlSettingsExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithFlowControlSettingsExample.java new file mode 100644 index 000000000000..1884c4bcc17f --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithFlowControlSettingsExample.java @@ -0,0 +1,84 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_subscriber_flow_settings] + +import com.google.api.gax.batching.FlowControlSettings; +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class SubscribeWithFlowControlSettingsExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + + subscribeWithFlowControlSettingsExample(projectId, subscriptionId); + } + + public static void subscribeWithFlowControlSettingsExample( + String projectId, String subscriptionId) { + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + // Instantiate an asynchronous message receiver. + MessageReceiver receiver = + (PubsubMessage message, AckReplyConsumer consumer) -> { + // Handle incoming message, then ack the received message. + System.out.println("Id: " + message.getMessageId()); + System.out.println("Data: " + message.getData().toStringUtf8()); + consumer.ack(); + }; + + Subscriber subscriber = null; + + // The subscriber will pause the message stream and stop receiving more messsages from the + // server if any one of the conditions is met. + FlowControlSettings flowControlSettings = + FlowControlSettings.newBuilder() + // 1,000 outstanding messages. Must be >0. It controls the maximum number of messages + // the subscriber receives before pausing the message stream. + .setMaxOutstandingElementCount(1000L) + // 100 MiB. Must be >0. It controls the maximum size of messages the subscriber + // receives before pausing the message stream. + .setMaxOutstandingRequestBytes(100L * 1024L * 1024L) + .build(); + + try { + subscriber = + Subscriber.newBuilder(subscriptionName, receiver) + .setFlowControlSettings(flowControlSettings) + .build(); + + // Start the subscriber. + subscriber.startAsync().awaitRunning(); + System.out.printf("Listening for messages on %s:\n", subscriptionName.toString()); + // Allow the subscriber to run for 30s unless an unrecoverable error occurs. + subscriber.awaitTerminated(30, TimeUnit.SECONDS); + } catch (TimeoutException timeoutException) { + // Shut down the subscriber after 30s. Stop receiving messages. + subscriber.stopAsync(); + } + } +} +// [END pubsub_subscriber_flow_settings] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithProtoSchemaExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithProtoSchemaExample.java new file mode 100644 index 000000000000..65ff2b39d029 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/SubscribeWithProtoSchemaExample.java @@ -0,0 +1,94 @@ +/* + * Copyright 2021 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. + */ + +package pubsub; + +// [START pubsub_subscribe_proto_messages] + +import com.google.cloud.pubsub.v1.AckReplyConsumer; +import com.google.cloud.pubsub.v1.MessageReceiver; +import com.google.cloud.pubsub.v1.Subscriber; +import com.google.protobuf.ByteString; +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.util.JsonFormat; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.PubsubMessage; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import utilities.StateProto.State; + +public class SubscribeWithProtoSchemaExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // Use an existing subscription. + String subscriptionId = "your-subscription-id"; + + subscribeWithProtoSchemaExample(projectId, subscriptionId); + } + + public static void subscribeWithProtoSchemaExample(String projectId, String subscriptionId) { + + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + MessageReceiver receiver = + (PubsubMessage message, AckReplyConsumer consumer) -> { + ByteString data = message.getData(); + + // Get the schema encoding type. + String encoding = message.getAttributesMap().get("googclient_schemaencoding"); + + block: + try { + switch (encoding) { + case "BINARY": + // Obtain an object of the generated proto class. + State state = State.parseFrom(data); + System.out.println("Received a BINARY-formatted message: " + state); + break; + + case "JSON": + State.Builder stateBuilder = State.newBuilder(); + JsonFormat.parser().merge(data.toStringUtf8(), stateBuilder); + System.out.println("Received a JSON-formatted message:" + stateBuilder.build()); + break; + + default: + break block; + } + } catch (InvalidProtocolBufferException e) { + e.printStackTrace(); + } + + consumer.ack(); + System.out.println("Ack'ed the message"); + }; + + // Create subscriber client. + Subscriber subscriber = Subscriber.newBuilder(subscriptionName, receiver).build(); + + try { + subscriber.startAsync().awaitRunning(); + System.out.printf("Listening for messages on %s:\n", subscriptionName); + subscriber.awaitTerminated(30, TimeUnit.SECONDS); + } catch (TimeoutException timeoutException) { + subscriber.stopAsync(); + } + } +} +// [END pubsub_subscribe_proto_messages] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/TestSubscriptionPermissionsExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/TestSubscriptionPermissionsExample.java new file mode 100644 index 000000000000..977f30b57f68 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/TestSubscriptionPermissionsExample.java @@ -0,0 +1,61 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_test_subscription_permissions] + +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.pubsub.v1.ProjectSubscriptionName; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; + +public class TestSubscriptionPermissionsExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + + testSubscriptionPermissionsExample(projectId, subscriptionId); + } + + public static void testSubscriptionPermissionsExample(String projectId, String subscriptionId) + throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + + List permissions = new LinkedList<>(); + permissions.add("pubsub.subscriptions.consume"); + permissions.add("pubsub.subscriptions.update"); + + TestIamPermissionsRequest testIamPermissionsRequest = + TestIamPermissionsRequest.newBuilder() + .setResource(subscriptionName.toString()) + .addAllPermissions(permissions) + .build(); + + TestIamPermissionsResponse testedPermissionsResponse = + subscriptionAdminClient.testIamPermissions(testIamPermissionsRequest); + + System.out.println("Tested:\n" + testedPermissionsResponse); + } + } +} +// [END pubsub_test_subscription_permissions] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/TestTopicPermissionsExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/TestTopicPermissionsExample.java new file mode 100644 index 000000000000..6e8ccfaed2f2 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/TestTopicPermissionsExample.java @@ -0,0 +1,62 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_test_topic_permissions] + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.iam.v1.TestIamPermissionsRequest; +import com.google.iam.v1.TestIamPermissionsResponse; +import com.google.pubsub.v1.ProjectTopicName; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; + +public class TestTopicPermissionsExample { + + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + + testTopicPermissionsExample(projectId, topicId); + } + + public static void testTopicPermissionsExample(String projectId, String topicId) + throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + + List permissions = new LinkedList<>(); + permissions.add("pubsub.topics.attachSubscription"); + permissions.add("pubsub.topics.publish"); + permissions.add("pubsub.topics.update"); + + TestIamPermissionsRequest testIamPermissionsRequest = + TestIamPermissionsRequest.newBuilder() + .setResource(topicName.toString()) + .addAllPermissions(permissions) + .build(); + + TestIamPermissionsResponse testedPermissionsResponse = + topicAdminClient.testIamPermissions(testIamPermissionsRequest); + + System.out.println("Tested:\n" + testedPermissionsResponse); + } + } +} +// [END pubsub_test_topic_permissions] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/UpdateDeadLetterPolicyExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/UpdateDeadLetterPolicyExample.java new file mode 100644 index 000000000000..d2946e8f3963 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/UpdateDeadLetterPolicyExample.java @@ -0,0 +1,95 @@ +/* + * Copyright 2020 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. + */ + +package pubsub; + +// [START pubsub_dead_letter_update_subscription] + +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.protobuf.FieldMask; +import com.google.pubsub.v1.DeadLetterPolicy; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.TopicName; +import com.google.pubsub.v1.UpdateSubscriptionRequest; +import java.io.IOException; + +public class UpdateDeadLetterPolicyExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // This is an existing subscription with a dead letter policy. + String subscriptionId = "your-subscription-id"; + // This is an existing topic that the subscription with dead letter policy is attached to. + String topicId = "your-topic-id"; + // This is an existing dead letter topic that the subscription with dead letter policy forwards + // dead letter messages to. + String deadLetterTopicId = "your-dead-letter-topic-id"; + + UpdateDeadLetterPolicyExample.updateDeadLetterPolicyExample( + projectId, subscriptionId, topicId, deadLetterTopicId); + } + + public static void updateDeadLetterPolicyExample( + String projectId, String subscriptionId, String topicId, String deadLetterTopicId) + throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + + SubscriptionName subscriptionName = SubscriptionName.of(projectId, subscriptionId); + + System.out.println( + "Before: " + subscriptionAdminClient.getSubscription(subscriptionName).getAllFields()); + + TopicName topicName = TopicName.of(projectId, topicId); + TopicName deadLetterTopicName = TopicName.of(projectId, deadLetterTopicId); + + // Construct the dead letter policy you expect to have after the update. + DeadLetterPolicy deadLetterPolicy = + DeadLetterPolicy.newBuilder() + .setDeadLetterTopic(deadLetterTopicName.toString()) + .setMaxDeliveryAttempts(20) + .build(); + + // Construct the subscription with the dead letter policy you expect to have + // after the update. Here, values in the required fields (name, topic) help + // identify the subscription. + Subscription subscription = + Subscription.newBuilder() + .setName(subscriptionName.toString()) + .setTopic(topicName.toString()) + .setDeadLetterPolicy(deadLetterPolicy) + .build(); + + // Construct a field mask to indicate which field to update in the subscription. + FieldMask updateMask = + FieldMask.newBuilder().addPaths("dead_letter_policy.max_delivery_attempts").build(); + + UpdateSubscriptionRequest request = + UpdateSubscriptionRequest.newBuilder() + .setSubscription(subscription) + .setUpdateMask(updateMask) + .build(); + + Subscription response = subscriptionAdminClient.updateSubscription(request); + + System.out.println("After: " + response.getAllFields()); + System.out.println( + "Max delivery attempts is now " + + response.getDeadLetterPolicy().getMaxDeliveryAttempts()); + } + } +} +// [END pubsub_dead_letter_update_subscription] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/UpdatePushConfigurationExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/UpdatePushConfigurationExample.java new file mode 100644 index 000000000000..d4a583e928ed --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/UpdatePushConfigurationExample.java @@ -0,0 +1,49 @@ +/* + * Copyright 2016 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. + */ + +package pubsub; + +// [START pubsub_update_push_configuration] + +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.pubsub.v1.PushConfig; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.SubscriptionName; +import java.io.IOException; + +public class UpdatePushConfigurationExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String subscriptionId = "your-subscription-id"; + String pushEndpoint = "https://my-test-project.appspot.com/push"; + + updatePushConfigurationExample(projectId, subscriptionId, pushEndpoint); + } + + public static void updatePushConfigurationExample( + String projectId, String subscriptionId, String pushEndpoint) throws IOException { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + SubscriptionName subscriptionName = SubscriptionName.of(projectId, subscriptionId); + PushConfig pushConfig = PushConfig.newBuilder().setPushEndpoint(pushEndpoint).build(); + subscriptionAdminClient.modifyPushConfig(subscriptionName, pushConfig); + Subscription subscription = subscriptionAdminClient.getSubscription(subscriptionName); + System.out.println( + "Updated push endpoint to: " + subscription.getPushConfig().getPushEndpoint()); + } + } +} +// [END pubsub_update_push_configuration] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/UpdateTopicSchemaExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/UpdateTopicSchemaExample.java new file mode 100644 index 000000000000..4383fffd61f0 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/UpdateTopicSchemaExample.java @@ -0,0 +1,80 @@ +/* + * Copyright 2023 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. + */ + +package pubsub; + +// [START pubsub_update_topic_schema] + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.protobuf.FieldMask; +import com.google.pubsub.v1.SchemaSettings; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import com.google.pubsub.v1.UpdateTopicRequest; +import java.io.IOException; + +public class UpdateTopicSchemaExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + // This is an existing topic that has schema settings attached to it. + String topicId = "your-topic-id"; + // Set the minimum and maximum revsion ID + String firstRevisionId = "your-revision-id"; + String lastRevisionId = "your-revision-id"; + + UpdateTopicSchemaExample.updateTopicSchemaExample( + projectId, topicId, firstRevisionId, lastRevisionId); + } + + public static void updateTopicSchemaExample( + String projectId, String topicId, String firstRevisionid, String lastRevisionId) + throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + + TopicName topicName = TopicName.of(projectId, topicId); + + // Construct the schema settings with the changes you want to make. + SchemaSettings schemaSettings = + SchemaSettings.newBuilder() + .setFirstRevisionId(firstRevisionid) + .setLastRevisionId(lastRevisionId) + .build(); + + // Construct the topic with the schema settings you want to change. + Topic topic = + Topic.newBuilder() + .setName(topicName.toString()) + .setSchemaSettings(schemaSettings) + .build(); + + // Construct a field mask to indicate which field to update in the topic. + FieldMask updateMask = + FieldMask.newBuilder() + .addPaths("schema_settings.first_revision_id") + .addPaths("schema_settings.last_revision_id") + .build(); + + UpdateTopicRequest request = + UpdateTopicRequest.newBuilder().setTopic(topic).setUpdateMask(updateMask).build(); + + Topic response = topicAdminClient.updateTopic(request); + + System.out.println("Updated topic with schema: " + topic.getName()); + } + } +} +// [END pubsub_update_topic_schema] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/UpdateTopicTypeExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/UpdateTopicTypeExample.java new file mode 100644 index 000000000000..6b8497ea71c4 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/UpdateTopicTypeExample.java @@ -0,0 +1,86 @@ +/* + * 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. + */ + +package pubsub; + +// [START pubsub_update_topic_type] + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.protobuf.FieldMask; +import com.google.pubsub.v1.IngestionDataSourceSettings; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import com.google.pubsub.v1.UpdateTopicRequest; +import java.io.IOException; + +public class UpdateTopicTypeExample { + public static void main(String... args) throws Exception { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String topicId = "your-topic-id"; + // Kinesis ingestion settings. + String streamArn = "stream-arn"; + String consumerArn = "consumer-arn"; + String awsRoleArn = "aws-role-arn"; + String gcpServiceAccount = "gcp-service-account"; + + UpdateTopicTypeExample.updateTopicTypeExample( + projectId, topicId, streamArn, consumerArn, awsRoleArn, gcpServiceAccount); + } + + public static void updateTopicTypeExample( + String projectId, + String topicId, + String streamArn, + String consumerArn, + String awsRoleArn, + String gcpServiceAccount) + throws IOException { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + TopicName topicName = TopicName.of(projectId, topicId); + + IngestionDataSourceSettings.AwsKinesis awsKinesis = + IngestionDataSourceSettings.AwsKinesis.newBuilder() + .setStreamArn(streamArn) + .setConsumerArn(consumerArn) + .setAwsRoleArn(awsRoleArn) + .setGcpServiceAccount(gcpServiceAccount) + .build(); + IngestionDataSourceSettings ingestionDataSourceSettings = + IngestionDataSourceSettings.newBuilder().setAwsKinesis(awsKinesis).build(); + + // Construct the topic with Kinesis ingestion settings. + Topic topic = + Topic.newBuilder() + .setName(topicName.toString()) + .setIngestionDataSourceSettings(ingestionDataSourceSettings) + .build(); + + // Construct a field mask to indicate which field to update in the topic. + FieldMask updateMask = + FieldMask.newBuilder().addPaths("ingestion_data_source_settings").build(); + + UpdateTopicRequest request = + UpdateTopicRequest.newBuilder().setTopic(topic).setUpdateMask(updateMask).build(); + + Topic response = topicAdminClient.updateTopic(request); + + System.out.println( + "Updated topic with Kinesis ingestion settings: " + response.getAllFields()); + } + } +} +// [END pubsub_update_topic_type] diff --git a/java-pubsub/samples/snippets/src/main/java/pubsub/UsePubSubEmulatorExample.java b/java-pubsub/samples/snippets/src/main/java/pubsub/UsePubSubEmulatorExample.java new file mode 100644 index 000000000000..c73aca098414 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/pubsub/UsePubSubEmulatorExample.java @@ -0,0 +1,85 @@ +/* + * Copyright 2017 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. + */ + +package pubsub; + +/** + * Snippet that demonstrates creating Pub/Sub clients using the Google Cloud Pub/Sub emulator. + * + *

Note: clients cannot start/stop the emulator. + */ + +// [START pubsub_use_emulator] + +import com.google.api.core.ApiFuture; +import com.google.api.gax.core.CredentialsProvider; +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.grpc.GrpcTransportChannel; +import com.google.api.gax.rpc.FixedTransportChannelProvider; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.cloud.pubsub.v1.TopicAdminSettings; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; + +public class UsePubSubEmulatorExample { + public static void main(String... args) throws Exception { + String hostport = System.getenv("PUBSUB_EMULATOR_HOST"); + ManagedChannel channel = ManagedChannelBuilder.forTarget(hostport).usePlaintext().build(); + try { + TransportChannelProvider channelProvider = + FixedTransportChannelProvider.create(GrpcTransportChannel.create(channel)); + CredentialsProvider credentialsProvider = NoCredentialsProvider.create(); + + // Set the channel and credentials provider when creating a `TopicAdminClient`. + // Can be done similarly for a `SubscriptionAdminClient`. + TopicAdminClient topicAdminClient = + TopicAdminClient.create( + TopicAdminSettings.newBuilder() + .setTransportChannelProvider(channelProvider) + .setCredentialsProvider(credentialsProvider) + .build()); + + TopicName topicName = TopicName.of("my-project-id", "my-topic-id"); + Topic topic = topicAdminClient.createTopic(topicName); + System.out.println("Created topic: " + topic.getName()); + + // Set the channel and credentials provider when creating a `Publisher`. + // Can be done similarly for a `Subscriber`. + Publisher publisher = + Publisher.newBuilder(topicName) + .setChannelProvider(channelProvider) + .setCredentialsProvider(credentialsProvider) + .build(); + + String message = "Hello World!"; + ByteString data = ByteString.copyFromUtf8(message); + PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build(); + + ApiFuture messageIdFuture = publisher.publish(pubsubMessage); + String messageId = messageIdFuture.get(); + System.out.println("Published message ID: " + messageId); + } finally { + channel.shutdown(); + } + } +} +// [END pubsub_use_emulator] diff --git a/java-pubsub/samples/snippets/src/main/java/utilities/State.java b/java-pubsub/samples/snippets/src/main/java/utilities/State.java new file mode 100644 index 000000000000..60d869e23b7d --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/utilities/State.java @@ -0,0 +1,460 @@ +/* + * Copyright 2021 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. + */ + +/** + * Autogenerated by Avro + * + *

DO NOT EDIT DIRECTLY + */ + +/** + * This file is created using Avro tools. + * + *

To download, visit https://avro.apache.org/releases.html#Download + * + *

Run the following command from the `samples/snippets` directory to generate this class: + * + *

`java -jar /location/to/your/avro-tools-1.10.1.jar compile schema + * src/main/resources/us-states.avsc src/main/java/` + */ +package utilities; + +import org.apache.avro.message.BinaryMessageDecoder; +import org.apache.avro.message.BinaryMessageEncoder; +import org.apache.avro.message.SchemaStore; +import org.apache.avro.specific.SpecificData; +import org.apache.avro.util.Utf8; + +/** A list of states in the United States of America. */ +@org.apache.avro.specific.AvroGenerated +public class State extends org.apache.avro.specific.SpecificRecordBase + implements org.apache.avro.specific.SpecificRecord { + private static final long serialVersionUID = -6098929419967278282L; + public static final org.apache.avro.Schema SCHEMA$ = + new org.apache.avro.Schema.Parser() + .parse( + "{\"type\":\"record\",\"name\":\"State\",\"namespace\":\"utilities\",\"doc\":\"A list" + + " of states in the United States of" + + " America.\",\"fields\":[{\"name\":\"name\",\"type\":\"string\",\"doc\":\"The" + + " common name of the" + + " state.\"},{\"name\":\"post_abbr\",\"type\":\"string\",\"doc\":\"The postal" + + " code abbreviation of the state.\"}]}"); + + public static org.apache.avro.Schema getClassSchema() { + return SCHEMA$; + } + + private static SpecificData MODEL$ = new SpecificData(); + + private static final BinaryMessageEncoder ENCODER = + new BinaryMessageEncoder(MODEL$, SCHEMA$); + + private static final BinaryMessageDecoder DECODER = + new BinaryMessageDecoder(MODEL$, SCHEMA$); + + /** + * Return the BinaryMessageEncoder instance used by this class. + * + * @return the message encoder used by this class + */ + public static BinaryMessageEncoder getEncoder() { + return ENCODER; + } + + /** + * Return the BinaryMessageDecoder instance used by this class. + * + * @return the message decoder used by this class + */ + public static BinaryMessageDecoder getDecoder() { + return DECODER; + } + + /** + * Create a new BinaryMessageDecoder instance for this class that uses the specified {@link + * SchemaStore}. + * + * @param resolver a {@link SchemaStore} used to find schemas by fingerprint + * @return a BinaryMessageDecoder instance for this class backed by the given SchemaStore + */ + public static BinaryMessageDecoder createDecoder(SchemaStore resolver) { + return new BinaryMessageDecoder(MODEL$, SCHEMA$, resolver); + } + + /** + * Serializes this State to a ByteBuffer. + * + * @return a buffer holding the serialized data for this instance + * @throws java.io.IOException if this instance could not be serialized + */ + public java.nio.ByteBuffer toByteBuffer() throws java.io.IOException { + return ENCODER.encode(this); + } + + /** + * Deserializes a State from a ByteBuffer. + * + * @param b a byte buffer holding serialized data for an instance of this class + * @return a State instance decoded from the given buffer + * @throws java.io.IOException if the given bytes could not be deserialized into an instance of + * this class + */ + public static State fromByteBuffer(java.nio.ByteBuffer b) throws java.io.IOException { + return DECODER.decode(b); + } + + /** The common name of the state. */ + private java.lang.CharSequence name; + + /** The postal code abbreviation of the state. */ + private java.lang.CharSequence post_abbr; + + /** + * Default constructor. Note that this does not initialize fields to their default values from the + * schema. If that is desired then one should use newBuilder(). + */ + public State() {} + + /** + * All-args constructor. + * + * @param name The common name of the state. + * @param post_abbr The postal code abbreviation of the state. + */ + public State(java.lang.CharSequence name, java.lang.CharSequence post_abbr) { + this.name = name; + this.post_abbr = post_abbr; + } + + public org.apache.avro.specific.SpecificData getSpecificData() { + return MODEL$; + } + + public org.apache.avro.Schema getSchema() { + return SCHEMA$; + } + + // Used by DatumWriter. Applications should not call. + public java.lang.Object get(int field$) { + switch (field$) { + case 0: + return name; + case 1: + return post_abbr; + default: + throw new IndexOutOfBoundsException("Invalid index: " + field$); + } + } + + // Used by DatumReader. Applications should not call. + @SuppressWarnings(value = "unchecked") + public void put(int field$, java.lang.Object value$) { + switch (field$) { + case 0: + name = (java.lang.CharSequence) value$; + break; + case 1: + post_abbr = (java.lang.CharSequence) value$; + break; + default: + throw new IndexOutOfBoundsException("Invalid index: " + field$); + } + } + + /** + * Gets the value of the 'name' field. + * + * @return The common name of the state. + */ + public java.lang.CharSequence getName() { + return name; + } + + /** + * Sets the value of the 'name' field. The common name of the state. + * + * @param value the value to set. + */ + public void setName(java.lang.CharSequence value) { + this.name = value; + } + + /** + * Gets the value of the 'post_abbr' field. + * + * @return The postal code abbreviation of the state. + */ + public java.lang.CharSequence getPostAbbr() { + return post_abbr; + } + + /** + * Sets the value of the 'post_abbr' field. The postal code abbreviation of the state. + * + * @param value the value to set. + */ + public void setPostAbbr(java.lang.CharSequence value) { + this.post_abbr = value; + } + + /** + * Creates a new State RecordBuilder. + * + * @return A new State RecordBuilder + */ + public static utilities.State.Builder newBuilder() { + return new utilities.State.Builder(); + } + + /** + * Creates a new State RecordBuilder by copying an existing Builder. + * + * @param other The existing builder to copy. + * @return A new State RecordBuilder + */ + public static utilities.State.Builder newBuilder(utilities.State.Builder other) { + if (other == null) { + return new utilities.State.Builder(); + } else { + return new utilities.State.Builder(other); + } + } + + /** + * Creates a new State RecordBuilder by copying an existing State instance. + * + * @param other The existing instance to copy. + * @return A new State RecordBuilder + */ + public static utilities.State.Builder newBuilder(utilities.State other) { + if (other == null) { + return new utilities.State.Builder(); + } else { + return new utilities.State.Builder(other); + } + } + + /** RecordBuilder for State instances. */ + @org.apache.avro.specific.AvroGenerated + public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase + implements org.apache.avro.data.RecordBuilder { + + /** The common name of the state. */ + private java.lang.CharSequence name; + + /** The postal code abbreviation of the state. */ + private java.lang.CharSequence post_abbr; + + /** Creates a new Builder */ + private Builder() { + super(SCHEMA$); + } + + /** + * Creates a Builder by copying an existing Builder. + * + * @param other The existing Builder to copy. + */ + private Builder(utilities.State.Builder other) { + super(other); + if (isValidValue(fields()[0], other.name)) { + this.name = data().deepCopy(fields()[0].schema(), other.name); + fieldSetFlags()[0] = other.fieldSetFlags()[0]; + } + if (isValidValue(fields()[1], other.post_abbr)) { + this.post_abbr = data().deepCopy(fields()[1].schema(), other.post_abbr); + fieldSetFlags()[1] = other.fieldSetFlags()[1]; + } + } + + /** + * Creates a Builder by copying an existing State instance + * + * @param other The existing instance to copy. + */ + private Builder(utilities.State other) { + super(SCHEMA$); + if (isValidValue(fields()[0], other.name)) { + this.name = data().deepCopy(fields()[0].schema(), other.name); + fieldSetFlags()[0] = true; + } + if (isValidValue(fields()[1], other.post_abbr)) { + this.post_abbr = data().deepCopy(fields()[1].schema(), other.post_abbr); + fieldSetFlags()[1] = true; + } + } + + /** + * Gets the value of the 'name' field. The common name of the state. + * + * @return The value. + */ + public java.lang.CharSequence getName() { + return name; + } + + /** + * Sets the value of the 'name' field. The common name of the state. + * + * @param value The value of 'name'. + * @return This builder. + */ + public utilities.State.Builder setName(java.lang.CharSequence value) { + validate(fields()[0], value); + this.name = value; + fieldSetFlags()[0] = true; + return this; + } + + /** + * Checks whether the 'name' field has been set. The common name of the state. + * + * @return True if the 'name' field has been set, false otherwise. + */ + public boolean hasName() { + return fieldSetFlags()[0]; + } + + /** + * Clears the value of the 'name' field. The common name of the state. + * + * @return This builder. + */ + public utilities.State.Builder clearName() { + name = null; + fieldSetFlags()[0] = false; + return this; + } + + /** + * Gets the value of the 'post_abbr' field. The postal code abbreviation of the state. + * + * @return The value. + */ + public java.lang.CharSequence getPostAbbr() { + return post_abbr; + } + + /** + * Sets the value of the 'post_abbr' field. The postal code abbreviation of the state. + * + * @param value The value of 'post_abbr'. + * @return This builder. + */ + public utilities.State.Builder setPostAbbr(java.lang.CharSequence value) { + validate(fields()[1], value); + this.post_abbr = value; + fieldSetFlags()[1] = true; + return this; + } + + /** + * Checks whether the 'post_abbr' field has been set. The postal code abbreviation of the state. + * + * @return True if the 'post_abbr' field has been set, false otherwise. + */ + public boolean hasPostAbbr() { + return fieldSetFlags()[1]; + } + + /** + * Clears the value of the 'post_abbr' field. The postal code abbreviation of the state. + * + * @return This builder. + */ + public utilities.State.Builder clearPostAbbr() { + post_abbr = null; + fieldSetFlags()[1] = false; + return this; + } + + @Override + @SuppressWarnings("unchecked") + public State build() { + try { + State record = new State(); + record.name = + fieldSetFlags()[0] ? this.name : (java.lang.CharSequence) defaultValue(fields()[0]); + record.post_abbr = + fieldSetFlags()[1] + ? this.post_abbr + : (java.lang.CharSequence) defaultValue(fields()[1]); + return record; + } catch (org.apache.avro.AvroMissingFieldException e) { + throw e; + } catch (java.lang.Exception e) { + throw new org.apache.avro.AvroRuntimeException(e); + } + } + } + + @SuppressWarnings("unchecked") + private static final org.apache.avro.io.DatumWriter WRITER$ = + (org.apache.avro.io.DatumWriter) MODEL$.createDatumWriter(SCHEMA$); + + @Override + public void writeExternal(java.io.ObjectOutput out) throws java.io.IOException { + WRITER$.write(this, SpecificData.getEncoder(out)); + } + + @SuppressWarnings("unchecked") + private static final org.apache.avro.io.DatumReader READER$ = + (org.apache.avro.io.DatumReader) MODEL$.createDatumReader(SCHEMA$); + + @Override + public void readExternal(java.io.ObjectInput in) throws java.io.IOException { + READER$.read(this, SpecificData.getDecoder(in)); + } + + @Override + protected boolean hasCustomCoders() { + return true; + } + + @Override + public void customEncode(org.apache.avro.io.Encoder out) throws java.io.IOException { + out.writeString(this.name); + + out.writeString(this.post_abbr); + } + + @Override + public void customDecode(org.apache.avro.io.ResolvingDecoder in) throws java.io.IOException { + org.apache.avro.Schema.Field[] fieldOrder = in.readFieldOrderIfDiff(); + if (fieldOrder == null) { + this.name = in.readString(this.name instanceof Utf8 ? (Utf8) this.name : null); + + this.post_abbr = in.readString(this.post_abbr instanceof Utf8 ? (Utf8) this.post_abbr : null); + + } else { + for (int i = 0; i < 2; i++) { + switch (fieldOrder[i].pos()) { + case 0: + this.name = in.readString(this.name instanceof Utf8 ? (Utf8) this.name : null); + break; + + case 1: + this.post_abbr = + in.readString(this.post_abbr instanceof Utf8 ? (Utf8) this.post_abbr : null); + break; + + default: + throw new java.io.IOException("Corrupt ResolvingDecoder."); + } + } + } + } +} diff --git a/java-pubsub/samples/snippets/src/main/java/utilities/StateProto.java b/java-pubsub/samples/snippets/src/main/java/utilities/StateProto.java new file mode 100644 index 000000000000..388ba9b973cf --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/java/utilities/StateProto.java @@ -0,0 +1,804 @@ +/* + * 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. + */ + +/** + * This file is created using protoc. + * + *

To download, visit https://developers.google.com/protocol-buffers/docs/downloads + * + *

Run the following command from the `samples/snippets` directory to generate this class: + * + *

`protoc --proto_path=src/main/resources/ --java_out=src/main/java/ + * src/main/resources/us-states.proto` + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: us-states.proto + +// Protobuf Java Version: 3.25.4 +package utilities; + +public final class StateProto { + private StateProto() {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); + } + + public interface StateOrBuilder + extends + // @@protoc_insertion_point(interface_extends:utilities.State) + com.google.protobuf.MessageOrBuilder { + + /** + * string name = 1; + * + * @return The name. + */ + java.lang.String getName(); + + /** + * string name = 1; + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * string post_abbr = 2; + * + * @return The postAbbr. + */ + java.lang.String getPostAbbr(); + + /** + * string post_abbr = 2; + * + * @return The bytes for postAbbr. + */ + com.google.protobuf.ByteString getPostAbbrBytes(); + } + + /** Protobuf type {@code utilities.State} */ + public static final class State extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:utilities.State) + StateOrBuilder { + private static final long serialVersionUID = 0L; + + // Use State.newBuilder() to construct. + private State(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private State() { + name_ = ""; + postAbbr_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new State(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return utilities.StateProto.internal_static_utilities_State_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return utilities.StateProto.internal_static_utilities_State_fieldAccessorTable + .ensureFieldAccessorsInitialized( + utilities.StateProto.State.class, utilities.StateProto.State.Builder.class); + } + + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * string name = 1; + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + + /** + * string name = 1; + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int POST_ABBR_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object postAbbr_ = ""; + + /** + * string post_abbr = 2; + * + * @return The postAbbr. + */ + @java.lang.Override + public java.lang.String getPostAbbr() { + java.lang.Object ref = postAbbr_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + postAbbr_ = s; + return s; + } + } + + /** + * string post_abbr = 2; + * + * @return The bytes for postAbbr. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPostAbbrBytes() { + java.lang.Object ref = postAbbr_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + postAbbr_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(postAbbr_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, postAbbr_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(postAbbr_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, postAbbr_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof utilities.StateProto.State)) { + return super.equals(obj); + } + utilities.StateProto.State other = (utilities.StateProto.State) obj; + + if (!getName().equals(other.getName())) return false; + if (!getPostAbbr().equals(other.getPostAbbr())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + POST_ABBR_FIELD_NUMBER; + hash = (53 * hash) + getPostAbbr().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static utilities.StateProto.State parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static utilities.StateProto.State parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static utilities.StateProto.State parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static utilities.StateProto.State parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static utilities.StateProto.State parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static utilities.StateProto.State parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static utilities.StateProto.State parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static utilities.StateProto.State parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static utilities.StateProto.State parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static utilities.StateProto.State parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static utilities.StateProto.State parseFrom(com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static utilities.StateProto.State parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(utilities.StateProto.State prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code utilities.State} */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:utilities.State) + utilities.StateProto.StateOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return utilities.StateProto.internal_static_utilities_State_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return utilities.StateProto.internal_static_utilities_State_fieldAccessorTable + .ensureFieldAccessorsInitialized( + utilities.StateProto.State.class, utilities.StateProto.State.Builder.class); + } + + // Construct using utilities.StateProto.State.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + postAbbr_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return utilities.StateProto.internal_static_utilities_State_descriptor; + } + + @java.lang.Override + public utilities.StateProto.State getDefaultInstanceForType() { + return utilities.StateProto.State.getDefaultInstance(); + } + + @java.lang.Override + public utilities.StateProto.State build() { + utilities.StateProto.State result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public utilities.StateProto.State buildPartial() { + utilities.StateProto.State result = new utilities.StateProto.State(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(utilities.StateProto.State result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.postAbbr_ = postAbbr_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof utilities.StateProto.State) { + return mergeFrom((utilities.StateProto.State) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(utilities.StateProto.State other) { + if (other == utilities.StateProto.State.getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getPostAbbr().isEmpty()) { + postAbbr_ = other.postAbbr_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + postAbbr_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object name_ = ""; + + /** + * string name = 1; + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * string name = 1; + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * string name = 1; + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * string name = 1; + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * string name = 1; + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object postAbbr_ = ""; + + /** + * string post_abbr = 2; + * + * @return The postAbbr. + */ + public java.lang.String getPostAbbr() { + java.lang.Object ref = postAbbr_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + postAbbr_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * string post_abbr = 2; + * + * @return The bytes for postAbbr. + */ + public com.google.protobuf.ByteString getPostAbbrBytes() { + java.lang.Object ref = postAbbr_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + postAbbr_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * string post_abbr = 2; + * + * @param value The postAbbr to set. + * @return This builder for chaining. + */ + public Builder setPostAbbr(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + postAbbr_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * string post_abbr = 2; + * + * @return This builder for chaining. + */ + public Builder clearPostAbbr() { + postAbbr_ = getDefaultInstance().getPostAbbr(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * string post_abbr = 2; + * + * @param value The bytes for postAbbr to set. + * @return This builder for chaining. + */ + public Builder setPostAbbrBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + postAbbr_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:utilities.State) + } + + // @@protoc_insertion_point(class_scope:utilities.State) + private static final utilities.StateProto.State DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new utilities.StateProto.State(); + } + + public static utilities.StateProto.State getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public State parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public utilities.StateProto.State getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_utilities_State_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_utilities_State_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + + static { + java.lang.String[] descriptorData = { + "\n\017us-states.proto\022\tutilities\"(\n\005State\022\014\n" + + "\004name\030\001 \001(\t\022\021\n\tpost_abbr\030\002 \001(\tB\014B\nStateP" + + "rotob\006proto3" + }; + descriptor = + com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( + descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {}); + internal_static_utilities_State_descriptor = getDescriptor().getMessageTypes().get(0); + internal_static_utilities_State_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_utilities_State_descriptor, + new java.lang.String[] { + "Name", "PostAbbr", + }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/java-pubsub/samples/snippets/src/main/resources/logging.properties b/java-pubsub/samples/snippets/src/main/resources/logging.properties new file mode 100644 index 000000000000..b4c616c803df --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/resources/logging.properties @@ -0,0 +1,23 @@ +## Copyright 2022 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. + +# To run the example with the following logging config: +# cd samples/snippets/ +# mvn clean exec:java -Dexec.mainClass=pubsub.PublishWithGrpcCompression -Djava.util.logging.config.file=src/main/resources/logging.properties + +handlers=java.util.logging.FileHandler +.level=FINE +java.util.logging.FileHandler.pattern=log.txt +java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter +java.util.logging.SimpleFormatter.format=[%1$tF %1$tT] %4$-5s %5$s %n \ No newline at end of file diff --git a/java-pubsub/samples/snippets/src/main/resources/us-states-plus.avsc b/java-pubsub/samples/snippets/src/main/resources/us-states-plus.avsc new file mode 100644 index 000000000000..74225ae7e2e6 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/resources/us-states-plus.avsc @@ -0,0 +1,24 @@ +{ + "type":"record", + "name":"State", + "namespace":"utilities", + "doc":"A list of states in the United States of America.", + "fields":[ + { + "name":"name", + "type":"string", + "doc":"The common name of the state." + }, + { + "name":"post_abbr", + "type":"string", + "doc":"The postal code abbreviation of the state." + }, + { + "name":"population", + "type":"long", + "default":0, + "doc":"The population of the state." + } + ] +} diff --git a/java-pubsub/samples/snippets/src/main/resources/us-states-plus.proto b/java-pubsub/samples/snippets/src/main/resources/us-states-plus.proto new file mode 100644 index 000000000000..646c7dcb61ef --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/resources/us-states-plus.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; + +package utilities; +option java_outer_classname = "StateProto"; + +message State { + string name = 1; + string post_abbr = 2; + int64 population = 3; +} diff --git a/java-pubsub/samples/snippets/src/main/resources/us-states.avsc b/java-pubsub/samples/snippets/src/main/resources/us-states.avsc new file mode 100644 index 000000000000..7521882c7df7 --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/resources/us-states.avsc @@ -0,0 +1,18 @@ +{ + "type":"record", + "name":"State", + "namespace":"utilities", + "doc":"A list of states in the United States of America.", + "fields":[ + { + "name":"name", + "type":"string", + "doc":"The common name of the state." + }, + { + "name":"post_abbr", + "type":"string", + "doc":"The postal code abbreviation of the state." + } + ] +} \ No newline at end of file diff --git a/java-pubsub/samples/snippets/src/main/resources/us-states.proto b/java-pubsub/samples/snippets/src/main/resources/us-states.proto new file mode 100644 index 000000000000..8193875586ff --- /dev/null +++ b/java-pubsub/samples/snippets/src/main/resources/us-states.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; + +package utilities; +option java_outer_classname = "StateProto"; + +message State { + string name = 1; + string post_abbr = 2; +} \ No newline at end of file diff --git a/java-pubsub/samples/snippets/src/test/java/pubsub/AdminIT.java b/java-pubsub/samples/snippets/src/test/java/pubsub/AdminIT.java new file mode 100644 index 000000000000..2d31e17f7b76 --- /dev/null +++ b/java-pubsub/samples/snippets/src/test/java/pubsub/AdminIT.java @@ -0,0 +1,504 @@ +/* + * Copyright 2020 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. + */ + +package pubsub; + +import static com.google.common.truth.Truth.assertThat; +import static junit.framework.TestCase.assertNotNull; + +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.bigquery.BigQuery; +import com.google.cloud.bigquery.BigQueryOptions; +import com.google.cloud.bigquery.DatasetId; +import com.google.cloud.bigquery.DatasetInfo; +import com.google.cloud.bigquery.Field; +import com.google.cloud.bigquery.Schema; +import com.google.cloud.bigquery.StandardSQLTypeName; +import com.google.cloud.bigquery.StandardTableDefinition; +import com.google.cloud.bigquery.TableDefinition; +import com.google.cloud.bigquery.TableId; +import com.google.cloud.bigquery.TableInfo; +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.protobuf.Duration; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.TopicName; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.UUID; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.Timeout; + +public class AdminIT { + private ByteArrayOutputStream bout; + private PrintStream out; + + private static final String projectId = System.getenv("GOOGLE_CLOUD_PROJECT"); + private static final String _suffix = UUID.randomUUID().toString(); + private static final String topicId = "iam-topic-" + _suffix; + private static final String kinesisIngestionTopicId = "kinesis-ingestion-topic-" + _suffix; + private static final String cloudStorageIngestionTopicId = + "cloud-storage-ingestion-topic-" + _suffix; + private static final String awsMskIngestionTopicId = "aws-msk-ingestion-topic-" + _suffix; + private static final String confluentCloudIngestionTopicId = + "confluent-cloud-ingestion-topic-" + _suffix; + private static final String azureEventHubsIngestionTopicId = + "azure-event-hubs-ingestion-topic-" + _suffix; + private static final String smtTopicId = "smt-topic-" + _suffix; + private static final String pullSubscriptionId = "iam-pull-subscription-" + _suffix; + private static final String pushSubscriptionId = "iam-push-subscription-" + _suffix; + private static final String orderedSubscriptionId = "iam-ordered-subscription-" + _suffix; + private static final String filteredSubscriptionId = "iam-filtered-subscription-" + _suffix; + private static final String smtSubscriptionId = "smt-subscription-" + _suffix; + private static final String exactlyOnceSubscriptionId = + "iam-exactly-once-subscription-" + _suffix; + private static final String pushEndpoint = "https://my-test-project.appspot.com/push"; + private static final String bigqueryDatasetId = + "java_samples_data_set" + _suffix.replace("-", "_"); + private static final String bigquerySubscriptionId = "iam-bigquery-subscription-" + _suffix; + private static final String bigqueryTableId = "java_samples_table_" + _suffix; + private static final String cloudStorageSubscriptionId = + "iam-cloud-storage-subscription-" + _suffix; + private static final String cloudStorageFilenamePrefix = "log_events_"; + private static final String cloudStorageFilenameSuffix = ".txt"; + private static final Duration cloudStorageMaxDuration = + Duration.newBuilder().setSeconds(300).build(); + private static final String gcpServiceAccount = + "fake-service-account@fake-gcp-project.iam.gserviceaccount.com"; + // AWS Kinesis ingestion settings. + private static final String streamArn = + "arn:aws:kinesis:us-west-2:111111111111:stream/fake-stream-name"; + private static final String consumerArn = + "arn:aws:kinesis:us-west-2:111111111111:stream/fake-stream-name/" + + "consumer/consumer-1:1111111111"; + private static final String consumerArn2 = + "arn:aws:kinesis:us-west-2:111111111111:stream/fake-stream-name/" + + "consumer/consumer-2:2222222222"; + private static final String awsRoleArn = "arn:aws:iam::111111111111:role/fake-role-name"; + // GCS ingestion settings. + private static final String cloudStorageBucket = "pubsub-cloud-storage-bucket"; + private static final String cloudStorageInputFormat = "text"; + private static final String cloudStorageTextDelimiter = ","; + private static final String cloudStorageMatchGlob = "**.txt"; + private static final String cloudStorageMinimumObjectCreateTime = "1970-01-01T00:00:01Z"; + private static final String cloudStorageMinimumObjectCreateTimeSeconds = "seconds: 1"; + // AWS MSK ingestion settings. + String clusterArn = + "arn:aws:kafka:us-east-1:111111111111:cluster/fake-cluster-name/11111111-1111-1"; + String mskTopic = "fake-msk-topic-name"; + // Confluent Cloud ingestion settings. + String bootstrapServer = "fake-bootstrap-server-id.us-south1.gcp.confluent.cloud:9092"; + String clusterId = "fake-cluster-id"; + String confluentTopic = "fake-confluent-topic-name"; + String identityPoolId = "fake-pool-id"; + // Azure Event Hubs ingestion settings. + String resourceGroup = "fake-resource-group"; + String namespace = "fake-namespace"; + String eventHub = "fake-event-hub"; + String clientId = "11111111-1111-1111-1111-111111111111"; + String tenantId = "22222222-2222-2222-2222-222222222222"; + String subscriptionId = "33333333-3333-3333-3333-333333333333"; + + private static final TopicName topicName = TopicName.of(projectId, topicId); + private static final TopicName kinesisIngestionTopicName = + TopicName.of(projectId, kinesisIngestionTopicId); + private static final TopicName cloudStorageIngestionTopicName = + TopicName.of(projectId, cloudStorageIngestionTopicId); + private static final TopicName awsMskIngestionTopicName = + TopicName.of(projectId, awsMskIngestionTopicId); + private static final TopicName confluentCloudIngestionTopicName = + TopicName.of(projectId, confluentCloudIngestionTopicId); + private static final TopicName azureEventHubsIngestionTopicName = + TopicName.of(projectId, azureEventHubsIngestionTopicId); + private static final TopicName smtTopicName = TopicName.of(projectId, smtTopicId); + private static final SubscriptionName pullSubscriptionName = + SubscriptionName.of(projectId, pullSubscriptionId); + private static final SubscriptionName pushSubscriptionName = + SubscriptionName.of(projectId, pushSubscriptionId); + private static final SubscriptionName orderedSubscriptionName = + SubscriptionName.of(projectId, orderedSubscriptionId); + private static final SubscriptionName filteredSubscriptionName = + SubscriptionName.of(projectId, filteredSubscriptionId); + private static final SubscriptionName exactlyOnceSubscriptionName = + SubscriptionName.of(projectId, exactlyOnceSubscriptionId); + private static final SubscriptionName smtSubscriptionName = + SubscriptionName.of(projectId, smtSubscriptionId); + + private static void requireEnvVar(String varName) { + assertNotNull( + "Environment variable " + varName + " is required to perform these tests.", + System.getenv(varName)); + } + + @Rule public Timeout globalTimeout = Timeout.seconds(300); // 5 minute timeout + + @BeforeClass + public static void checkRequirements() { + requireEnvVar("GOOGLE_CLOUD_PROJECT"); + } + + @Before + public void setUp() throws Exception { + bout = new ByteArrayOutputStream(); + out = new PrintStream(bout); + System.setOut(out); + + // Create table for BigQuery subscription. + createBigQueryTable(); + } + + @After + public void tearDown() throws Exception { + // Delete the subscriptions if they have not been cleaned. + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + try { + subscriptionAdminClient.deleteSubscription(pullSubscriptionName); + subscriptionAdminClient.deleteSubscription(pushSubscriptionName); + subscriptionAdminClient.deleteSubscription(orderedSubscriptionName); + subscriptionAdminClient.deleteSubscription(filteredSubscriptionName); + subscriptionAdminClient.deleteSubscription(exactlyOnceSubscriptionName); + } catch (NotFoundException ignored) { + // ignore this as resources may not have been created + } + } + + // Delete the topic if it has not been cleaned. + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + topicAdminClient.deleteTopic(topicName.toString()); + } catch (NotFoundException ignored) { + // ignore this as resources may not have been created + } + + // Delete BigQuery table. + deleteBigQueryTable(); + + System.setOut(null); + } + + private void createBigQueryTable() throws Exception { + BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService(); + DatasetInfo datasetInfo = DatasetInfo.newBuilder(projectId, bigqueryDatasetId).build(); + bigquery.create(datasetInfo); + + Schema schema = + Schema.of( + Field.of("data", StandardSQLTypeName.STRING), + Field.of("message_id", StandardSQLTypeName.STRING), + Field.of("attributes", StandardSQLTypeName.STRING), + Field.of("subscription_name", StandardSQLTypeName.STRING), + Field.of("publish_time", StandardSQLTypeName.TIMESTAMP)); + + TableId tableId = TableId.of(projectId, bigqueryDatasetId, bigqueryTableId); + TableDefinition tableDefinition = StandardTableDefinition.of(schema); + TableInfo tableInfo = TableInfo.newBuilder(tableId, tableDefinition).build(); + + bigquery.create(tableInfo); + } + + private void deleteBigQueryTable() throws Exception { + BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService(); + DatasetId datasetId = DatasetId.of(projectId, bigqueryDatasetId); + bigquery.delete(datasetId, BigQuery.DatasetDeleteOption.deleteContents()); + } + + @Test + public void testAdmin() throws Exception { + // Test create topic. + CreateTopicExample.createTopicExample(projectId, topicId); + assertThat(bout.toString()).contains("Created topic: " + topicName.toString()); + + bout.reset(); + // Test create pull subscription. + CreatePullSubscriptionExample.createPullSubscriptionExample( + projectId, pullSubscriptionId, topicId); + assertThat(bout.toString()) + .contains("Created pull subscription: " + pullSubscriptionName.toString()); + + bout.reset(); + // Test create push subscription. + CreatePushSubscriptionExample.createPushSubscriptionExample( + projectId, pushSubscriptionId, topicId, pushEndpoint); + assertThat(bout.toString()) + .contains("Created push subscription: " + pushSubscriptionName.toString()); + + bout.reset(); + // Test list topics in project. + ListTopicsExample.listTopicsExample(projectId); + assertThat(bout.toString()).contains("Listed all topics."); + + bout.reset(); + // Test list subscriptions in topic. + ListSubscriptionsInTopicExample.listSubscriptionInTopicExample(projectId, topicId); + assertThat(bout.toString()).contains("Listed all the subscriptions in the topic."); + + bout.reset(); + ListSubscriptionsInProjectExample.listSubscriptionInProjectExample(projectId); + // Test list subscriptions in project. + assertThat(bout.toString()).contains("Listed all the subscriptions in the project"); + + bout.reset(); + // Test update push configuration. + UpdatePushConfigurationExample.updatePushConfigurationExample( + projectId, pullSubscriptionId, pushEndpoint); + assertThat(bout.toString()).contains("Updated push endpoint to: " + pushEndpoint); + + bout.reset(); + // Test get topic IAM policy. + GetTopicPolicyExample.getTopicPolicyExample(projectId, topicId); + assertThat(bout.toString()).contains("Topic policy:"); + + bout.reset(); + // Test get subscription IAM policy. + GetSubscriptionPolicyExample.getSubscriptionPolicyExample(projectId, pullSubscriptionId); + assertThat(bout.toString()).contains("Subscription policy:"); + + bout.reset(); + // Test set topic IAM policy. + SetTopicPolicyExample.setTopicPolicyExample(projectId, topicId); + assertThat(bout.toString()).contains("New topic policy:"); + + bout.reset(); + // Test set subscription IAM policy. + SetSubscriptionPolicyExample.setSubscriptionPolicyExample(projectId, pullSubscriptionId); + assertThat(bout.toString()).contains("New subscription policy:"); + + bout.reset(); + // Test topic permissions. + TestTopicPermissionsExample.testTopicPermissionsExample(projectId, topicId); + assertThat(bout.toString()).contains("permissions: \"pubsub.topics.attachSubscription\""); + assertThat(bout.toString()).contains("permissions: \"pubsub.topics.publish\""); + assertThat(bout.toString()).contains("permissions: \"pubsub.topics.update\""); + + bout.reset(); + TestSubscriptionPermissionsExample.testSubscriptionPermissionsExample( + projectId, pullSubscriptionId); + // Test subscription permissions. + assertThat(bout.toString()).contains("permissions: \"pubsub.subscriptions.consume\""); + assertThat(bout.toString()).contains("permissions: \"pubsub.subscriptions.update\""); + + bout.reset(); + // Test subscription detachment. + DetachSubscriptionExample.detachSubscriptionExample(projectId, pullSubscriptionId); + assertThat(bout.toString()).contains("Subscription is detached."); + + bout.reset(); + // Test create a subscription with ordering + CreateSubscriptionWithOrdering.createSubscriptionWithOrderingExample( + projectId, topicId, orderedSubscriptionId); + assertThat(bout.toString()).contains("Created a subscription with ordering"); + assertThat(bout.toString()).contains("enable_message_ordering=true"); + + bout.reset(); + // Test create a subscription with filtering enabled + CreateSubscriptionWithFiltering.createSubscriptionWithFilteringExample( + projectId, topicId, filteredSubscriptionId, "attributes.author=\"unknown\""); + assertThat(bout.toString()).contains("Created a subscription with filtering enabled"); + assertThat(bout.toString()) + .contains("google.pubsub.v1.Subscription.filter=attributes.author=\"unknown\""); + + bout.reset(); + // Test create a subscription with exactly once delivery enabled + CreateSubscriptionWithExactlyOnceDelivery.createSubscriptionWithExactlyOnceDeliveryExample( + projectId, topicId, exactlyOnceSubscriptionId); + assertThat(bout.toString()) + .contains("Created a subscription with exactly once delivery enabled:"); + assertThat(bout.toString()).contains("enable_exactly_once_delivery=true"); + + bout.reset(); + // Test create a BigQuery subscription + String bigqueryTablePath = String.join(".", projectId, bigqueryDatasetId, bigqueryTableId); + CreateBigQuerySubscriptionExample.createBigQuerySubscription( + projectId, topicId, bigquerySubscriptionId, bigqueryTablePath); + assertThat(bout.toString()).contains("Created a BigQuery subscription:"); + assertThat(bout.toString()).contains(bigqueryTablePath); + + bout.reset(); + // Test create a Cloud Storage subscription. + CreateCloudStorageSubscriptionExample.createCloudStorageSubscription( + projectId, + topicId, + cloudStorageSubscriptionId, + cloudStorageBucket, + cloudStorageFilenamePrefix, + cloudStorageFilenameSuffix, + cloudStorageMaxDuration); + assertThat(bout.toString()).contains("Created a CloudStorage subscription:"); + assertThat(bout.toString()).contains(cloudStorageBucket); + assertThat(bout.toString()).contains(cloudStorageFilenamePrefix); + assertThat(bout.toString()).contains(cloudStorageFilenameSuffix); + assertThat(bout.toString()).contains(Long.toString(cloudStorageMaxDuration.getSeconds())); + + bout.reset(); + // Test delete subscription. + DeleteSubscriptionExample.deleteSubscriptionExample(projectId, pullSubscriptionId); + DeleteSubscriptionExample.deleteSubscriptionExample(projectId, pushSubscriptionId); + DeleteSubscriptionExample.deleteSubscriptionExample(projectId, orderedSubscriptionId); + DeleteSubscriptionExample.deleteSubscriptionExample(projectId, exactlyOnceSubscriptionId); + DeleteSubscriptionExample.deleteSubscriptionExample(projectId, bigquerySubscriptionId); + DeleteSubscriptionExample.deleteSubscriptionExample(projectId, cloudStorageSubscriptionId); + assertThat(bout.toString()).contains("Deleted subscription."); + + bout.reset(); + // Update topic type to Kinesis ingestion. + UpdateTopicTypeExample.updateTopicTypeExample( + projectId, topicId, streamArn, consumerArn, awsRoleArn, gcpServiceAccount); + assertThat(bout.toString()).contains("google.pubsub.v1.Topic.name=" + topicName.toString()); + assertThat(bout.toString()).contains(streamArn); + assertThat(bout.toString()).contains(consumerArn); + assertThat(bout.toString()).contains(awsRoleArn); + assertThat(bout.toString()).contains(gcpServiceAccount); + + bout.reset(); + // Test delete topic. + DeleteTopicExample.deleteTopicExample(projectId, topicId); + assertThat(bout.toString()).contains("Deleted topic."); + + bout.reset(); + // Test create topic with Kinesis ingestion settings. + CreateTopicWithKinesisIngestionExample.createTopicWithKinesisIngestionExample( + projectId, kinesisIngestionTopicId, streamArn, consumerArn, awsRoleArn, gcpServiceAccount); + assertThat(bout.toString()) + .contains("google.pubsub.v1.Topic.name=" + kinesisIngestionTopicName.toString()); + assertThat(bout.toString()).contains(streamArn); + assertThat(bout.toString()).contains(consumerArn); + assertThat(bout.toString()).contains(awsRoleArn); + assertThat(bout.toString()).contains(gcpServiceAccount); + + bout.reset(); + // Test update existing Kinesis ingestion settings. + UpdateTopicTypeExample.updateTopicTypeExample( + projectId, kinesisIngestionTopicId, streamArn, consumerArn2, awsRoleArn, gcpServiceAccount); + assertThat(bout.toString()) + .contains("google.pubsub.v1.Topic.name=" + kinesisIngestionTopicName.toString()); + assertThat(bout.toString()).contains(streamArn); + assertThat(bout.toString()).contains(consumerArn2); + assertThat(bout.toString()).contains(awsRoleArn); + assertThat(bout.toString()).contains(gcpServiceAccount); + + bout.reset(); + // Test delete Kinesis ingestion topic. + DeleteTopicExample.deleteTopicExample(projectId, kinesisIngestionTopicId); + assertThat(bout.toString()).contains("Deleted topic."); + + bout.reset(); + // Test create topic with Cloud Storage ingestion settings. + CreateTopicWithCloudStorageIngestionExample.createTopicWithCloudStorageIngestionExample( + projectId, + cloudStorageIngestionTopicId, + cloudStorageBucket, + cloudStorageInputFormat, + cloudStorageTextDelimiter, + cloudStorageMatchGlob, + cloudStorageMinimumObjectCreateTime); + assertThat(bout.toString()) + .contains("google.pubsub.v1.Topic.name=" + cloudStorageIngestionTopicName.toString()); + assertThat(bout.toString()).contains(cloudStorageBucket); + assertThat(bout.toString()).contains(cloudStorageInputFormat); + assertThat(bout.toString()).contains(cloudStorageTextDelimiter); + assertThat(bout.toString()).contains(cloudStorageMatchGlob); + assertThat(bout.toString()).contains(cloudStorageMinimumObjectCreateTimeSeconds); + + bout.reset(); + // Test delete Cloud Storage ingestion topic. + DeleteTopicExample.deleteTopicExample(projectId, cloudStorageIngestionTopicId); + assertThat(bout.toString()).contains("Deleted topic."); + + bout.reset(); + // Test create topic with AWS MSK ingestion settings. + CreateTopicWithAwsMskIngestionExample.createTopicWithAwsMskIngestionExample( + projectId, awsMskIngestionTopicId, clusterArn, mskTopic, awsRoleArn, gcpServiceAccount); + assertThat(bout.toString()) + .contains("google.pubsub.v1.Topic.name=" + awsMskIngestionTopicName.toString()); + assertThat(bout.toString()).contains(clusterArn); + assertThat(bout.toString()).contains(mskTopic); + assertThat(bout.toString()).contains(awsRoleArn); + assertThat(bout.toString()).contains(gcpServiceAccount); + + bout.reset(); + // Test delete AWS MSK ingestion topic. + DeleteTopicExample.deleteTopicExample(projectId, awsMskIngestionTopicId); + assertThat(bout.toString()).contains("Deleted topic."); + + bout.reset(); + // Test create topic with Confluent Cloud ingestion settings. + CreateTopicWithConfluentCloudIngestionExample.createTopicWithConfluentCloudIngestionExample( + projectId, + confluentCloudIngestionTopicId, + bootstrapServer, + clusterId, + confluentTopic, + identityPoolId, + gcpServiceAccount); + assertThat(bout.toString()) + .contains("google.pubsub.v1.Topic.name=" + confluentCloudIngestionTopicName.toString()); + assertThat(bout.toString()).contains(bootstrapServer); + assertThat(bout.toString()).contains(clusterId); + assertThat(bout.toString()).contains(confluentTopic); + assertThat(bout.toString()).contains(identityPoolId); + assertThat(bout.toString()).contains(gcpServiceAccount); + + bout.reset(); + // Test delete Confluent Cloud ingestion topic. + DeleteTopicExample.deleteTopicExample(projectId, confluentCloudIngestionTopicId); + assertThat(bout.toString()).contains("Deleted topic."); + + bout.reset(); + // Test create topic with Azure Event Hubs ingestion settings. + CreateTopicWithAzureEventHubsIngestionExample.createTopicWithAzureEventHubsIngestionExample( + projectId, + azureEventHubsIngestionTopicId, + resourceGroup, + namespace, + eventHub, + clientId, + tenantId, + subscriptionId, + gcpServiceAccount); + assertThat(bout.toString()) + .contains("google.pubsub.v1.Topic.name=" + azureEventHubsIngestionTopicName.toString()); + assertThat(bout.toString()).contains(resourceGroup); + assertThat(bout.toString()).contains(namespace); + assertThat(bout.toString()).contains(eventHub); + assertThat(bout.toString()).contains(clientId); + assertThat(bout.toString()).contains(tenantId); + assertThat(bout.toString()).contains(subscriptionId); + assertThat(bout.toString()).contains(gcpServiceAccount); + + bout.reset(); + // Test delete Azure Event Hubs ingestion topic. + DeleteTopicExample.deleteTopicExample(projectId, azureEventHubsIngestionTopicId); + assertThat(bout.toString()).contains("Deleted topic."); + + bout.reset(); + // Test create topic with an SMT. + CreateTopicWithSmtExample.createTopicWithSmtExample(projectId, smtTopicId); + assertThat(bout.toString()).contains("Created topic with SMT: " + smtTopicName.toString()); + + bout.reset(); + // Test create topic with an SMT. + CreateSubscriptionWithSmtExample.createSubscriptionWithSmtExample( + projectId, smtTopicId, smtSubscriptionId); + assertThat(bout.toString()).contains("Created subscription with SMT"); + assertThat(bout.toString()).contains(smtSubscriptionName.toString()); + assertThat(bout.toString()).contains("redactSSN"); + DeleteSubscriptionExample.deleteSubscriptionExample(projectId, smtSubscriptionId); + DeleteTopicExample.deleteTopicExample(projectId, smtTopicId); + } +} diff --git a/java-pubsub/samples/snippets/src/test/java/pubsub/DeadLetterQueueIT.java b/java-pubsub/samples/snippets/src/test/java/pubsub/DeadLetterQueueIT.java new file mode 100644 index 000000000000..d85c27ad87b4 --- /dev/null +++ b/java-pubsub/samples/snippets/src/test/java/pubsub/DeadLetterQueueIT.java @@ -0,0 +1,150 @@ +/* + * Copyright 2020 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. + */ + +package pubsub; + +import static com.google.common.truth.Truth.assertThat; +import static junit.framework.TestCase.assertNotNull; + +import com.google.cloud.pubsub.v1.Publisher; +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.cloud.testing.junit4.MultipleAttemptsRule; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.SubscriptionName; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.UUID; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.Timeout; + +public class DeadLetterQueueIT { + + private ByteArrayOutputStream bout; + private PrintStream out; + + private static final String projectId = System.getenv("GOOGLE_CLOUD_PROJECT"); + private static String _suffix; + private static String topicId; + private static String subscriptionId; + private static String deadLetterTopicId; + private static TopicName topicName; + private static TopicName deadLetterTopicName; + private static SubscriptionName subscriptionName; + + private static void requireEnvVar(String varName) { + assertNotNull( + "Environment variable " + varName + " is required to perform these tests.", + System.getenv(varName)); + } + + // Helper function to publish a message. + private static void publishSomeMessages() throws Exception { + TopicName topicName = TopicName.of(projectId, topicId); + Publisher publisher = Publisher.newBuilder(topicName).build(); + ByteString data = ByteString.copyFromUtf8("Hello"); + PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build(); + publisher.publish(pubsubMessage).get(); + } + + @Rule public Timeout globalTimeout = Timeout.seconds(300); // 5 minute timeout + @Rule public MultipleAttemptsRule retryRule = new MultipleAttemptsRule(/* maxAttemptCount= */ 3); + + @BeforeClass + public static void checkRequirements() { + requireEnvVar("GOOGLE_CLOUD_PROJECT"); + _suffix = UUID.randomUUID().toString(); + topicId = "topic-" + _suffix; + subscriptionId = "subscription-" + _suffix; + deadLetterTopicId = "topic-dlq-" + _suffix; + topicName = TopicName.of(projectId, topicId); + deadLetterTopicName = TopicName.of(projectId, deadLetterTopicId); + subscriptionName = SubscriptionName.of(projectId, subscriptionId); + } + + @Before + public void setUp() throws Exception { + bout = new ByteArrayOutputStream(); + out = new PrintStream(bout); + System.setOut(out); + + // Create a topic to attach a subscription with dead letter policy, and a + // dead letter topic for that subscription to forward dead letter messages to. + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + Topic topic = Topic.newBuilder().setName(topicName.toString()).build(); + Topic deadLetterTopic = Topic.newBuilder().setName(deadLetterTopicName.toString()).build(); + topicAdminClient.createTopic(topic); + topicAdminClient.createTopic(deadLetterTopic); + } + } + + @After + public void tearDown() throws Exception { + // Delete the subscription with dead letter policy. + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + subscriptionAdminClient.deleteSubscription(subscriptionName); + } + + // Delete the topic that the subscription with dead letter policy is attached + // to, and the dead letter topic that the subscription forwards dead letter + // messages to. + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + topicAdminClient.deleteTopic(topicName.toString()); + topicAdminClient.deleteTopic(deadLetterTopicName.toString()); + } + + System.setOut(null); + } + + @Test + public void testQuickstart() throws Exception { + // Create a subscription with dead letter policy + CreateSubscriptionWithDeadLetterPolicyExample.createSubscriptionWithDeadLetterPolicyExample( + projectId, subscriptionId, topicId, deadLetterTopicId); + assertThat(bout.toString()).contains("Created subscription: " + subscriptionName.toString()); + assertThat(bout.toString()) + .contains("It will forward dead letter messages to: " + deadLetterTopicName.toString()); + assertThat(bout.toString()).contains("After 10 delivery attempts."); + + publishSomeMessages(); + + bout.reset(); + // Receive messages with delivery attempts. + ReceiveMessagesWithDeliveryAttemptsExample.receiveMessagesWithDeliveryAttemptsExample( + projectId, subscriptionId); + assertThat(bout.toString()).contains("Listening for messages on"); + assertThat(bout.toString()).contains("Data: Hello"); + assertThat(bout.toString()).contains("Delivery Attempt: 1"); + + bout.reset(); + // Update dead letter policy. + UpdateDeadLetterPolicyExample.updateDeadLetterPolicyExample( + projectId, subscriptionId, topicId, deadLetterTopicId); + assertThat(bout.toString()).contains("Max delivery attempts is now 20"); + + bout.reset(); + // Remove dead letter policy. + RemoveDeadLetterPolicyExample.removeDeadLetterPolicyExample(projectId, subscriptionId, topicId); + assertThat(bout.toString()).doesNotContain("dead_letter_policy"); + } +} diff --git a/java-pubsub/samples/snippets/src/test/java/pubsub/PublisherIT.java b/java-pubsub/samples/snippets/src/test/java/pubsub/PublisherIT.java new file mode 100644 index 000000000000..cd86aaef6c1c --- /dev/null +++ b/java-pubsub/samples/snippets/src/test/java/pubsub/PublisherIT.java @@ -0,0 +1,133 @@ +/* + * Copyright 2020 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. + */ + +package pubsub; + +import static com.google.common.truth.Truth.assertThat; +import static junit.framework.TestCase.assertNotNull; + +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.UUID; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.Timeout; + +public class PublisherIT { + private ByteArrayOutputStream bout; + private PrintStream out; + + private static final String projectId = System.getenv("GOOGLE_CLOUD_PROJECT"); + private static final String _suffix = UUID.randomUUID().toString(); + private static final String topicId = "publisher-test-topic-" + _suffix; + private static final TopicName topicName = TopicName.of(projectId, topicId); + + private static void requireEnvVar(String varName) { + assertNotNull( + "Environment variable " + varName + " is required to perform these tests.", + System.getenv(varName)); + } + + @Rule public Timeout globalTimeout = Timeout.seconds(300); // 5 minute timeout + + @BeforeClass + public static void checkRequirements() { + requireEnvVar("GOOGLE_CLOUD_PROJECT"); + } + + @Before + public void setUp() throws Exception { + bout = new ByteArrayOutputStream(); + out = new PrintStream(bout); + System.setOut(out); + + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + Topic topic = Topic.newBuilder().setName(topicName.toString()).build(); + topicAdminClient.createTopic(topic); + } + } + + @After + public void tearDown() throws Exception { + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + topicAdminClient.deleteTopic(topicName.toString()); + } + + System.setOut(null); + } + + @Test + public void testPublisher() throws Exception { + // Test quickstart publish + PublisherExample.publisherExample(projectId, topicId); + assertThat(bout.toString()).contains("Published message ID: "); + + bout.reset(); + // Test publish with error handling + PublishWithErrorHandlerExample.publishWithErrorHandlerExample(projectId, topicId); + assertThat(bout.toString()).contains("Published message ID: "); + + bout.reset(); + // Test publish with custom attributes. + PublishWithCustomAttributesExample.publishWithCustomAttributesExample(projectId, topicId); + assertThat(bout.toString()).contains("Published a message with custom attributes: "); + + bout.reset(); + // Test publish with batch settings. + PublishWithBatchSettingsExample.publishWithBatchSettingsExample(projectId, topicId); + assertThat(bout.toString()).contains("Published 100 messages with batch settings."); + + bout.reset(); + // Test publish with flow control settings. + PublishWithFlowControlExample.publishWithFlowControlExample(projectId, topicId); + assertThat(bout.toString()).contains("Published 1000 messages with flow control settings."); + + bout.reset(); + // Test publish with concurrency control. + PublishWithConcurrencyControlExample.publishWithConcurrencyControlExample(projectId, topicId); + assertThat(bout.toString()).contains("Published 100 messages with concurrency control."); + + bout.reset(); + // Test publish with Retry settings. + PublishWithRetrySettingsExample.publishWithRetrySettingsExample(projectId, topicId); + assertThat(bout.toString()).contains("Published a message with retry settings: "); + + bout.reset(); + // Test publish with ordering keys. + PublishWithOrderingKeys.publishWithOrderingKeysExample(projectId, topicId); + for (int i = 1; i <= 4; i++) { + assertThat(bout.toString()).contains("message" + i); + } + + bout.reset(); + // Test resume publish with ordering keys. + ResumePublishWithOrderingKeys.resumePublishWithOrderingKeysExample(projectId, topicId); + for (int i = 1; i <= 4; i++) { + assertThat(bout.toString()).contains("message" + i); + } + + bout.reset(); + // Test publish with gRPC compression. + PublishWithGrpcCompressionExample.publishWithGrpcCompressionExample(projectId, topicId); + assertThat(bout.toString()).contains("Published a compressed message of message ID: "); + } +} diff --git a/java-pubsub/samples/snippets/src/test/java/pubsub/SchemaIT.java b/java-pubsub/samples/snippets/src/test/java/pubsub/SchemaIT.java new file mode 100644 index 000000000000..342a42c616ac --- /dev/null +++ b/java-pubsub/samples/snippets/src/test/java/pubsub/SchemaIT.java @@ -0,0 +1,312 @@ +/* + * Copyright 2021 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. + */ + +package pubsub; + +import static com.google.common.truth.Truth.assertThat; +import static junit.framework.TestCase.assertNotNull; + +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.pubsub.v1.SchemaServiceClient; +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.cloud.testing.junit4.MultipleAttemptsRule; +import com.google.pubsub.v1.Encoding; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.Schema; +import com.google.pubsub.v1.SchemaName; +import com.google.pubsub.v1.TopicName; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.PrintStream; +import java.util.UUID; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.Timeout; + +public class SchemaIT { + private ByteArrayOutputStream bout; + private PrintStream out; + + private static final String projectId = System.getenv("GOOGLE_CLOUD_PROJECT"); + private static String _suffix; + private static String avroTopicId; + private static String protoTopicId; + private static String protoTopicWithRevisionsId; + private static String avroSubscriptionId; + private static String protoSubscriptionId; + private static String avroSchemaId; + private static String protoSchemaId; + + ClassLoader classLoader = getClass().getClassLoader(); + File avscFile = new File(classLoader.getResource("us-states.avsc").getFile()); + String absoluteAvscFilePath = avscFile.getAbsolutePath(); + File avscRevisionFile = new File(classLoader.getResource("us-states-plus.avsc").getFile()); + String absoluteAvscRevisionFilePath = avscRevisionFile.getAbsolutePath(); + + File protoFile = new File(classLoader.getResource("us-states-plus.proto").getFile()); + String absoluteProtoFilePath = protoFile.getAbsolutePath(); + File protoRevisionFile = new File(classLoader.getResource("us-states.proto").getFile()); + String absoluteProtoRevisionFilePath = protoFile.getAbsolutePath(); + + private static TopicName avroTopicName; + private static TopicName protoTopicName; + private static TopicName protoTopicWithRevisionsName; + private static ProjectSubscriptionName avroSubscriptionName; + private static ProjectSubscriptionName protoSubscriptionName; + private static SchemaName avroSchemaName; + private static SchemaName protoSchemaName; + + private static void requireEnvVar(String varName) { + assertNotNull( + "Environment variable " + varName + " is required to perform these tests.", + System.getenv(varName)); + } + + @Rule public Timeout globalTimeout = Timeout.seconds(600); // 10 minute timeout + @Rule public MultipleAttemptsRule retryRule = new MultipleAttemptsRule(/* maxAttemptCount= */ 3); + + @Before + public void setUp() { + _suffix = UUID.randomUUID().toString(); + avroTopicId = "avro-topic-" + _suffix; + protoTopicId = "proto-topic-" + _suffix; + protoTopicWithRevisionsId = "proto-topic-with-revisions-" + _suffix; + avroSubscriptionId = "avro-subscription-" + _suffix; + protoSubscriptionId = "proto-subscription-" + _suffix; + avroSchemaId = "avro-schema-" + _suffix; + protoSchemaId = "proto-schema-" + _suffix; + avroTopicName = TopicName.of(projectId, avroTopicId); + protoTopicName = TopicName.of(projectId, protoTopicId); + protoTopicWithRevisionsName = TopicName.of(projectId, protoTopicWithRevisionsId); + avroSubscriptionName = ProjectSubscriptionName.of(projectId, avroSubscriptionId); + protoSubscriptionName = ProjectSubscriptionName.of(projectId, protoSubscriptionId); + avroSchemaName = SchemaName.of(projectId, avroSchemaId); + protoSchemaName = SchemaName.of(projectId, protoSchemaId); + bout = new ByteArrayOutputStream(); + out = new PrintStream(bout); + System.setOut(out); + } + + @After + public void tearDown() throws Exception { + // Delete the schemas if they have not been cleaned up. + try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) { + try { + schemaServiceClient.deleteSchema(protoSchemaName); + } catch (NotFoundException ignored) { + // Ignore this as resources may have already been cleaned up. + } + try { + schemaServiceClient.deleteSchema(avroSchemaName); + } catch (NotFoundException ignored) { + // Ignore this as resources may have already been cleaned up. + } + } + + // Delete the subscriptions. + try (SubscriptionAdminClient subscriptionAdmin = SubscriptionAdminClient.create()) { + try { + subscriptionAdmin.deleteSubscription(avroSubscriptionName.toString()); + } catch (NotFoundException ignored) { + // Ignore this as resources may have already been cleaned up. + } + try { + subscriptionAdmin.deleteSubscription(protoSubscriptionName.toString()); + } catch (NotFoundException ignored) { + // Ignore this as resources may have already been cleaned up. + } + } + + // Delete the topics. + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + try { + topicAdminClient.deleteTopic(avroTopicName.toString()); + } catch (NotFoundException ignored) { + // Ignore this as resources may have already been cleaned up. + } + try { + topicAdminClient.deleteTopic(protoTopicName.toString()); + } catch (NotFoundException ignored) { + // Ignore this as resources may have already been cleaned up. + } + try { + topicAdminClient.deleteTopic(protoTopicWithRevisionsName.toString()); + } catch (NotFoundException ignored) { + // Ignore this as resources may have already been cleaned up. + } + } + System.setOut(null); + } + + @Test + public void testSchema() throws Exception { + // Test creating Avro schema. + Schema avroSchema = + CreateAvroSchemaExample.createAvroSchemaExample( + projectId, avroSchemaId, absoluteAvscFilePath); + assertThat(bout.toString()).contains("Created a schema using an Avro schema:"); + assertThat(bout.toString()).contains(avroSchemaName.toString()); + + bout.reset(); + // Test committing Avro schema. + CommitAvroSchemaExample.commitAvroSchemaExample( + projectId, avroSchemaId, absoluteAvscRevisionFilePath); + assertThat(bout.toString()).contains("Committed a schema using an Avro schema:"); + assertThat(bout.toString()).contains(avroSchemaName.toString()); + + bout.reset(); + // Test creating Proto schema. + final Schema protoSchema = + CreateProtoSchemaExample.createProtoSchemaExample( + projectId, protoSchemaId, absoluteProtoFilePath); + assertThat(bout.toString()).contains("Created a schema using a protobuf schema:"); + assertThat(bout.toString()).contains(protoSchemaName.toString()); + + bout.reset(); + // Test committing Proto schema. + final Schema protoSchemaRevision = + CommitProtoSchemaExample.commitProtoSchemaExample( + projectId, protoSchemaId, absoluteProtoRevisionFilePath); + assertThat(bout.toString()).contains("Committed a schema using a protobuf schema:"); + assertThat(bout.toString()).contains(protoSchemaName.toString()); + + bout.reset(); + // Test rolling back a schema. + RollbackSchemaExample.rollbackSchemaExample( + projectId, protoSchemaId, protoSchema.getRevisionId()); + assertThat(bout.toString()).contains("Rolled back a schema:"); + assertThat(bout.toString()).contains(protoSchemaName.toString()); + + bout.reset(); + // Test getting a schema. + GetSchemaExample.getSchemaExample(projectId, avroSchemaId); + assertThat(bout.toString()).contains("Got a schema:"); + assertThat(bout.toString()).contains(avroSchemaName.toString()); + + bout.reset(); + // Test getting a schema revision. + GetSchemaRevisionExample.getSchemaRevisionExample( + projectId, protoSchemaId + "@" + protoSchemaRevision.getRevisionId()); + assertThat(bout.toString()).contains("Got a schema:"); + assertThat(bout.toString()).contains(protoSchemaName.toString()); + + bout.reset(); + // Test listing schemas. + ListSchemasExample.listSchemasExample(projectId); + assertThat(bout.toString()).contains("Listed schemas."); + assertThat(bout.toString()).contains(avroSchemaName.toString()); + + bout.reset(); + // Test listing schema revisions. + ListSchemaRevisionsExample.listSchemaRevisionsExample(projectId, protoSchemaId); + assertThat(bout.toString()).contains("Listed schema revisions."); + assertThat(bout.toString()).contains(protoSchemaName.toString()); + + bout.reset(); + // Test creating a topic with an Avro schema with BINARY encoding. + CreateTopicWithSchemaExample.createTopicWithSchemaExample( + projectId, avroTopicId, avroSchemaId, Encoding.BINARY); + assertThat(bout.toString()).contains("Created topic with schema: " + avroTopicName.toString()); + + bout.reset(); + // Test creating a topic with a proto schema with JSON encoding. + CreateTopicWithSchemaExample.createTopicWithSchemaExample( + projectId, protoTopicId, protoSchemaId, Encoding.JSON); + assertThat(bout.toString()).contains("Created topic with schema: " + protoTopicName.toString()); + + bout.reset(); + // Test creating a topic with a proto schema with revisions specified. + CreateTopicWithSchemaRevisionsExample.createTopicWithSchemaRevisionsExample( + projectId, + protoTopicWithRevisionsId, + protoSchemaId, + protoSchema.getRevisionId(), + protoSchemaRevision.getRevisionId(), + Encoding.BINARY); + assertThat(bout.toString()) + .contains("Created topic with schema: " + protoTopicWithRevisionsName.toString()); + + bout.reset(); + // Attach a default pull subscription to each topic. + CreatePullSubscriptionExample.createPullSubscriptionExample( + projectId, avroSubscriptionId, avroTopicId); + CreatePullSubscriptionExample.createPullSubscriptionExample( + projectId, protoSubscriptionId, protoTopicId); + + bout.reset(); + // Test publishing BINARY-encoded Avro records. + PublishAvroRecordsExample.publishAvroRecordsExample(projectId, avroTopicId); + assertThat(bout.toString()).contains("Preparing a BINARY encoder..."); + assertThat(bout.toString()).contains("Published message ID:"); + + bout.reset(); + // Test publishing JSON-encoded proto messages. + PublishProtobufMessagesExample.publishProtobufMessagesExample(projectId, protoTopicId); + assertThat(bout.toString()).contains("Publishing a JSON-formatted message:"); + assertThat(bout.toString()).contains("Published message ID:"); + + bout.reset(); + // Test receiving BINARY-encoded Avro records. + SubscribeWithAvroSchemaRevisionsExample.subscribeWithAvroSchemaRevisionsExample( + projectId, avroSubscriptionId); + assertThat(bout.toString()).contains("Receiving a binary-encoded message:"); + assertThat(bout.toString()).contains(" is abbreviated as "); + + bout.reset(); + // Test publishing BINARY-encoded Avro records. + PublishAvroRecordsExample.publishAvroRecordsExample(projectId, avroTopicId); + assertThat(bout.toString()).contains("Preparing a BINARY encoder..."); + assertThat(bout.toString()).contains("Published message ID:"); + + bout.reset(); + // Test receiving BINARY-encoded Avro records. + SubscribeWithAvroSchemaExample.subscribeWithAvroSchemaExample(projectId, avroSubscriptionId); + assertThat(bout.toString()).contains("Receiving a binary-encoded message:"); + assertThat(bout.toString()).contains(" is abbreviated as "); + + bout.reset(); + // Test receiving JSON-encoded proto messages. + SubscribeWithProtoSchemaExample.subscribeWithProtoSchemaExample(projectId, protoSubscriptionId); + assertThat(bout.toString()).contains("Received a JSON-formatted message:"); + assertThat(bout.toString()).contains("Ack'ed the message"); + + bout.reset(); + // Test updating a topic schema settings + UpdateTopicSchemaExample.updateTopicSchemaExample( + projectId, + protoTopicWithRevisionsId, + protoSchemaRevision.getRevisionId(), + protoSchemaRevision.getRevisionId()); + assertThat(bout.toString()) + .contains("Updated topic with schema: " + protoTopicWithRevisionsName.toString()); + + bout.reset(); + // Test deleting a schema revision. + DeleteSchemaRevisionExample.deleteSchemaRevisionExample( + projectId, protoSchemaId + "@" + protoSchemaRevision.getRevisionId()); + assertThat(bout.toString()).contains("Deleted a schema revision:"); + assertThat(bout.toString()).contains(protoSchemaName.toString()); + + bout.reset(); + // Test deleting a schema. + DeleteSchemaExample.deleteSchemaExample(projectId, avroSchemaId); + assertThat(bout.toString()).contains("Deleted a schema:"); + assertThat(bout.toString()).contains(avroSchemaName.toString()); + } +} diff --git a/java-pubsub/samples/snippets/src/test/java/pubsub/SubscriberIT.java b/java-pubsub/samples/snippets/src/test/java/pubsub/SubscriberIT.java new file mode 100644 index 000000000000..dc4bf0f7b211 --- /dev/null +++ b/java-pubsub/samples/snippets/src/test/java/pubsub/SubscriberIT.java @@ -0,0 +1,261 @@ +/* + * Copyright 2020 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. + */ + +package pubsub; + +import static com.google.common.truth.Truth.assertThat; +import static junit.framework.TestCase.assertNotNull; + +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutures; +import com.google.cloud.pubsub.v1.Publisher; +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.common.collect.ImmutableMap; +import com.google.protobuf.ByteString; +import com.google.pubsub.v1.ProjectSubscriptionName; +import com.google.pubsub.v1.ProjectTopicName; +import com.google.pubsub.v1.PubsubMessage; +import com.google.pubsub.v1.Subscription; +import com.google.pubsub.v1.Topic; +import com.google.pubsub.v1.TopicName; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.UUID; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.Timeout; + +public class SubscriberIT { + private static ByteArrayOutputStream bout; + private static PrintStream out; + + private static final String projectId = System.getenv("GOOGLE_CLOUD_PROJECT"); + private static final String _suffix = UUID.randomUUID().toString(); + private static final String topicId = "subscriber-test-topic-" + _suffix; + private static final String topicIdEod = "subscriber-test-topic-eod" + _suffix; + private static final String subscriptionId = "subscriber-test-subscription-" + _suffix; + // For a subscription with exactly once delivery enabled. + private static final String subscriptionEodId = "subscriber-test-subscription-eod" + _suffix; + private static final String subscriptionOptimisticId = + "subscriber-test-subscription-optimistic" + _suffix; + private static final TopicName topicName = TopicName.of(projectId, topicId); + private static final TopicName topicNameEod = TopicName.of(projectId, topicIdEod); + private static final ProjectSubscriptionName subscriptionName = + ProjectSubscriptionName.of(projectId, subscriptionId); + private static final ProjectSubscriptionName subscriptionEodName = + ProjectSubscriptionName.of(projectId, subscriptionEodId); + private static final ProjectSubscriptionName subscriptionOptimisticName = + ProjectSubscriptionName.of(projectId, subscriptionOptimisticId); + + private static void requireEnvVar(String varName) { + assertNotNull( + "Environment variable " + varName + " is required to perform these tests.", + System.getenv(varName)); + } + + private static List publishSomeMessages(Integer numOfMessages) throws Exception { + return publishSomeMessages(numOfMessages, topicId); + } + + // Helper function to publish some messages. + private static List publishSomeMessages(Integer numOfMessages, String topicId) + throws Exception { + ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId); + Publisher publisher = Publisher.newBuilder(topicName).build(); + List> messageIdFutures = new ArrayList<>(); + for (int i = 0; i < numOfMessages; i++) { + ByteString data = ByteString.copyFromUtf8("Hello " + i); + PubsubMessage pubsubMessage = + PubsubMessage.newBuilder() + .setData(data) + .putAllAttributes(ImmutableMap.of("year", "2020", "author", "unknown")) + .build(); + ApiFuture messageIdFuture = publisher.publish(pubsubMessage); + messageIdFutures.add(messageIdFuture); + } + return ApiFutures.allAsList(messageIdFutures).get(); + } + + // Helper function to retry synchronous pull attempts until all outstanding messages are received. + private void syncPullWithRetries( + Integer numOfMessages, Integer maxRetries, CheckedRunnable syncPull) throws Exception { + HashSet outstandingMessages = new HashSet<>(); + for (int i = 0; i < numOfMessages; i++) { + outstandingMessages.add("Hello " + i); + } + int attempt = 1; + while ((outstandingMessages.size() > 0) && (attempt <= maxRetries)) { + syncPull.run(); + HashSet clone = (HashSet) outstandingMessages.clone(); + for (String message : clone) { + if (bout.toString().contains(message)) { + outstandingMessages.remove(message); + } + } + attempt++; + } + assertThat(outstandingMessages).isEmpty(); + } + + @FunctionalInterface + public interface CheckedRunnable { + void run() throws Exception; + } + + @Rule public Timeout globalTimeout = Timeout.seconds(600); // 10 minute timeout + + @BeforeClass + public static void checkRequirements() { + requireEnvVar("GOOGLE_CLOUD_PROJECT"); + } + + @BeforeClass + public static void setUp() throws Exception { + bout = new ByteArrayOutputStream(); + out = new PrintStream(bout); + System.setOut(out); + + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + Topic topic = Topic.newBuilder().setName(topicName.toString()).build(); + topicAdminClient.createTopic(topic); + + Topic topicEod = Topic.newBuilder().setName(topicNameEod.toString()).build(); + topicAdminClient.createTopic(topicEod); + } + + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + Subscription subscription = + Subscription.newBuilder() + .setName(subscriptionName.toString()) + .setTopic(topicName.toString()) + .build(); + subscriptionAdminClient.createSubscription(subscription); + + Subscription subscriptionEod = + Subscription.newBuilder() + .setName(subscriptionEodName.toString()) + .setTopic(topicNameEod.toString()) + // Enable exactly once delivery in the subscription. + .setEnableExactlyOnceDelivery(true) + .build(); + subscriptionAdminClient.createSubscription(subscriptionEod); + } + } + + @AfterClass + public static void tearDown() throws Exception { + try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { + subscriptionAdminClient.deleteSubscription(subscriptionName.toString()); + subscriptionAdminClient.deleteSubscription(subscriptionEodName.toString()); + try { + subscriptionAdminClient.deleteSubscription(subscriptionOptimisticName.toString()); + } catch (Exception e) { + // Ignore exception. + } + } + + try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) { + topicAdminClient.deleteTopic(topicName.toString()); + topicAdminClient.deleteTopic(topicNameEod.toString()); + } + + System.setOut(null); + } + + @Test + public void testSubscriber() throws Exception { + publishSomeMessages(1); + // Test subscribe asynchronously. + SubscribeAsyncExample.subscribeAsyncExample(projectId, subscriptionId); + assertThat(bout.toString()).contains("Data: Hello 0"); + + publishSomeMessages(1); + bout.reset(); + // Test subscribe with custom attributes. + SubscribeWithCustomAttributesExample.subscribeWithCustomAttributesExample( + projectId, subscriptionId); + assertThat(bout.toString()).contains("Data: Hello 0"); + assertThat(bout.toString()).contains("author = unknown"); + assertThat(bout.toString()).contains("year = 2020"); + + publishSomeMessages(5); + bout.reset(); + // Test subscribe with error listener. + SubscribeWithErrorListenerExample.subscribeWithErrorListenerExample(projectId, subscriptionId); + assertThat(bout.toString()).contains("Data: Hello 0"); + + publishSomeMessages(200); + bout.reset(); + // Test subscribe with flow control settings. + SubscribeWithFlowControlSettingsExample.subscribeWithFlowControlSettingsExample( + projectId, subscriptionId); + for (int i = 0; i < 200; i++) { + assertThat(bout.toString()).contains("Data: Hello " + i); + } + + publishSomeMessages(100); + bout.reset(); + // Test subscribe with concurrency control. + SubscribeWithConcurrencyControlExample.subscribeWithConcurrencyControlExample( + projectId, subscriptionId); + for (int i = 0; i < 100; i++) { + assertThat(bout.toString()).contains("Data: Hello " + i); + } + + publishSomeMessages(3); + bout.reset(); + // Test subscribe synchronously. + syncPullWithRetries( + 3, 3, () -> SubscribeSyncExample.subscribeSyncExample(projectId, subscriptionId, 3)); + + publishSomeMessages(3); + bout.reset(); + // Test subscribe synchronously with lease management. + syncPullWithRetries( + 3, + 3, + () -> + SubscribeSyncWithLeaseExample.subscribeSyncWithLeaseExample( + projectId, subscriptionId, 10)); + } + + @Test + public void testSubscriberExactlyOnceDelivery() throws Exception { + List messageIds = publishSomeMessages(10, topicIdEod); + bout.reset(); + SubscribeWithExactlyOnceConsumerWithResponseExample + .subscribeWithExactlyOnceConsumerWithResponseExample(projectId, subscriptionEodId); + for (String messageId : messageIds) { + assertThat(bout.toString()).contains("Message successfully acked: " + messageId); + } + } + + @Test + public void testOptimisticSubscriber() throws Exception { + bout.reset(); + OptimisticSubscribeExample.optimisticSubscribeExample( + projectId, subscriptionOptimisticId, topicId); + assertThat( + bout.toString() + .contains("Created pull subscription: " + subscriptionOptimisticName.toString())); + } +} diff --git a/java-pubsub/samples/snippets/src/test/resources/us-states-plus.avsc b/java-pubsub/samples/snippets/src/test/resources/us-states-plus.avsc new file mode 100644 index 000000000000..74225ae7e2e6 --- /dev/null +++ b/java-pubsub/samples/snippets/src/test/resources/us-states-plus.avsc @@ -0,0 +1,24 @@ +{ + "type":"record", + "name":"State", + "namespace":"utilities", + "doc":"A list of states in the United States of America.", + "fields":[ + { + "name":"name", + "type":"string", + "doc":"The common name of the state." + }, + { + "name":"post_abbr", + "type":"string", + "doc":"The postal code abbreviation of the state." + }, + { + "name":"population", + "type":"long", + "default":0, + "doc":"The population of the state." + } + ] +} diff --git a/java-pubsub/samples/snippets/src/test/resources/us-states-plus.proto b/java-pubsub/samples/snippets/src/test/resources/us-states-plus.proto new file mode 100644 index 000000000000..646c7dcb61ef --- /dev/null +++ b/java-pubsub/samples/snippets/src/test/resources/us-states-plus.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; + +package utilities; +option java_outer_classname = "StateProto"; + +message State { + string name = 1; + string post_abbr = 2; + int64 population = 3; +} diff --git a/java-pubsub/samples/snippets/src/test/resources/us-states.avsc b/java-pubsub/samples/snippets/src/test/resources/us-states.avsc new file mode 100644 index 000000000000..7521882c7df7 --- /dev/null +++ b/java-pubsub/samples/snippets/src/test/resources/us-states.avsc @@ -0,0 +1,18 @@ +{ + "type":"record", + "name":"State", + "namespace":"utilities", + "doc":"A list of states in the United States of America.", + "fields":[ + { + "name":"name", + "type":"string", + "doc":"The common name of the state." + }, + { + "name":"post_abbr", + "type":"string", + "doc":"The postal code abbreviation of the state." + } + ] +} \ No newline at end of file diff --git a/java-pubsub/samples/snippets/src/test/resources/us-states.proto b/java-pubsub/samples/snippets/src/test/resources/us-states.proto new file mode 100644 index 000000000000..8193875586ff --- /dev/null +++ b/java-pubsub/samples/snippets/src/test/resources/us-states.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; + +package utilities; +option java_outer_classname = "StateProto"; + +message State { + string name = 1; + string post_abbr = 2; +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 76fbb03a2f1f..97b032c9cbda 100644 --- a/pom.xml +++ b/pom.xml @@ -183,6 +183,7 @@ java-privilegedaccessmanager java-profiler java-publicca + java-pubsub java-rapidmigrationassessment java-recaptchaenterprise java-recommendations-ai diff --git a/versions.txt b/versions.txt index 3edfa9233968..482809b6050e 100644 --- a/versions.txt +++ b/versions.txt @@ -976,3 +976,6 @@ proto-google-cloud-vectorsearch-v1:0.8.0:0.9.0-SNAPSHOT grpc-google-cloud-vectorsearch-v1:0.8.0:0.9.0-SNAPSHOT google-cloud-bigquery:2.61.0:2.62.0-SNAPSHOT google-cloud-bigquery-jdbc:0.5.0:0.6.0-SNAPSHOT +google-cloud-pubsub:1.149.0:1.149.1-SNAPSHOT +grpc-google-cloud-pubsub-v1:1.131.0:1.131.1-SNAPSHOT +proto-google-cloud-pubsub-v1:1.131.0:1.131.1-SNAPSHOT